public string VisitProgram(PascalProgramNode program)
        {
            var zero = new ScopedSymbolTable(program.ProgramName);

            PascalSemanticAnalyzer.DefineBuiltIns(zero);
            CurrentScope = zero;
            var programStr = VisitProgramBlockNode(program);

            return(programStr);
        }
示例#2
0
        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);
        }
示例#5
0
 public AddressNode VisitProgram(PascalProgramNode program)
 {
     throw new System.NotImplementedException();
 }