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 ProcessCallingFunction() { _lastIsOperator = null; _context.Recovery(_currToken); var parser = new CallingFunctionExpressionParser(_context); parser.Run(); var node = parser.Result; #if DEBUG //Log($"node = {node}"); #endif var priority = OperatorsHelper.GetPriority(KindOfOperator.CallFunction); #if DEBUG //Log($"priority = {priority}"); #endif var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.UnaryOperator, priority); AstNodesLinker.SetNode(intermediateNode, _nodePoint); _state = State.Init; }
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 RunAssignBinaryOperator(BinaryOperatorAstExpression expression) { #if DEBUG //Log($"expression = {expression}"); #endif var rightBranch = expression.Right; #if DEBUG //Log($"rightBranch = {rightBranch}"); #endif if (rightBranch.Kind == KindOfAstExpression.ConstValue) { var rightNode = new ExpressionNode(_context); rightNode.Run(rightBranch); AddCommands(rightNode.Result); } else { var command = new IntermediateScriptCommand(); command.OperationCode = OperationCode.PushValToVar; command.Value = (rightBranch as VarAstExpression).Name; AddCommand(command); } var leftBranch = expression.Left; #if DEBUG //Log($"leftBranch = {leftBranch}"); #endif if (leftBranch.Kind == KindOfAstExpression.Var) { var command = new IntermediateScriptCommand(); command.OperationCode = OperationCode.PushValToVar; command.Value = (leftBranch as VarAstExpression).Name; AddCommand(command); } else { var rightNode = new ExpressionNode(_context); rightNode.Run(leftBranch); AddCommands(rightNode.Result); } }
private void ProcessIsOperator() { var node = new BinaryOperatorAstExpression(); node.KindOfOperator = KindOfOperator.Is; _lastIsOperator = node; var priority = OperatorsHelper.GetPriority(node.KindOfOperator); var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.BinaryOperator, priority); AstNodesLinker.SetNode(intermediateNode, _nodePoint); _state = State.Init; }
private void ProcessVar() { _lastIsOperator = null; var value = NameHelper.CreateName(_currToken.Content); var node = new VarAstExpression(); node.Name = value; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); _state = State.GotName; }
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); }
public void Run(BinaryOperatorAstExpression expression) { #if DEBUG //Log($"expression = {expression}"); #endif var kindOfOperator = expression.KindOfOperator; switch (kindOfOperator) { case KindOfOperator.Assign: RunAssignBinaryOperator(expression); break; default: RunUsualBinaryOperator(expression); break; } }
private void ProcessUsualBinaryOperator(KindOfOperator kindOfOperator) { _lastIsOperator = null; var node = new BinaryOperatorAstExpression(); node.KindOfOperator = kindOfOperator; var priority = OperatorsHelper.GetPriority(kindOfOperator); #if DEBUG //Log($"priority = {priority}"); #endif var intermediateNode = new IntermediateAstNode(node, KindOfIntermediateAstNode.BinaryOperator, priority); AstNodesLinker.SetNode(intermediateNode, _nodePoint); _state = State.Init; }
private void RunUsualBinaryOperator(BinaryOperatorAstExpression expression) { var leftNode = new ExpressionNode(_context); leftNode.Run(expression.Left); AddCommands(leftNode.Result); var rightNode = new ExpressionNode(_context); rightNode.Run(expression.Right); AddCommands(rightNode.Result); CompilePushAnnotation(expression); var command = new IntermediateScriptCommand(); command.OperationCode = OperationCode.CallBinOp; command.KindOfOperator = expression.KindOfOperator; AddCommand(command); }
private void ProcessNot() { #if DEBUG //Log($"_lastIsOperator = {_lastIsOperator}"); #endif if (_lastIsOperator == null) { ProcessConceptLeaf(); return; } if (_lastIsOperator.KindOfOperator == KindOfOperator.Is) { _lastIsOperator.KindOfOperator = KindOfOperator.IsNot; _lastIsOperator = null; return; } throw new UnexpectedTokenException(_currToken); }
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; }