Пример #1
0
        private void HandleTerminalFsm(ParserNode.FsmParserNode fsmParserNode, bool materialize)
        {
            string text;
            var    from = _currState.Location;

            if (_currState.TryRunFsm(fsmParserNode.Fsm, out text))
            {
                var to = _currState.Location;

                if (materialize)
                {
                    _currState = _currState.TerminalParsed(from, to, text);
                }
                //_currState = _currState.TerminalParsed(from, to, text, _omitting);

                _currState = _currState.ExitNode(false);
            }
            else
            {
                if (materialize)
                {
                    _currState = _currState.TerminalFailed();
                }

                _currState = _currState.ExitNode(true);
            }
        }
Пример #2
0
 void IParserNodeVisitor.VisitFsm(ParserNode.FsmParserNode fsmParserNode)
 {
     if (_omitRoot != null)
     {
         if (_currState.PrevNode == fsmParserNode.Parent)
         {
             if (_currState.InsideOmittedFragment)
             {
                 this.HandleTerminalFsm(fsmParserNode, _materializeOmittedFragments);
             }
             else
             {
                 _currState.InsideOmittedFragment = true;
                 _currState = _currState.EnterNode(_omitRoot, true);
             }
         }
         else if (_currState.PrevNode == _omitRoot)
         {
             if (_currState.InsideOmittedFragment)
             {
                 _currState.InsideOmittedFragment = false;
                 this.HandleTerminalFsm(fsmParserNode, true);
             }
             else
             {
                 throw new InvalidOperationException("");
             }
         }
         else
         {
             throw new InvalidOperationException("");
         }
     }
     else
     {
         if (_currState.PrevNode == fsmParserNode.Parent)
         {
             this.HandleTerminalFsm(fsmParserNode, true);
         }
         else
         {
             throw new InvalidOperationException();
         }
     }
 }
Пример #3
0
 public void VisitFsm(ParserNode.FsmParserNode fsmParserNode)
 {
     this.LogLine("{0}", fsmParserNode); _v.VisitFsm(fsmParserNode);
 }
Пример #4
0
 void IParserNodeVisitor.VisitFsm(ParserNode.FsmParserNode fsmParserNode)
 {
     this.PrintNode(fsmParserNode);
 }