diff options
Diffstat (limited to 'crenshaw/main.pas')
-rw-r--r-- | crenshaw/main.pas | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/crenshaw/main.pas b/crenshaw/main.pas index 339484c..0694ad4 100644 --- a/crenshaw/main.pas +++ b/crenshaw/main.pas @@ -2,7 +2,7 @@ program Main; const TAB = ^I; - CR = ^M; + LF = ^J; var Look : char; @@ -101,7 +101,7 @@ begin if symbols[i].name = name then found := true; end; - if i = 26 then Abort('Table of variable symbols overflowed'); + if i = 26 then Abort('Table of symbols overflowed'); if not found then begin symbols[nof_symbols].name := name; symbols[nof_symbols].sym_type := sym_type; @@ -117,10 +117,10 @@ begin Match('('); Match(')'); RememberName(name, functionType); - EmitLn('call ' + name); + EmitLn('call '+name); end else begin RememberName(name, variableType); - EmitLn('mov eax, [' + name + ']'); + EmitLn('mov eax,['+name+']'); end; end; @@ -201,6 +201,17 @@ begin end; end; +procedure Assignment; +var name : char; +begin + name := GetName; + RememberName(name, variableType); + Match('='); + Expression; + EmitLn('lea ebx,['+name+']'); + EmitLn('mov [ebx],eax'); +end; + procedure Init; begin nof_symbols := 0; @@ -256,6 +267,9 @@ end; begin Prologue; Init; - Expression; + Assignment; + Match(LF); + Assignment; + if Look <> LF then Expected('Newline'); Epilogue; end. |