public void Compile(string file_path) { Source source = new Source(file_path); var scanner = new PascalScanner(source); ErrorReporter.m_Scanner = scanner; var parser = new PascalParser(scanner); parser.Parse(); //SymbolTablePrinter.Print(); if (ErrorReporter.m_Errors.Count != 0) { Console.WriteLine("\n errors: "); for (int i = 0; i < ErrorReporter.m_Errors.Count; ++i) { var error = ErrorReporter.m_Errors[i]; Console.WriteLine($"{i}: {error.Item1} in line {error.Item2}"); } } else { Console.WriteLine("\ncompile succeed without errors.\n"); for (int i = 0; i < CodeGenerator.m_Code.Count; ++i) { var code = CodeGenerator.m_Code[i]; Console.WriteLine($"{i,-5}{code.Item1,-5}{code.Item2,-5}{code.Item3,-5}"); } } }
/// <summary> /// Constructor for subclass. /// </summary> /// <param name="parent">The parent.</param> public PascalParser(PascalParser parent) : base(parent.m_Scanner) { m_SymbolTableStack = parent.m_SymbolTableStack; }
public WriteParser(PascalParser parent) : base(parent) { }
public ProcedureDeclarationParser(PascalParser parent) : base(parent) { }
public IfStatementParser(PascalParser parent) : base(parent) { }
public VariableDeclarationParser(PascalParser parent) : base(parent) { }
public ConstDeclarationParser(PascalParser parent) : base(parent) { }
public ExpressionParser(PascalParser parent) : base(parent) { }
public RepeatStatementParser(PascalParser parent) : base(parent) { }
public PascalAssignmentStatementParser(PascalParser parent) : base(parent) { }
public ProgramParser(PascalParser parent) : base(parent) { }
public ProcedureParser(PascalParser parent) : base(parent) { }
public CompoundParser(PascalParser parent) : base(parent) { }
public ConditionParser(PascalParser parent) : base(parent) { }
public WhileStatementParser(PascalParser parent) : base(parent) { }
public ReadParser(PascalParser parent) : base(parent) { }
public AssignmentParser(PascalParser parent) : base(parent) { }