|
@@ -6,9 +6,9 @@ MODULE -->Grammar;
|
|
|
are assumed to have been constructed with COCO/R compiler generator. *)
|
|
are assumed to have been constructed with COCO/R compiler generator. *)
|
|
|
|
|
|
|
|
FROM -->Scanner IMPORT lst, src, errors, Error, CharAt;
|
|
FROM -->Scanner IMPORT lst, src, errors, Error, CharAt;
|
|
|
- FROM -->Parser IMPORT Parse, Successful, SetLower;
|
|
|
|
|
|
|
+ FROM -->Parser IMPORT Parse, Successful, SetLower, GetUnit;
|
|
|
IMPORT
|
|
IMPORT
|
|
|
- Strings, Storage, SYSTEM, FileIO, SymTab, QbeGen;
|
|
|
|
|
|
|
+ Strings, Storage, SYSTEM, FileIO, SymTab, QbeGen, AST, Lower;
|
|
|
(* and any others needed *)
|
|
(* and any others needed *)
|
|
|
|
|
|
|
|
TYPE
|
|
TYPE
|
|
@@ -288,6 +288,8 @@ MODULE -->Grammar;
|
|
|
f: CARDINAL;
|
|
f: CARDINAL;
|
|
|
bad: BOOLEAN;
|
|
bad: BOOLEAN;
|
|
|
lowerAst: BOOLEAN;
|
|
lowerAst: BOOLEAN;
|
|
|
|
|
+ units: ARRAY [0 .. 31] OF AST.Node;
|
|
|
|
|
+ nUnits: CARDINAL;
|
|
|
|
|
|
|
|
BEGIN
|
|
BEGIN
|
|
|
(* collect the session's source files (program module last) *)
|
|
(* collect the session's source files (program module last) *)
|
|
@@ -315,7 +317,7 @@ MODULE -->Grammar;
|
|
|
Error := StoreError;
|
|
Error := StoreError;
|
|
|
|
|
|
|
|
(* parse each unit into the shared session *)
|
|
(* parse each unit into the shared session *)
|
|
|
- bad := FALSE; f := 0;
|
|
|
|
|
|
|
+ bad := FALSE; f := 0; nUnits := 0;
|
|
|
WHILE f < nFiles DO
|
|
WHILE f < nFiles DO
|
|
|
Strings.Assign(files[f], sourceName);
|
|
Strings.Assign(files[f], sourceName);
|
|
|
FileIO.Open(src, sourceName, FALSE);
|
|
FileIO.Open(src, sourceName, FALSE);
|
|
@@ -332,6 +334,9 @@ MODULE -->Grammar;
|
|
|
FileIO.WriteString(FileIO.StdOut, "Parsing");
|
|
FileIO.WriteString(FileIO.StdOut, "Parsing");
|
|
|
FileIO.WriteLn(FileIO.StdOut);
|
|
FileIO.WriteLn(FileIO.StdOut);
|
|
|
Parse;
|
|
Parse;
|
|
|
|
|
+ IF lowerAst AND (nUnits <= HIGH(units)) THEN
|
|
|
|
|
+ units[nUnits] := GetUnit(); INC(nUnits)
|
|
|
|
|
+ END;
|
|
|
PrintListing;
|
|
PrintListing;
|
|
|
IF lst # FileIO.StdOut THEN FileIO.Close(lst) END;
|
|
IF lst # FileIO.StdOut THEN FileIO.Close(lst) END;
|
|
|
IF NOT Successful() THEN
|
|
IF NOT Successful() THEN
|
|
@@ -347,6 +352,10 @@ MODULE -->Grammar;
|
|
|
INC(f)
|
|
INC(f)
|
|
|
END;
|
|
END;
|
|
|
|
|
|
|
|
|
|
+ IF lowerAst AND (nUnits > 0) THEN
|
|
|
|
|
+ Lower.LowerSession(units, nUnits, progName)
|
|
|
|
|
+ END;
|
|
|
|
|
+
|
|
|
IF bad OR NOT SymTab.HaveProgram()
|
|
IF bad OR NOT SymTab.HaveProgram()
|
|
|
THEN FileIO.WriteString(FileIO.StdOut, "Incorrect source")
|
|
THEN FileIO.WriteString(FileIO.StdOut, "Incorrect source")
|
|
|
ELSE FileIO.WriteString(FileIO.StdOut, "Parsed correctly")
|
|
ELSE FileIO.WriteString(FileIO.StdOut, "Parsed correctly")
|