예제 #1
0
        internal ParserTraceEntry AddParserTrace(ParserState state, ParseTreeNode stackTop, ParseTreeNode input)
        {
            var entry = new ParserTraceEntry(state, stackTop, input);

            ParserTrace.Add(entry);
            return(entry);
        }
예제 #2
0
 private void AddTraceEntry()
 {
     if (!_traceOn)
     {
         return;
     }
     _currentTraceEntry = _context.AddParserTrace(_currentState, Stack.Top, _currentInput);
 }
예제 #3
0
        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);
        }
예제 #4
0
 internal ParserTraceEntry AddParserTrace(ParserState state, ParseTreeNode stackTop, ParseTreeNode input) {
   var entry = new ParserTraceEntry(state, stackTop, input);
   ParserTrace.Add(entry);
   return entry;
 }
예제 #5
0
파일: CoreParser.cs 프로젝트: TheByte/sones
 private void AddTraceEntry()
 {
     if (!_traceOn) return;
       _currentTraceEntry = _context.AddParserTrace(_currentState, Stack.Top, _currentInput);
 }
예제 #6
0
파일: CoreParser.cs 프로젝트: TheByte/sones
 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;
 }