|
|
@@ -373,26 +373,41 @@ PRODUCTIONS
|
|
|
scope at END. *)
|
|
|
NestedModule (. VAR m1, m2: SymTab.Name;
|
|
|
expNames: ARRAY [0 .. 63] OF SymTab.Name;
|
|
|
- expCount, k: CARDINAL; .)
|
|
|
+ expCount, k: CARDINAL;
|
|
|
+ astNode, nImp, nImpTail:
|
|
|
+ AST.Node; .)
|
|
|
= "MODULE"
|
|
|
GetIdent<m1> (. IF NOT SymTab.Enter(m1,
|
|
|
SymTab.KindModule) THEN
|
|
|
SemError(200) END;
|
|
|
SymTab.PushScope;
|
|
|
- expCount := 0; .)
|
|
|
+ expCount := 0;
|
|
|
+ astNode := AST.MakeNode(AST.NkUnit);
|
|
|
+ AST.SetChild(astNode, 0,
|
|
|
+ AST.MakeLeaf(AST.NkIdent, m1));
|
|
|
+ astStmt := AST.NoNode;
|
|
|
+ astDecl := AST.NoNode;
|
|
|
+ nImp := AST.NoNode;
|
|
|
+ nImpTail := AST.NoNode; .)
|
|
|
[ Priority ]
|
|
|
";"
|
|
|
- { Import }
|
|
|
+ { Import (. AstAppend(AST.NkDeclSeq,
|
|
|
+ nImp, nImpTail, astDecl); .) }
|
|
|
[ "EXPORT" [ "QUALIFIED" ]
|
|
|
GetIdent<expNames[expCount]> (. INC(expCount); .)
|
|
|
{ "," GetIdent<expNames[expCount]>
|
|
|
(. INC(expCount); .) }
|
|
|
";" ]
|
|
|
DeclSeq
|
|
|
- [ "BEGIN" (. QbeGen.BeginInit(m1); .)
|
|
|
+ [ "BEGIN" (. astStmt := AST.NoNode;
|
|
|
+ QbeGen.BeginInit(m1); .)
|
|
|
[ StatSeq ] (. QbeGen.EndInit; .) ]
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF NOT SymTab.Equal(m1, m2) THEN
|
|
|
+ GetIdent<m2> (. AST.SetChild(astNode, 1, astDecl);
|
|
|
+ AST.SetChild(astNode, 2, astStmt);
|
|
|
+ AST.SetChild(astNode, 3, nImp);
|
|
|
+ astDecl := astNode;
|
|
|
+ IF NOT SymTab.Equal(m1, m2) THEN
|
|
|
SemError(202) END;
|
|
|
k := 0;
|
|
|
WHILE k < expCount DO
|