public string VisitProgram(PascalProgramNode program) { var zero = new ScopedSymbolTable(program.ProgramName); PascalSemanticAnalyzer.DefineBuiltIns(zero); CurrentScope = zero; var programStr = VisitProgramBlockNode(program); return(programStr); }
Node Program() { Eat(PascalTerms.Program); var name = _tokens?.Current; Eat(PascalTerms.Id); Eat(PascalTerms.Semi); var node = Block(); Eat(PascalTerms.Dot); var programNode = new PascalProgramNode(name, node); return(programNode); }
public AnnotatedNode VisitProgram(PascalProgramNode programNode) { var levelZero = CreateCurrentScope(programNode.ProgramName); var global = new ScopedSymbolTable("Global", levelZero, _logger); CurrentScope = global; programNode.Block.Annotations.Add("Main", null); VisitBlock(programNode.Block); CurrentScope = global; programNode.Block.Annotations.Add("SymbolTable", global); return(new AnnotatedNode(programNode)); }
private string VisitProgramBlockNode(PascalProgramNode program) { var programStr = $"program {program.ProgramName}{CurrentScope.ScopeLevel};\r\n"; var global = new ScopedSymbolTable("Global", CurrentScope); CurrentScope = global; foreach (var blockDeclaration in program.Block.Declarations) { programStr += VisitNode(blockDeclaration); } programStr += $"{AddSpaces(-3)}begin\r\n"; foreach (var compoundStatementNode in program.Block.CompoundStatement.Nodes) { programStr += VisitNode(compoundStatementNode); } CurrentScope = CurrentScope.ParentScope; programStr += AddSpaces(-3) + "end. {END OF " + CurrentScope.ScopeName + "}\r\n"; return(programStr); }
public AddressNode VisitProgram(PascalProgramNode program) { throw new System.NotImplementedException(); }