private void ProcessConceptLeaf() { _lastIsOperator = null; var value = NameHelper.CreateName(_currToken.Content); var kindOfName = value.KindOfName; switch (kindOfName) { case KindOfName.Concept: case KindOfName.Channel: case KindOfName.Entity: { var node = new ConstValueAstExpression(); node.Value = value; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); _state = State.GotName; } break; default: throw new ArgumentOutOfRangeException(nameof(kindOfName), kindOfName, null); } }
private void ProcessStringToken() { _lastIsOperator = null; var node = new ConstValueAstExpression(); var value = new StringValue(_currToken.Content); node.Value = value; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); }
private void ProcessNumberToken() { _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); }
private void ProcessChannel() { _lastIsOperator = null; var name = NameHelper.CreateName(_currToken.Content); #if DEBUG //Log($"name = {name}"); #endif var node = new ConstValueAstExpression(); node.Value = name; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); }
private void ProcessNullToken() { _context.Recovery(_currToken); var parser = new NullParser(_context); parser.Run(); #if DEBUG //Log($"parser.Result = {parser.Result}"); #endif var node = new ConstValueAstExpression(); node.Value = parser.Result; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); }
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); }
private void ProcessLogicalQueryOperator() { _lastIsOperator = null; //_context.Recovery(_currToken); var parser = new LogicalQueryOperationParser(_context); parser.Run(); var resultItem = parser.Result; #if DEBUG //Log($"resultItem = {resultItem}"); #endif var node = new UnaryOperatorAstExpression(); node.KindOfOperator = KindOfOperator.CallLogicalQuery; var priority = OperatorsHelper.GetPriority(node.KindOfOperator); #if DEBUG //Log($"priority = {priority}"); #endif var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.UnaryOperator, priority); AstNodesLinker.SetNode(intermediateNode, _nodePoint); var valueNode = new ConstValueAstExpression(); valueNode.Value = resultItem; var valueIntermediateNode = new IntermediateAstNode(valueNode); AstNodesLinker.SetNode(valueIntermediateNode, _nodePoint); _state = State.GotCallLogicalQueryOperator; }
private AstExpression ConvertValueExprToNameExpr(AstExpression expression) { #if DEBUG //Log($"expression = {expression}"); #endif var kind = expression.Kind; switch (kind) { case KindOfAstExpression.ConstValue: return(expression); case KindOfAstExpression.Var: { var node = new ConstValueAstExpression(); node.Value = expression.AsVarAstExpression.Name; return(node); } default: throw new ArgumentOutOfRangeException(nameof(kind), kind, null); } }
/// <inheritdoc/> protected override void OnRun() { #if DEBUG //Log($"_currToken = {_currToken}"); //Log($"Result = {Result}"); //Log($"_state = {_state}"); #endif switch (_state) { case State.Init: switch (_currToken.TokenKind) { case TokenKind.EntityCondition: { var name = NameHelper.CreateName(_currToken.Content); #if DEBUG //Log($"name = {name}"); #endif Result.Name = name; _state = State.GotName; } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotName: switch (_currToken.TokenKind) { case TokenKind.OpenSquareBracket: Result.KindOfEntityConditionAstExpression = KindOfEntityConditionAstExpression.Waypoint; _state = State.WaitForFirstCoordinate; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForFirstCoordinate: switch (_currToken.TokenKind) { case TokenKind.Number: { _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; Result.FirstCoordinate = node; _state = State.GotFirstCoordinate; } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotFirstCoordinate: switch (_currToken.TokenKind) { case TokenKind.Comma: _state = State.WaitForSecondCoordinate; break; case TokenKind.CloseSquareBracket: if (Result.KindOfEntityConditionAstExpression == KindOfEntityConditionAstExpression.Waypoint) { Exit(); break; } throw new UnexpectedTokenException(_currToken); default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForSecondCoordinate: switch (_currToken.TokenKind) { case TokenKind.Number: { _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; Result.SecondCoordinate = node; _state = State.GotSecondCoordinate; } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotSecondCoordinate: switch (_currToken.TokenKind) { case TokenKind.CloseSquareBracket: if (Result.KindOfEntityConditionAstExpression == KindOfEntityConditionAstExpression.Waypoint) { Exit(); break; } throw new UnexpectedTokenException(_currToken); default: throw new UnexpectedTokenException(_currToken); } break; default: throw new ArgumentOutOfRangeException(nameof(_state), _state, null); } }
/// <inheritdoc/> protected override void OnRun() { #if DEBUG //Log($"Result = {Result}"); //Log($"_state = {_state}"); //Log($"_currToken = {_currToken}"); #endif switch (_state) { case State.Init: switch (_currToken.TokenKind) { case TokenKind.OpenRoundBracket: _state = State.WaitForMainParameter; break; case TokenKind.AsyncMarker: if (Result.IsAsync) { throw new UnexpectedTokenException(_currToken); } Result.IsAsync = true; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForMainParameter: switch (_currToken.TokenKind) { case TokenKind.Identifier: case TokenKind.Word: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); var value = NameHelper.CreateName(_currToken.Content); var node = new ConstValueAstExpression(); node.Value = value; _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.Number: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.String: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); var node = new ConstValueAstExpression(); node.Value = new StringValue(_currToken.Content); _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.Var: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); var value = NameHelper.CreateName(_currToken.Content); var node = new VarAstExpression(); node.Name = value; _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.CloseRoundBracket: Exit(); break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotPositionedMainParameter: switch (_currToken.TokenKind) { case TokenKind.Colon: if (_currentParameter.Value != null) { _currentParameter.Name = ConvertValueExprToNameExpr(_currentParameter.Value); _currentParameter.Value = null; } _state = State.WaitForValueOfNamedMainParameter; break; case TokenKind.CloseRoundBracket: Exit(); break; case TokenKind.Comma: _state = State.GotComma; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForValueOfNamedMainParameter: switch (_currToken.TokenKind) { case TokenKind.EntityCondition: { _context.Recovery(_currToken); var parser = new EntityConditionParser(_context); parser.Run(); _currentParameter.Value = parser.Result; _state = State.GotValueOfNamedMainParameter; } break; case TokenKind.Number: { _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; _currentParameter.Value = node; _state = State.GotValueOfNamedMainParameter; } break; case TokenKind.String: { var node = new ConstValueAstExpression(); node.Value = new StringValue(_currToken.Content); _currentParameter.Value = node; _state = State.GotValueOfNamedMainParameter; } break; case TokenKind.Word: case TokenKind.Identifier: { var value = NameHelper.CreateName(_currToken.Content); var node = new ConstValueAstExpression(); node.Value = value; _currentParameter.Value = node; _state = State.GotValueOfNamedMainParameter; } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotValueOfNamedMainParameter: switch (_currToken.TokenKind) { case TokenKind.CloseRoundBracket: Exit(); break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotComma: switch (_currToken.TokenKind) { case TokenKind.Number: case TokenKind.Word: case TokenKind.EntityCondition: case TokenKind.Var: case TokenKind.String: _context.Recovery(_currToken); _state = State.WaitForMainParameter; break; default: throw new UnexpectedTokenException(_currToken); } break; default: throw new ArgumentOutOfRangeException(nameof(_state), _state, null); } }