internal ParserTraceEntry AddParserTrace(ParserState state, ParseTreeNode stackTop, ParseTreeNode input) { var entry = new ParserTraceEntry(state, stackTop, input); ParserTrace.Add(entry); return(entry); }
private void AddTraceEntry() { if (!_traceOn) { return; } _currentTraceEntry = _context.AddParserTrace(_currentState, Stack.Top, _currentInput); }
private bool ExecuteAction() { if (_currentInput == null) { ReadInput(); } //Trace current state if tracing is on if (_traceOn) { _currentTraceEntry = _context.AddParserTrace(_currentState, Stack.Top, _currentInput); } //Try getting action ParserAction action = GetAction(); if (action == null) { ReportParseError(); return(TryRecover()); } //write trace if (_currentTraceEntry != null) { _currentTraceEntry.SetDetails(action.ToString(), _currentState); } //Execute it switch (action.ActionType) { case ParserActionType.Shift: ExecuteShift(action.NewState); break; case ParserActionType.Operator: ExecuteOperatorAction(action.NewState, action.ReduceProduction); break; case ParserActionType.Reduce: ExecuteReduce(action.ReduceProduction); break; case ParserActionType.Code: ExecuteConflictAction(action); break; case ParserActionType.Jump: ExecuteNonCanonicalJump(action); break; case ParserActionType.Accept: ExecuteAccept(action); return(false); } //add info to trace return(true); }
internal ParserTraceEntry AddParserTrace(ParserState state, ParseTreeNode stackTop, ParseTreeNode input) { var entry = new ParserTraceEntry(state, stackTop, input); ParserTrace.Add(entry); return entry; }
private void AddTraceEntry() { if (!_traceOn) return; _currentTraceEntry = _context.AddParserTrace(_currentState, Stack.Top, _currentInput); }
private bool ExecuteAction() { if (_currentInput == null) ReadInput(); //Trace current state if tracing is on if (_traceOn) _currentTraceEntry = _context.AddParserTrace(_currentState, Stack.Top, _currentInput); //Try getting action ParserAction action = GetAction(); if (action == null) { ReportParseError(); return TryRecover(); } //write trace if (_currentTraceEntry != null) _currentTraceEntry.SetDetails(action.ToString(), _currentState); //Execute it switch (action.ActionType) { case ParserActionType.Shift: ExecuteShift(action.NewState); break; case ParserActionType.Operator: ExecuteOperatorAction(action.NewState, action.ReduceProduction); break; case ParserActionType.Reduce: ExecuteReduce(action.ReduceProduction); break; case ParserActionType.Code: ExecuteConflictAction (action); break; case ParserActionType.Jump: ExecuteNonCanonicalJump(action); break; case ParserActionType.Accept: ExecuteAccept(action); return false; } //add info to trace return true; }