| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- MODULE PL0;
- FROM InOut IMPORT Read, ReadString,
- Write, WriteString, WriteLn,
- OpenInput, CloseInput,
- Done;
- FROM SyntaxAnalysis IMPORT parse, SyntaxError;
- FROM Synthesis IMPORT traverse, SemanticError;
- FROM Generator IMPORT CodeStore;
- FROM Interpreter IMPORT Interpret;
- FROM InternalTree IMPORT blckPtr;
- IMPORT STextIO,FIO;
- FROM Strings IMPORT Length;
- VAR
- InputFileName : ARRAY[0..40] OF CHAR;
- TREE : blckPtr;
- c : CHAR;
- DEBUG : BOOLEAN;
- jamais : CARDINAL;
- PROCEDURE ReadLn(VAR c: CHAR);
- VAR lc : CHAR;
- BEGIN
- REPEAT
- Read(c)
- UNTIL c > ' ';
- REPEAT
- Read(lc)
- UNTIL (lc = 12C) OR (lc = 15C)
- END ReadLn;
- PROCEDURE ApendExtension;
- VAR i : CARDINAL;
- BEGIN
- i := 0;
- LOOP
- IF InputFileName[i] = 0C THEN
- InputFileName[i] := '.';
- INC(i);
- InputFileName[i] := 'p';
- INC(i);
- InputFileName[i] := 'l';
- INC(i);
- InputFileName[i] := '0';
- INC(i);
- InputFileName[i] := 0C;
- EXIT
- END;
- IF (InputFileName[i] = '.') OR (i = 40) THEN EXIT END;
- INC(i)
- END
- END ApendExtension;
- BEGIN
- DEBUG := TRUE;
- STextIO.WriteString("PL0 Compiler/Interpreter");
- WriteLn;
- STextIO.WriteString("First implementation by : ");
- WriteLn;
- STextIO.WriteString("First Working Version : Eric Streit <eric@yojik.eu> 18/05/2026");
- WriteLn;
- LOOP
- InputFileName := "";
- Done := FALSE;
- STextIO.WriteLn;
- STextIO.WriteString("Entrez le nom de fichier PL0 > ");
- OpenInput("pl0");
- IF DEBUG THEN
- STextIO.WriteString("***");
- IF Done THEN
- WriteString("TRUE");
- END;
- STextIO.WriteString("***");
- STextIO.WriteLn;
- END;
- IF Done THEN
- STextIO.WriteLn;
- STextIO.WriteString("Syntactic Analyser");
- STextIO.WriteLn;
- TREE := parse();
- CloseInput; (* read again from standard input *)
- IF NOT SyntaxError THEN
- STextIO.WriteLn;
- STextIO.WriteString("Semantic Analysis und Code Generation");
- STextIO.WriteLn;
- traverse(TREE);
- IF NOT SemanticError THEN
- REPEAT
- STextIO.WriteLn;
- STextIO.WriteString("Programm translation and run (y/n) ?");
- STextIO.ReadChar(c);
- IF c = "y" THEN
- STextIO.WriteLn;
- Interpret(CodeStore)
- ELSE
- HALT
- END
- UNTIL c = 'n'
- END
- END
- ELSE
- Write("'");
- WriteString(InputFileName); WriteString("' not found");
- WriteLn
- END;
- END; (* loop *)
-
- END PL0.
|