summaryrefslogtreecommitdiff
path: root/crenshaw
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2018-08-23 11:04:14 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2018-08-23 11:04:14 +0200
commit21f6eb821811cd3c93cb6604da236a44d47e0749 (patch)
tree628ded96540f93b669240f89df6c495c9b8f276e /crenshaw
parent8b33ba7fab06c77fcf3fd438439c885dc30a5a3d (diff)
downloadcompilertests-21f6eb821811cd3c93cb6604da236a44d47e0749.tar.gz
compilertests-21f6eb821811cd3c93cb6604da236a44d47e0749.tar.bz2
crenshaw: "END" and blocks with assignments
Diffstat (limited to 'crenshaw')
-rw-r--r--crenshaw/main.pas33
-rw-r--r--crenshaw/test.prog3
2 files changed, 34 insertions, 2 deletions
diff --git a/crenshaw/main.pas b/crenshaw/main.pas
index 172bdc7..1db3faf 100644
--- a/crenshaw/main.pas
+++ b/crenshaw/main.pas
@@ -108,10 +108,15 @@ begin
end;
procedure EmitLabel(s : string);
-begin;
+begin
WriteLn(s+':');
end;
+procedure EmitComment(s : string);
+begin
+ WriteLn('; '+s);
+end;
+
procedure Expression; Forward;
type
@@ -305,12 +310,38 @@ begin
GetChar;
end;
+procedure Other;
+begin
+ while not(Look in ['e']) do begin
+ Assignment;
+ Newline;
+ { EmitComment('Other: '+GetName);}
+ end;
+end;
+
+procedure Block;
+begin;
+ while not(Look in ['e']) do begin
+ Other;
+ end;
+end;
+
+procedure DoProgram;
+begin
+ Block;
+ if Look <> 'e' then Expected('END');
+ EmitComment('END');
+end;
+
begin
Prologue;
Init;
+ DoProgram;
+{ Other;
repeat
Assignment;
NewLine;
until Look = '.';
+}
Epilogue;
end.
diff --git a/crenshaw/test.prog b/crenshaw/test.prog
index 84f044a..2d501ed 100644
--- a/crenshaw/test.prog
+++ b/crenshaw/test.prog
@@ -1,4 +1,5 @@
a = 1
b = 2
x = ( 4 + 4 + 12 ) * 3 / 2 - 3 + a - b * func1( )
-.
+e
+