summaryrefslogtreecommitdiff
path: root/crenshaw/main.pas
diff options
context:
space:
mode:
Diffstat (limited to 'crenshaw/main.pas')
-rw-r--r--crenshaw/main.pas24
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.