Esempio n. 1
0
        public override Node VisitUnaryExpression(UnaryExpressionContext context)
        {
            var expression = new ExpressionNode(context.Start, _operatorFactory.CreateUnaryOperator(context.unaryOperator().Start));

            expression.AddChild(Visit(context.expression()));
            return(expression);
        }
Esempio n. 2
0
        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.");
        }
Esempio n. 3
0
    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);
    }
Esempio n. 4
0
        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));
        }
Esempio n. 6
0
	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;
	}