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); } }
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(); } } }
public void VisitFsm(ParserNode.FsmParserNode fsmParserNode) { this.LogLine("{0}", fsmParserNode); _v.VisitFsm(fsmParserNode); }
void IParserNodeVisitor.VisitFsm(ParserNode.FsmParserNode fsmParserNode) { this.PrintNode(fsmParserNode); }