Support named identifiers on the right side

This commit is contained in:
Eugen Wissner 2025-05-12 00:06:02 +02:00
parent 707f983fe9
commit d85183c7a6
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0
4 changed files with 725 additions and 592 deletions

View File

@ -3,7 +3,7 @@
# obtain one at https://mozilla.org/MPL/2.0/. # obtain one at https://mozilla.org/MPL/2.0/.
.global _is_alpha, _is_digit, _is_alnum, _is_upper, _is_lower .global _is_alpha, _is_digit, _is_alnum, _is_upper, _is_lower
.global _write_out, _read_file, _write_error, _put_char, _printi .global _write_s, _read_file, _write_error, _write_c, _write_i, _print_i
.global _get, _memcmp, _memchr, _memmem, _memcpy .global _get, _memcmp, _memchr, _memmem, _memcpy
.global _divide_by_zero_error, _exit, _mmap .global _divide_by_zero_error, _exit, _mmap
.global _strings_index, _string_equal .global _strings_index, _string_equal
@ -175,16 +175,20 @@ _is_alnum:
addi sp, sp, 16 addi sp, sp, 16
ret ret
.type _write_out, @function # Writes a string to the standard output.
_write_out: #
# Parameters:
# a0 - Length of the string.
# a1 - String pointer.
.type _write_s, @function
_write_s:
# Prologue. # Prologue.
addi sp, sp, -8 addi sp, sp, -8
sw ra, 4(sp) sw ra, 4(sp)
sw s0, 0(sp) sw s0, 0(sp)
addi s0, sp, 8 addi s0, sp, 8
mv a2, a1 mv a2, a0
mv a1, a0
li a0, STDOUT li a0, STDOUT
li a7, SYS_WRITE li a7, SYS_WRITE
ecall ecall
@ -244,53 +248,87 @@ _divide_by_zero_error:
ecall ecall
ret ret
# a0 - Whole number. # Writes a number to a string buffer.
#
# t0 - Local buffer.
# t1 - Constant 10. # t1 - Constant 10.
# a1 - Local buffer.
# t2 - Current character. # t2 - Current character.
# t3 - Whether the number is negative. # t3 - Whether the number is negative.
.type printi, @function #
_printi: # Parameters:
addi sp, sp, -16 # a0 - Whole number.
sw s0, 0(sp) # a1 - Buffer pointer.
sw ra, 4(sp) #
addi s0, sp, 16 # Sets a0 to the length of the written number.
addi t1, zero, 10 .type _print_i, @function
addi a1, s0, -1 _print_i:
addi sp, sp, -32
sw ra, 28(sp)
sw s0, 24(sp)
addi s0, sp, 32
addi t3, zero, 0 li t1, 10
bge a0, zero, .digit10 addi t0, s0, -9
addi t3, zero, 1
sub a0, zero, a0
.digit10: li t3, 0
bgez a0, .Lprint_i_digit10
li t3, 1
neg a0, a0
.Lprint_i_digit10:
rem t2, a0, t1 rem t2, a0, t1
addi t2, t2, '0' addi t2, t2, '0'
sb t2, 0(a1) sb t2, 0(t0)
div a0, a0, t1 div a0, a0, t1
addi a1, a1, -1 addi t0, t0, -1
bne zero, a0, .digit10 bne zero, a0, .Lprint_i_digit10
beq zero, t3, .write_call beq zero, t3, .Lprint_i_write_call
addi t2, zero, '-' addi t2, zero, '-'
sb t2, 0(a1) sb t2, 0(t0)
addi a1, a1, -1 addi t0, t0, -1
.write_call: .Lprint_i_write_call:
addi a0, zero, 1 mv a0, a1
addi a1, a1, 1 addi a1, t0, 1
sub a2, s0, a1 sub a2, s0, t0
addi a7, zero, 64 # write addi a2, a2, -9
ecall sw a2, 0(sp)
lw s0, 0(sp) call _memcpy
lw ra, 4(sp)
addi sp, sp, 16 lw a0, 0(sp)
lw ra, 28(sp)
lw s0, 24(sp)
addi sp, sp, 32
ret
# Writes a number to the standard output.
#
# Parameters:
# a0 - Whole number.
.type _write_i, @function
_write_i:
addi sp, sp, -32
sw ra, 28(sp)
sw s0, 24(sp)
addi s0, sp, 32
addi a1, sp, 0
call _print_i
addi a1, sp, 0
call _write_s
lw ra, 28(sp)
lw s0, 24(sp)
addi sp, sp, 32
ret ret
# Writes a character from a0 into the standard output. # Writes a character from a0 into the standard output.
.type _put_char, @function .type _write_c, @function
_put_char: _write_c:
# Prologue # Prologue
addi sp, sp, -16 addi sp, sp, -16
sw ra, 12(sp) sw ra, 12(sp)

