public override void process(ICode iCode, SymbolTableStack symbolTableStack) { long startTime = DateTime.Now.Ticks; float elapsedTime = (DateTime.Now.Ticks - startTime) / 1000f; int instructionCount = 0; sendMessage(new Message(MessageType.COMPILER_SUMMARY, new Object[] {instructionCount, elapsedTime})); }
public override void process(ICode iCode, SymbolTableStack symbolTableStack) { long startTime = DateTime.Now.Ticks; float elapsedTime = (DateTime.Now.Ticks - startTime) / 1000f; int instructionCount = 0; sendMessage(new Message(MessageType.COMPILER_SUMMARY, new Object[] { instructionCount, elapsedTime })); }
private static Option <ILiquidValue> FindParentLoop(SymbolTableStack stack) { var parentLoop = stack.Reference("forloop", skiplevels: 1); if (parentLoop.IsError || !parentLoop.SuccessResult.HasValue) { return(new None <ILiquidValue>()); } return(parentLoop.SuccessValue <LiquidHash>()); }
public override void process(ICode iCode, SymbolTableStack symbolTableStack) { this.symbolTableStack = symbolTableStack; this.iCode = iCode; long startTime = DateTime.Now.Ticks; ICodeNode rootNode = iCode.GetRoot(); StatementExecutor statementExecutor = new StatementExecutor(this); statementExecutor.Execute(rootNode); float elapsedTime = (DateTime.Now.Ticks - startTime) / 1000f; int runtimeErrors = RuntimeErrorHandler.errorCount; sendMessage(new Message(MessageType.INTERPRETER_SUMMARY, new Object[] { executionCount, runtimeErrors, elapsedTime })); }
public Pascal(string operation, string filePath, string flags) { try { bool intermediate = flags.IndexOf('i') > -1; bool xref = flags.IndexOf('x') > -1; source = new Source(new StreamReader(filePath)); source.addMessageListener(new SourceMessageListener()); parser = FrontendFactory.createParser("Pascal", "top-down", source); parser.addMessageListener(new ParserMessageListener()); backend = BackendFactory.createBackend(operation); backend.addMessageListener(new BackendMessageListener()); parser.parse(); source.close(); iCode = parser.iCode; symbolTableStack = Parser.symbolTableStack; if (xref) { CrossReferencer crossReferencer = new CrossReferencer(); crossReferencer.Print(symbolTableStack); } if (intermediate) { ParseTreePrinter treePrinter = new ParseTreePrinter(Console.Out); treePrinter.Print(iCode); } backend.process(iCode, symbolTableStack); } catch (Exception e) { Console.WriteLine("***** Internal translator error. *****"); Console.WriteLine(e.StackTrace); } }
private Backend backend; // backend public Pascal(string operation, string filePath, string flags) { try { bool intermediate = flags.IndexOf('i') > -1; bool xref = flags.IndexOf('x') > -1; source = new Source(new StreamReader(filePath)); source.addMessageListener(new SourceMessageListener()); parser = FrontendFactory.createParser("Pascal", "top-down", source); parser.addMessageListener(new ParserMessageListener()); backend = BackendFactory.createBackend(operation); backend.addMessageListener(new BackendMessageListener()); parser.parse(); source.close(); iCode = parser.iCode; symbolTableStack = Parser.symbolTableStack; if (xref) { CrossReferencer crossReferencer = new CrossReferencer(); crossReferencer.Print(symbolTableStack); } if (intermediate) { ParseTreePrinter treePrinter = new ParseTreePrinter(Console.Out); treePrinter.Print(iCode); } backend.process(iCode, symbolTableStack); } catch (Exception e) { Console.WriteLine("***** Internal translator error. *****"); Console.WriteLine(e.StackTrace); } }
public static LiquidHash CreateForLoopDescriptor(String name, int iter, int length, int col, int maxcol, int row, SymbolTableStack stack) { return(new LiquidHash { { "first", new LiquidBoolean(iter == 0) }, { "index", LiquidNumeric.Create(iter + 1) }, { "col", LiquidNumeric.Create(col + 1) }, { "row", LiquidNumeric.Create(row + 1) }, { "row0", LiquidNumeric.Create(row) }, { "col0", LiquidNumeric.Create(col) }, { "col_first", new LiquidBoolean(col == 0) }, { "col_last", new LiquidBoolean(col == maxcol) }, { "index0", LiquidNumeric.Create(iter) }, { "rindex", LiquidNumeric.Create(length - iter) }, { "rindex0", LiquidNumeric.Create(length - iter - 1) }, { "last", new LiquidBoolean(length - iter - 1 == 0) }, { "length", LiquidNumeric.Create(length) }, { "name", LiquidString.Create(name) } }); }
// Print the cross reference table public void Print(SymbolTableStack symbolTableStack) { Console.WriteLine("\n===== CROSS-REFERENCE TABLE ====="); PrintColumnHeadings(); PrintSymbolTable(symbolTableStack.GetLocalSymbolTable()); }
// Process the intermediate code and the symbol table generated by the // parser. To be implemented by a compiler or an interpreter subclass. public abstract void process(ICode iCode, SymbolTableStack symTab);
public static LiquidHash CreateForLoopDescriptor(String name, int iter, int length, SymbolTableStack stack) { return(new LiquidHash { { "parentloop", FindParentLoop(stack) }, // see: https://github.com/Shopify/liquid/pull/520 { "first", new LiquidBoolean(iter == 0) }, { "index", LiquidNumeric.Create(iter + 1) }, { "index0", LiquidNumeric.Create(iter) }, { "rindex", LiquidNumeric.Create(length - iter) }, { "rindex0", LiquidNumeric.Create(length - iter - 1) }, { "last", new LiquidBoolean(length - iter - 1 == 0) }, { "length", LiquidNumeric.Create(length) }, { "name", LiquidString.Create(name) } }); }