private PascalProgram ParseProgram() { var c = Current; string name = ""; if (c.SubType == Tokenizer.TokenSubType.Program) { Next(); var n = Current; Require(Identifier); name = n.Value.ToString(); Require(Semicolon); } SymTable st = new SymTable { { TypeSymbol.IntTypeSymbol.Name, TypeSymbol.IntTypeSymbol }, { TypeSymbol.RealTypeSymbol.Name, TypeSymbol.RealTypeSymbol }, { TypeSymbol.CharTypeSymbol.Name, TypeSymbol.CharTypeSymbol } }; if (st.LookUp(name) != null) { throw new ParserException("Illegal program name", c.Line, c.Position); } ProgramSymbol pn; if (name != "") { pn = new ProgramSymbol { Name = name }; st.Add(name, pn); } else { pn = new ProgramSymbol { Name = "" }; } var b = ParseBlock(st); Require(Dot); return(new PascalProgram { Block = b, Name = pn }); }
public static Symbol ParserFormula(List <DecafToken> tokens) { var symbols = tokens.Select(x => new TerminalSymbol(x)); if (symbols.Any()) { Console.WriteLine("Terminal Symbols"); Console.WriteLine("================"); foreach (var terminal in symbols) { Console.WriteLine("{0} ({1})", terminal.TokenType, terminal.LineInfo); } Console.WriteLine(); } ProgramSymbol programSymbol = new ProgramSymbol(symbols); return(programSymbol); }