public override Node VisitUnaryExpression(UnaryExpressionContext context) { var expression = new ExpressionNode(context.Start, _operatorFactory.CreateUnaryOperator(context.unaryOperator().Start)); expression.AddChild(Visit(context.expression())); return(expression); }
public override void ExitUnaryExpression([NotNull] UnaryExpressionContext context) { base.ExitUnaryExpression(context); var leftSideToken = (context.Parent as InstructionContext).Start; var rightSideToken = context.ID().Symbol; CheckValidVar(leftSideToken); CheckValidVar(rightSideToken); CheckVarsAreEqual(leftSideToken, rightSideToken, "Skip instruction must have the same var at both sides."); }
public ExpressionContext expression() { ExpressionContext _localctx = new ExpressionContext(Context, State); EnterRule(_localctx, 16, RULE_expression); int _la; try { State = 76; ErrorHandler.Sync(this); switch (Interpreter.AdaptivePredict(TokenStream, 6, Context)) { case 1: _localctx = new BinaryExpressionContext(_localctx); EnterOuterAlt(_localctx, 1); { State = 72; ((BinaryExpressionContext)_localctx).var = Match(ID); State = 73; ((BinaryExpressionContext)_localctx).@operator = TokenStream.LT(1); _la = TokenStream.LA(1); if (!(_la == T__9 || _la == T__10)) { ((BinaryExpressionContext)_localctx).@operator = ErrorHandler.RecoverInline(this); } else { ErrorHandler.ReportMatch(this); Consume(); } State = 74; Match(T__11); } break; case 2: _localctx = new UnaryExpressionContext(_localctx); EnterOuterAlt(_localctx, 2); { State = 75; ((UnaryExpressionContext)_localctx).var = Match(ID); } break; } } catch (RecognitionException re) { _localctx.exception = re; ErrorHandler.ReportError(this, re); ErrorHandler.Recover(this, re); } finally { ExitRule(); } return(_localctx); }
public MathFuncNode VisitUnaryExpression(UnaryExpressionContext context) { var result = Visit(context.expression()); if (context.Minus() != null) { if (result is ValueNode valueNode) { result = new ValueNode(-valueNode.Value); } else { result = new FuncNode(KnownFuncType.Neg, result); } } return(result); }
public override Symbol VisitUnaryExpression([NotNull] UnaryExpressionContext context) { var identifier = context.IDENTIFIER().GetText(); var value = callStack.ResolveVariable(identifier).AsInt; var unaryOperator = context.unaryOperator().GetText(); seleniumLogger.Log($"Applying unary operator {unaryOperator} to {identifier}", SeleniumScriptLogLevel.InterpreterDetails); switch (unaryOperator) { case "++": callStack.SetVariable(identifier, (value + 1).ToString()); break; case "--": callStack.SetVariable(identifier, (value - 1).ToString()); break; } return(new Symbol(string.Empty, ReturnType.Int, callStack.ResolveVariable(identifier).AsInt)); }
public UnaryExpressionContext unaryExpression() { UnaryExpressionContext _localctx = new UnaryExpressionContext(Context, State); EnterRule(_localctx, 18, RULE_unaryExpression); try { State = 162; switch (TokenStream.La(1)) { case LeftParen: case Identifier: case Constant: case StringLiteral: EnterOuterAlt(_localctx, 1); { State = 154; postfixExpression(0); } break; case PlusPlus: EnterOuterAlt(_localctx, 2); { State = 155; Match(PlusPlus); State = 156; unaryExpression(); } break; case MinusMinus: EnterOuterAlt(_localctx, 3); { State = 157; Match(MinusMinus); State = 158; unaryExpression(); } break; case Plus: case Minus: case Star: case And: case Not: case Tilde: EnterOuterAlt(_localctx, 4); { State = 159; unaryOperator(); State = 160; castExpression(); } break; default: throw new NoViableAltException(this); } } catch (RecognitionException re) { _localctx.exception = re; ErrorHandler.ReportError(this, re); ErrorHandler.Recover(this, re); } finally { ExitRule(); } return _localctx; }