diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-23 11:04:14 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-23 11:04:14 +0200 |
commit | 21f6eb821811cd3c93cb6604da236a44d47e0749 (patch) | |
tree | 628ded96540f93b669240f89df6c495c9b8f276e /crenshaw | |
parent | 8b33ba7fab06c77fcf3fd438439c885dc30a5a3d (diff) | |
download | compilertests-21f6eb821811cd3c93cb6604da236a44d47e0749.tar.gz compilertests-21f6eb821811cd3c93cb6604da236a44d47e0749.tar.bz2 |
crenshaw: "END" and blocks with assignments
Diffstat (limited to 'crenshaw')
-rw-r--r-- | crenshaw/main.pas | 33 | ||||
-rw-r--r-- | crenshaw/test.prog | 3 |
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 + |