private void ProcessRuleOrFact() { _context.Recovery(_currToken); var parser = new LogicalQueryParser(_context); parser.Run(); var ruleInstanceItem = parser.Result; #if DEBUG //Log($"ruleInstanceItem = {ruleInstanceItem}"); #endif var value = new RuleInstanceValue(ruleInstanceItem); var node = new ConstValueAstExpression(); node.Value = value; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); }
/// <inheritdoc/> protected override void OnRun() { #if DEBUG //Log($"_currToken = {_currToken}"); //Log($"_state = {_state}"); #endif switch (_state) { case State.Init: switch (_currToken.TokenKind) { case TokenKind.QuestionMark: Result.KindOfLogicalQueryOperation = KindOfLogicalQueryOperation.Select; _state = State.GotKindOfLogicalQueryOperation; break; case TokenKind.Word: switch (_currToken.KeyWordTokenKind) { case KeyWordTokenKind.Select: Result.KindOfLogicalQueryOperation = KindOfLogicalQueryOperation.Select; _state = State.GotKindOfLogicalQueryOperation; break; case KeyWordTokenKind.Insert: Result.KindOfLogicalQueryOperation = KindOfLogicalQueryOperation.Insert; _state = State.GotKindOfLogicalQueryOperation; break; default: throw new UnexpectedTokenException(_currToken); } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotKindOfLogicalQueryOperation: switch (_currToken.TokenKind) { case TokenKind.OpenFactBracket: { _context.Recovery(_currToken); var parser = new LogicalQueryParser(_context); parser.Run(); var ruleInstanceItem = parser.Result; #if DEBUG //Log($"ruleInstanceItem = {ruleInstanceItem}"); #endif var value = new RuleInstanceValue(ruleInstanceItem); Result.Target = value; _state = State.GotTarget; } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotTarget: switch (_currToken.TokenKind) { case TokenKind.LeftRightStream: case TokenKind.Semicolon: _context.Recovery(_currToken); Exit(); break; default: throw new UnexpectedTokenException(_currToken); } break; default: throw new ArgumentOutOfRangeException(nameof(_state), _state, null); } }