File diff suppressed because it is too large Load Diff

View File

@ -22,9 +22,9 @@ var
loca0: Word loca0: Word
loca4: Word loca4: Word
loca8: Word loca8: Word
loca12: ^Byte
loca16: Word loca16: Word
loca20: Word loca20: Word
loca12: ^Byte
loca24: Bool loca24: Bool
begin begin
_build_expression(0); _build_expression(0);
@ -79,16 +79,16 @@ begin
_build_expression(1); _build_expression(1);
loca0 := 0x627573; loca0 := 0x627573;
_write_out(@loca0, 3); _write_s(3, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca8, 4); _write_s(4, @loca8);
loca0 := 0x7a716573; loca0 := 0x7a716573;
_write_out(@loca0, 4); _write_s(4, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 3); _write_s(3, @loca4);
_put_char(0x0a); _write_c(0x0a);
goto .Lbuild_binary_expression_end; goto .Lbuild_binary_expression_end;
@ -96,10 +96,10 @@ begin
_advance(1); _advance(1);
_build_expression(1); _build_expression(1);
loca0 := 0x646e61; loca0 := 0x646e61;
_write_out(@loca0, 3); _write_s(3, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca8, 4); _write_s(4, @loca8);
goto .Lbuild_binary_expression_end; goto .Lbuild_binary_expression_end;
@ -107,10 +107,10 @@ begin
_advance(2); _advance(2);
_build_expression(1); _build_expression(1);
loca0 := 0x726f; loca0 := 0x726f;
_write_out(@loca0, 2); _write_s(2, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca8, 4); _write_s(4, @loca8);
goto .Lbuild_binary_expression_end; goto .Lbuild_binary_expression_end;
@ -118,10 +118,10 @@ begin
_advance(1); _advance(1);
_build_expression(1); _build_expression(1);
loca0 := 0x646461; loca0 := 0x646461;
_write_out(@loca0, 3); _write_s(3, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca8, 4); _write_s(4, @loca8);
goto .Lbuild_binary_expression_end; goto .Lbuild_binary_expression_end;
@ -129,10 +129,10 @@ begin
_advance(1); _advance(1);
_build_expression(1); _build_expression(1);
loca0 := 0x627573; loca0 := 0x627573;
_write_out(@loca0, 3); _write_s(3, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca8, 4); _write_s(4, @loca8);
goto .Lbuild_binary_expression_end; goto .Lbuild_binary_expression_end;
@ -140,10 +140,10 @@ begin
_advance(1); _advance(1);
_build_expression(1); _build_expression(1);
loca0 := 0x6c756d; loca0 := 0x6c756d;
_write_out(@loca0, 3); _write_s(3, @loca0);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca4, 4); _write_s(4, @loca4);
_write_out(@loca8, 4); _write_s(4, @loca8);
goto .Lbuild_binary_expression_end; goto .Lbuild_binary_expression_end;
@ -151,6 +151,15 @@ begin
end end
proc _compile_identifier_expression(loca84: Word, loca80: Byte) proc _compile_identifier_expression(loca84: Word, loca80: Byte)
var
loca0: Word
loca4: ^Byte
loca8: Word
loca12: Bool
loca16: Word
loca20: Word
loca24: ^Byte
loca28: Byte
begin begin
loca24 := _current(); loca24 := _current();
loca0 := 0x61636f6c; loca0 := 0x61636f6c;
@ -158,17 +167,17 @@ begin
if loca0 = 0 then if loca0 = 0 then
loca8 := 0x6120776c; loca8 := 0x6120776c;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x00202c00 or loca80; loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3); _write_s(3, @loca8);
loca4 := loca24 + 4; loca4 := loca24 + 4;
loca0 := loca84 - 4; loca0 := loca84 - 4;
_write_out(loca4, loca0); _write_s(loca0, loca4);
loca8 := 0x29707328; loca8 := 0x29707328;
_write_out(@loca8, 4); _write_s(4, @loca8);
_put_char(0x0a); _write_c(0x0a);
goto .Lcompile_identifier_expression_end goto .Lcompile_identifier_expression_end
end; end;
@ -177,32 +186,32 @@ begin
loca12 := loca0 = 0x73; loca12 := loca0 = 0x73;
if loca8 & loca12 then if loca8 & loca12 then
loca8 := 0x6120766d; loca8 := 0x6120766d;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x00202c00 or loca80; loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3); _write_s(3, @loca8);
_write_out(loca24, loca84); _write_s(loca84, loca24);
_put_char(0x0a); _write_c(0x0a);
goto .Lcompile_identifier_expression_end goto .Lcompile_identifier_expression_end
end; end;
loca8 := 0x6120616c; loca8 := 0x6120616c;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x00202c00 or loca80; loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3); _write_s(3, @loca8);
_write_out(loca24, loca84); _write_s(loca84, loca24);
_put_char(0x0a); _write_c(0x0a);
if _is_upper(loca0) then if _is_upper(loca0) then
loca8 := 0x6120776c; loca8 := 0x6120776c;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x28202c00 or loca28; loca8 := 0x28202c00 or loca28;
_write_out(@loca8, 4); _write_s(4, @loca8);
_put_char(0x61); _write_c(0x61);
_put_char(loca28); _write_c(loca28);
_put_char(0x29); _write_c(0x29);
_put_char(0x0a); _write_c(0x0a);
goto .Lcompile_identifier_expression_end goto .Lcompile_identifier_expression_end
end; end;
@ -210,14 +219,16 @@ begin
.Lcompile_identifier_expression_end .Lcompile_identifier_expression_end
end end
proc _build_expression() proc _build_expression(loca84: Word)
var var
loca0: Word loca0: Word
loca20: Word
loca28: Word
loca8: Word
loca24: ^Byte
loca4: ^Byte loca4: ^Byte
loca8: Word
loca12: Word
loca16: Word
loca20: Word
loca24: ^Byte
loca28: Word
begin begin
loca28 := loca84 + 0x30; loca28 := loca84 + 0x30;
@ -250,24 +261,24 @@ begin
_build_expression(0); _build_expression(0);
loca8 := 0x2067656e; loca8 := 0x2067656e;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x202c3061; loca8 := 0x202c3061;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x0a3061; loca8 := 0x0a3061;
_write_out(@loca8, 3); _write_s(3, @loca8);
goto .Lbuild_expression_advance; goto .Lbuild_expression_advance;
.Lbuild_expression_address; .Lbuild_expression_address;
loca8 := 0x69646461; loca8 := 0x69646461;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x6120; loca8 := 0x6120;
_write_out(@loca8, 2); _write_s(2, @loca8);
_put_char(loca28); _write_c(loca28);
loca8 := 0x7073202c; loca8 := 0x7073202c;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x202c; loca8 := 0x202c;
_write_out(@loca8, 2); _write_s(2, @loca8);
_advance(1); _advance(1);
_skip_spaces(); _skip_spaces();
@ -276,9 +287,9 @@ begin
loca4 := loca24 + 4; loca4 := loca24 + 4;
loca0 := loca20 - 4; loca0 := loca20 - 4;
_write_out(loca4, loca0); _write_s(loca0, loca4);
_put_char(0xa); _write_c(0xa);
goto .Lbuild_expression_advance; goto .Lbuild_expression_advance;
@ -291,12 +302,12 @@ begin
.Lbuild_expression_literal; .Lbuild_expression_literal;
loca8 := 0x6120696c; loca8 := 0x6120696c;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca8 := 0x00202c00 or loca28; loca8 := 0x00202c00 or loca28;
_write_out(@loca8, 3); _write_s(3, @loca8);
_write_out(loca24, loca20); _write_s(loca20, loca24);
_put_char(0x0a); _write_c(0x0a);
goto .Lbuild_expression_advance; goto .Lbuild_expression_advance;
@ -309,23 +320,27 @@ end
proc _compile_designator_expression(loca84: ^Byte, loca80: Word) proc _compile_designator_expression(loca84: ^Byte, loca80: Word)
var var
loca0: Word loca0: Word
loca4: Int
loca8: Char
loca12: Bool
loca16: Bool
begin begin
loca0 := 0x61636f6c; loca0 := 0x61636f6c;
loca4 := _memcmp(@loca0, loca84, 4); loca4 := _memcmp(@loca0, loca84, 4);
if loca4 = 0 then if loca4 = 0 then
loca0 := 0x61207773; loca0 := 0x61207773;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x202c30; loca0 := 0x202c30;
_write_out(@loca0, 3); _write_s(3, @loca0);
loca84 := loca84 + 4; loca84 := loca84 + 4;
loca80 := loca80 - 4; loca80 := loca80 - 4;
_write_out(loca84, loca80); _write_s(loca80, loca84);
loca0 := 0x29707328; loca0 := 0x29707328;
_write_out(@loca0, 4); _write_s(4, @loca0);
_put_char(0x0a); _write_c(0x0a);
goto .Lcompile_designator_expression_end goto .Lcompile_designator_expression_end
end; end;
@ -334,11 +349,11 @@ begin
loca16 := loca80 = 2; loca16 := loca80 = 2;
if loca12 & loca16 then if loca12 & loca16 then
loca0 := 0x20766d; loca0 := 0x20766d;
_write_out(@loca0, 3); _write_s(3, @loca0);
_write_out(loca84, loca80); _write_s(loca80, loca84);
loca0 := 0x3061202c; loca0 := 0x3061202c;
_write_out(@loca0, 4); _write_s(4, @loca0);
_put_char(0x0a); _write_c(0x0a);
goto .Lcompile_designator_expression_end goto .Lcompile_designator_expression_end
end; end;
@ -349,11 +364,11 @@ end
proc _compile_identifier() proc _compile_identifier()
var var
loca0: Word loca0: Word
loca16: Word
loca8: Word
loca20: ^Byte
loca12: ^Byte
loca4: Bool loca4: Bool
loca8: Word
loca12: ^Byte
loca16: Word
loca20: ^Byte
begin begin
loca20 := _current(); loca20 := _current();
loca16 := _read_token(); loca16 := _read_token();
@ -388,8 +403,8 @@ proc _compile_call(loca84: ^Byte, loca80: Word)
var var
loca0: Word loca0: Word
loca4: Word loca4: Word
loca12: Word
loca8: ^Byte loca8: ^Byte
loca12: Word
begin begin
loca12 := 0; loca12 := 0;
@ -404,17 +419,17 @@ begin
_build_expression(0); _build_expression(0);
loca0 := 0x61207773; loca0 := 0x61207773;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x202c30; loca0 := 0x202c30;
_write_out(@loca0, 3); _write_s(3, @loca0);
loca0 := -4 * loca12; loca0 := -4 * loca12;
loca0 := loca0 + 60; loca0 := loca0 + 60;
_printi(loca0); _write_i(loca0);
loca0 := 0x29707328; loca0 := 0x29707328;
_write_out(@loca0, 4); _write_s(4, @loca0);
_put_char(0x0a); _write_c(0x0a);
_skip_spaces(); _skip_spaces();
loca8 := _current(); loca8 := _current();
@ -434,60 +449,60 @@ begin
.Lcompile_call_restore; .Lcompile_call_restore;
loca0 := 0x6120776c; loca0 := 0x6120776c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x36202c30; loca4 := 0x36202c30;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x70732830; loca4 := 0x70732830;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x0a29; loca4 := 0x0a29;
_write_out(@loca4, 2); _write_s(2, @loca4);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x35202c31; loca4 := 0x35202c31;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x70732836; loca4 := 0x70732836;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x0a29; loca4 := 0x0a29;
_write_out(@loca4, 2); _write_s(2, @loca4);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x35202c32; loca4 := 0x35202c32;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x70732832; loca4 := 0x70732832;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x0a29; loca4 := 0x0a29;
_write_out(@loca4, 2); _write_s(2, @loca4);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x34202c33; loca4 := 0x34202c33;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x70732838; loca4 := 0x70732838;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x0a29; loca4 := 0x0a29;
_write_out(@loca4, 2); _write_s(2, @loca4);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x34202c34; loca4 := 0x34202c34;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x70732834; loca4 := 0x70732834;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x0a29; loca4 := 0x0a29;
_write_out(@loca4, 2); _write_s(2, @loca4);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x34202c35; loca4 := 0x34202c35;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x70732830; loca4 := 0x70732830;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca4 := 0x0a29; loca4 := 0x0a29;
_write_out(@loca4, 2); _write_s(2, @loca4);
loca0 := 0x6c6c6163; loca0 := 0x6c6c6163;
_write_out(@loca0, 4); _write_s(4, @loca0);
_put_char(0x20); _write_c(0x20);
_write_out(loca84, loca80); _write_s(loca80, loca84);
_put_char(0x0a); _write_c(0x0a);
_skip_spaces(); _skip_spaces();
_advance(1) _advance(1)
@ -623,10 +638,10 @@ var loca0: ^Byte
begin begin
loca0 := _current(); loca0 := _current();
_write_out(loca0, loca84); _write_s(loca84, loca0);
_advance(loca84); _advance(loca84);
_put_char(0xa); _write_c(0xa);
_advance(1) _advance(1)
end end
@ -635,13 +650,13 @@ proc _compile_program()
var loca0: Word var loca0: Word
begin begin
loca0 := 0x6f6c672e; loca0 := 0x6f6c672e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x206c6162; loca0 := 0x206c6162;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6174735f; loca0 := 0x6174735f;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a7472; loca0 := 0x0a7472;
_write_out(@loca0, 3); _write_s(3, @loca0);
_advance(8) _advance(8)
end end
@ -652,15 +667,15 @@ var
loca4: ^Byte loca4: ^Byte
begin begin
loca0 := 0x6365732e; loca0 := 0x6365732e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6e6f6974; loca0 := 0x6e6f6974;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6f722e20; loca0 := 0x6f722e20;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x61746164; loca0 := 0x61746164;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a; loca0 := 0x0a;
_write_out(@loca0, 1); _write_s(1, @loca0);
_advance(6); _advance(6);
@ -685,25 +700,25 @@ begin
loca4 := _read_token(); loca4 := _read_token();
loca8 := _current(); loca8 := _current();
_write_out(loca8, loca4); _write_s(loca4, loca8);
_advance(loca4); _advance(loca4);
_skip_spaces(); _skip_spaces();
_advance(2); _advance(2);
loca0 := 0x6c2e203a; loca0 := 0x6c2e203a;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x20676e6f; loca0 := 0x20676e6f;
_write_out(@loca0, 4); _write_s(4, @loca0);
_skip_spaces(); _skip_spaces();
loca4 := _read_token(); loca4 := _read_token();
loca8 := _current(); loca8 := _current();
_write_out(loca8, loca4); _write_s(loca4, loca8);
_advance(loca4); _advance(loca4);
_put_char(0x0a) _write_c(0x0a)
end end
proc _compile_variable_section() proc _compile_variable_section()
@ -712,13 +727,13 @@ var
loca4: ^Byte loca4: ^Byte
begin begin
loca0 := 0x6365732e; loca0 := 0x6365732e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6e6f6974; loca0 := 0x6e6f6974;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x73622e20; loca0 := 0x73622e20;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a73; loca0 := 0x0a73;
_write_out(@loca0, 2); _write_s(2, @loca0);
_advance(4); _advance(4);
@ -740,11 +755,14 @@ end
proc _compile_variable() proc _compile_variable()
var var
loca28: ^Byte
loca16: ^Byte
loca0: Word loca0: Word
loca24: Word loca4: Word
loca8: Word
loca12: Word
loca16: ^Byte
loca20: Word loca20: Word
loca24: Word
loca28: ^Byte
begin begin
loca24 := _read_token(); loca24 := _read_token();
loca28 := _current(); loca28 := _current();
@ -769,42 +787,42 @@ begin
_advance(loca0); _advance(loca0);
loca0 := 0x7079742e; loca0 := 0x7079742e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2065; loca0 := 0x2065;
_write_out(@loca0, 2); _write_s(2, @loca0);
_write_out(loca28, loca24); _write_s(loca24, loca28);
loca0 := 0x6f40202c; loca0 := 0x6f40202c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x63656a62; loca0 := 0x63656a62;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a74; loca0 := 0x0a74;
_write_out(@loca0, 2); _write_s(2, @loca0);
loca0 := 0x7a69732e; loca0 := 0x7a69732e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2065; loca0 := 0x2065;
_write_out(@loca0, 2); _write_s(2, @loca0);
_write_out(loca28, loca24); _write_s(loca24, loca28);
loca0 := 0x202c; loca0 := 0x202c;
_write_out(@loca0, 2); _write_s(2, @loca0);
_write_out(loca20, loca16); _write_s(loca16, loca20);
_put_char(0x0a); _write_c(0x0a);
_write_out(loca28, loca24); _write_s(loca24, loca28);
loca0 := 0x7a2e203a; loca0 := 0x7a2e203a;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x206f7265; loca0 := 0x206f7265;
_write_out(@loca0, 4); _write_s(4, @loca0);
_write_out(loca20, loca16); _write_s(loca16, loca20);
_put_char(0x0a) _write_c(0x0a)
end end
proc _compile_procedure() proc _compile_procedure()
@ -823,23 +841,23 @@ begin
_advance(loca16); _advance(loca16);
loca0 := 0x7079742e; loca0 := 0x7079742e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2065; loca0 := 0x2065;
_write_out(@loca0, 2); _write_s(2, @loca0);
_write_out(loca20, loca16); _write_s(loca16, loca20);
loca0 := 0x6640202c; loca0 := 0x6640202c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x74636e75; loca0 := 0x74636e75;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a6e6f69; loca0 := 0x0a6e6f69;
_write_out(@loca0, 4); _write_s(4, @loca0);
_write_out(loca20, loca16); _write_s(loca16, loca20);
loca0 := 0x0a3a; loca0 := 0x0a3a;
_write_out(@loca0, 2); _write_s(2, @loca0);
_skip_spaces(); _skip_spaces();
_advance(1); _advance(1);
@ -862,85 +880,85 @@ begin
end; end;
loca0 := 0x69646461; loca0 := 0x69646461;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2c707320; loca0 := 0x2c707320;
_write_out(@loca0, 4); _write_s(4, @loca0);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a36392d; loca0 := 0x0a36392d;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x72207773; loca0 := 0x72207773;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x39202c61; loca0 := 0x39202c61;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x70732832; loca0 := 0x70732832;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a29; loca0 := 0x0a29;
_write_out(@loca0, 2); _write_s(2, @loca0);
loca0 := 0x73207773; loca0 := 0x73207773;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x38202c30; loca0 := 0x38202c30;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x70732838; loca0 := 0x70732838;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a29; loca0 := 0x0a29;
_write_out(@loca0, 2); _write_s(2, @loca0);
loca0 := 0x69646461; loca0 := 0x69646461;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2c307320; loca0 := 0x2c307320;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2c707320; loca0 := 0x2c707320;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a363920; loca0 := 0x0a363920;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x61207773; loca0 := 0x61207773;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x38202c30; loca4 := 0x38202c30;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca8 := 0x70732834; loca8 := 0x70732834;
_write_out(@loca8, 4); _write_s(4, @loca8);
loca12 := 0x0a29; loca12 := 0x0a29;
_write_out(@loca12, 2); _write_s(2, @loca12);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x38202c31; loca4 := 0x38202c31;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca8 := 0x70732830; loca8 := 0x70732830;
_write_out(@loca8, 4); _write_s(4, @loca8);
_write_out(@loca12, 2); _write_s(2, @loca12);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x37202c32; loca4 := 0x37202c32;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca8 := 0x70732836; loca8 := 0x70732836;
_write_out(@loca8, 4); _write_s(4, @loca8);
_write_out(@loca12, 2); _write_s(2, @loca12);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x37202c33; loca4 := 0x37202c33;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca8 := 0x70732832; loca8 := 0x70732832;
_write_out(@loca8, 4); _write_s(4, @loca8);
_write_out(@loca12, 2); _write_s(2, @loca12);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x36202c34; loca4 := 0x36202c34;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca8 := 0x70732838; loca8 := 0x70732838;
_write_out(@loca8, 4); _write_s(4, @loca8);
_write_out(@loca12, 2); _write_s(2, @loca12);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca4 := 0x36202c35; loca4 := 0x36202c35;
_write_out(@loca4, 4); _write_s(4, @loca4);
loca8 := 0x70732838; loca8 := 0x70732838;
_write_out(@loca8, 4); _write_s(4, @loca8);
_write_out(@loca12, 2); _write_s(2, @loca12);
.Lcompile_procedure_body; .Lcompile_procedure_body;
_skip_spaces(); _skip_spaces();
@ -960,43 +978,43 @@ begin
_advance(4); _advance(4);
loca0 := 0x7220776c; loca0 := 0x7220776c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x39202c61; loca0 := 0x39202c61;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x70732832; loca0 := 0x70732832;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a29; loca0 := 0x0a29;
_write_out(@loca0, 2); _write_s(2, @loca0);
loca0 := 0x7320776c; loca0 := 0x7320776c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x38202c30; loca0 := 0x38202c30;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x70732838; loca0 := 0x70732838;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a29; loca0 := 0x0a29;
_write_out(@loca0, 2); _write_s(2, @loca0);
loca0 := 0x69646461; loca0 := 0x69646461;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x2c707320; loca0 := 0x2c707320;
_write_out(@loca0, 4); _write_s(4, @loca0);
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a3639; loca0 := 0x0a3639;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a746572; loca0 := 0x0a746572;
_write_out(@loca0, 4) _write_s(4, @loca0)
end end
proc _token_compare(loca84: ^Byte, loca80: Word, loca76: ^Byte) proc _token_compare(loca84: ^Byte, loca80: Word, loca76: ^Byte)
var var
loca0: Bool loca0: Bool
loca4: Byte loca4: Byte
loca12: Byte
loca8: Word loca8: Word
loca12: Byte
begin begin
.Ltoken_compare_loop; .Ltoken_compare_loop;
loca4 := _front(loca76); loca4 := _front(loca76);
@ -1038,12 +1056,13 @@ end
proc _compile_goto() proc _compile_goto()
var var
loca0: Word loca0: Word
loca4: Word
loca8: ^Byte loca8: ^Byte
begin begin
_advance(4); _advance(4);
loca0 := 0x206a; loca0 := 0x206a;
_write_out(@loca0, 2); _write_s(2, @loca0);
_skip_spaces(); _skip_spaces();
loca8 := _current(); loca8 := _current();
@ -1052,15 +1071,16 @@ begin
loca0 := _read_token(); loca0 := _read_token();
_advance(loca0); _advance(loca0);
loca0 := loca0 + 1; loca0 := loca0 + 1;
_write_out(loca8, loca0); _write_s(loca0, loca8);
_advance(1); _advance(1);
_put_char(0x0a) _write_c(0x0a)
end end
proc _compile_label(loca84: Word) proc _compile_label(loca84: Word)
var var
loca0: Word loca0: Word
loca4: Word
begin begin
loca0 := _current(); loca0 := _current();
@ -1072,10 +1092,10 @@ begin
if loca0 = 0x3b then if loca0 = 0x3b then
loca4 := loca4 - 1 loca4 := loca4 - 1
end; end;
_write_out(s1, loca4); _write_s(loca4, s1);
_put_char(0x3a); _write_c(0x3a);
_put_char(0x0a); _write_c(0x0a);
_advance(loca84) _advance(loca84)
end end
@ -1089,11 +1109,12 @@ end
proc _compile_if() proc _compile_if()
var var
loca0: Word
loca4: ^Byte
loca8: Word loca8: Word
loca12: Word loca12: Word
loca16: Word loca16: Word
loca20: Word loca20: Word
loca4: ^Byte
begin begin
_advance(2); _advance(2);
_skip_spaces(); _skip_spaces();
@ -1107,15 +1128,15 @@ begin
loca16 := 0x66694c2e; loca16 := 0x66694c2e;
loca12 := 0x7a716562; loca12 := 0x7a716562;
_write_out(@loca12, 4); _write_s(4, @loca12);
loca12 := 0x2c306120; loca12 := 0x2c306120;
_write_out(@loca12, 4); _write_s(4, @loca12);
_put_char(0x20); _write_c(0x20);
_write_out(@loca16, 4); _write_s(4, @loca16);
_printi(s2); _write_i(s2);
_put_char(0x0a); _write_c(0x0a);
.Lcompile_if_loop; .Lcompile_if_loop;
_skip_spaces(); _skip_spaces();
@ -1131,11 +1152,11 @@ begin
goto .Lcompile_if_loop goto .Lcompile_if_loop
end; end;
_write_out(@loca16, 4); _write_s(4, @loca16);
_printi(s2); _write_i(s2);
loca12 := 0x0a3a0a3a; loca12 := 0x0a3a0a3a;
_write_out(@loca12, 2); _write_s(2, @loca12);
s2 := s2 + 1; s2 := s2 + 1;
_advance(4) _advance(4)
@ -1316,34 +1337,34 @@ proc _compile_text_section()
var loca0: Word var loca0: Word
begin begin
loca0 := 0x6365732e; loca0 := 0x6365732e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6e6f6974; loca0 := 0x6e6f6974;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x65742e20; loca0 := 0x65742e20;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a7478; loca0 := 0x0a7478;
_write_out(@loca0, 3) _write_s(3, @loca0)
end end
proc _compile_entry_point() proc _compile_entry_point()
var loca0: Word var loca0: Word
begin begin
loca0 := 0x7079742e; loca0 := 0x7079742e;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x735f2065; loca0 := 0x735f2065;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x74726174; loca0 := 0x74726174;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6640202c; loca0 := 0x6640202c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x74636e75; loca0 := 0x74636e75;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a6e6f69; loca0 := 0x0a6e6f69;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6174735f; loca0 := 0x6174735f;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a3a7472; loca0 := 0x0a3a7472;
_write_out(@loca0, 4); _write_s(4, @loca0);
_advance(6) _advance(6)
end end
@ -1352,19 +1373,19 @@ proc _compile_exit()
var loca0: Word var loca0: Word
begin begin
loca0 := 0x6120696c; loca0 := 0x6120696c;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x30202c30; loca0 := 0x30202c30;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x20696c0a; loca0 := 0x20696c0a;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x202c3761; loca0 := 0x202c3761;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x650a3339; loca0 := 0x650a3339;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x6c6c6163; loca0 := 0x6c6c6163;
_write_out(@loca0, 4); _write_s(4, @loca0);
loca0 := 0x0a; loca0 := 0x0a;
_write_out(@loca0, 1); _write_s(1, @loca0);
_advance(4); _advance(4);
_skip_spaces() _skip_spaces()

View File

@ -1,14 +1,11 @@
program program
proc _main(x: Word) proc _main(x: Word, y: Word)
var loca0: Word
loca4: Word
begin begin
loca0 := 0x0a2c3061; _write_s(@x, 4);
loca4 := x; _write_s(@y, 4)
_write_out(@loca4, 4)
end end
begin begin
_main() _main(0x0a2c3061, 0x0a2c3062)
end. end.