예제 #1
0
 public static QsiExpressionNode VisitNotExpression(NotExpressionContext context)
 {
     return(TreeHelper.Create <QsiUnaryExpressionNode>(n =>
     {
         n.Operator = context.notOperator.Text;
         n.Expression.SetValue(VisitExpression(context.expression()));
     }));
 }
예제 #2
0
    private ExprContext expr(int _p)
    {
        ParserRuleContext _parentctx = Context;
        int         _parentState     = State;
        ExprContext _localctx        = new ExprContext(Context, _parentState);
        ExprContext _prevctx         = _localctx;
        int         _startState      = 0;

        EnterRecursionRule(_localctx, 0, RULE_expr, _p);
        int _la;

        try {
            int _alt;
            EnterOuterAlt(_localctx, 1);
            {
                State = 23;
                ErrorHandler.Sync(this);
                switch (Interpreter.AdaptivePredict(TokenStream, 0, Context))
                {
                case 1:
                {
                    _localctx = new IfExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;

                    State = 11; ifexpr();
                }
                break;

                case 2:
                {
                    _localctx = new FunctionExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 12; function();
                }
                break;

                case 3:
                {
                    _localctx = new LiteralExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 13; literal();
                }
                break;

                case 4:
                {
                    _localctx = new FieldExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 14; field();
                }
                break;

                case 5:
                {
                    _localctx = new NotExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 15; Match(T__0);
                    State     = 16; expr(9);
                }
                break;

                case 6:
                {
                    _localctx = new NegateExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 17; Match(T__1);
                    State     = 18; expr(8);
                }
                break;

                case 7:
                {
                    _localctx = new BracketedExpressionContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 19; Match(T__2);
                    State     = 20; expr(0);
                    State     = 21; Match(T__3);
                }
                break;
                }
                Context.Stop = TokenStream.LT(-1);
                State        = 45;
                ErrorHandler.Sync(this);
                _alt = Interpreter.AdaptivePredict(TokenStream, 2, Context);
                while (_alt != 2 && _alt != global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER)
                {
                    if (_alt == 1)
                    {
                        if (ParseListeners != null)
                        {
                            TriggerExitRuleEvent();
                        }
                        _prevctx = _localctx;
                        {
                            State = 43;
                            ErrorHandler.Sync(this);
                            switch (Interpreter.AdaptivePredict(TokenStream, 1, Context))
                            {
                            case 1:
                            {
                                _localctx = new MulDivExpressionContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 25;
                                if (!(Precpred(Context, 6)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 6)");
                                }
                                State = 26;
                                _la   = TokenStream.LA(1);
                                if (!(_la == T__4 || _la == T__5))
                                {
                                    ErrorHandler.RecoverInline(this);
                                }
                                else
                                {
                                    ErrorHandler.ReportMatch(this);
                                    Consume();
                                }
                                State = 27; expr(7);
                            }
                            break;

                            case 2:
                            {
                                _localctx = new AddSubExpressionContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 28;
                                if (!(Precpred(Context, 5)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 5)");
                                }
                                State = 29;
                                _la   = TokenStream.LA(1);
                                if (!(_la == T__1 || _la == T__6))
                                {
                                    ErrorHandler.RecoverInline(this);
                                }
                                else
                                {
                                    ErrorHandler.ReportMatch(this);
                                    Consume();
                                }
                                State = 30; expr(6);
                            }
                            break;

                            case 3:
                            {
                                _localctx = new ComparisonExpressionContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 31;
                                if (!(Precpred(Context, 4)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 4)");
                                }
                                State = 32;
                                _la   = TokenStream.LA(1);
                                if (!((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10))) != 0)))
                                {
                                    ErrorHandler.RecoverInline(this);
                                }
                                else
                                {
                                    ErrorHandler.ReportMatch(this);
                                    Consume();
                                }
                                State = 33; expr(5);
                            }
                            break;

                            case 4:
                            {
                                _localctx = new EqualityExpressionContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 34;
                                if (!(Precpred(Context, 3)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 3)");
                                }
                                State = 35;
                                _la   = TokenStream.LA(1);
                                if (!(_la == T__11 || _la == T__12))
                                {
                                    ErrorHandler.RecoverInline(this);
                                }
                                else
                                {
                                    ErrorHandler.ReportMatch(this);
                                    Consume();
                                }
                                State = 36; expr(4);
                            }
                            break;

                            case 5:
                            {
                                _localctx = new AndExpressionContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 37;
                                if (!(Precpred(Context, 2)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 2)");
                                }
                                State = 38; Match(T__13);
                                State = 39; expr(3);
                            }
                            break;

                            case 6:
                            {
                                _localctx = new OrExpressionContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 40;
                                if (!(Precpred(Context, 1)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 1)");
                                }
                                State = 41; Match(T__14);
                                State = 42; expr(2);
                            }
                            break;
                            }
                        }
                    }
                    State = 47;
                    ErrorHandler.Sync(this);
                    _alt = Interpreter.AdaptivePredict(TokenStream, 2, Context);
                }
            }
        }
        catch (RecognitionException re) {
            _localctx.exception = re;
            ErrorHandler.ReportError(this, re);
            ErrorHandler.Recover(this, re);
        }
        finally {
            UnrollRecursionContexts(_parentctx);
        }
        return(_localctx);
    }
예제 #3
0
	private ExpressionContext expression(int _p) {
		ParserRuleContext _parentctx = Context;
		int _parentState = State;
		ExpressionContext _localctx = new ExpressionContext(Context, _parentState);
		ExpressionContext _prevctx = _localctx;
		int _startState = 2;
		EnterRecursionRule(_localctx, 2, RULE_expression, _p);
		try {
			int _alt;
			EnterOuterAlt(_localctx, 1);
			{
			State = 34;
			ErrorHandler.Sync(this);
			switch ( Interpreter.AdaptivePredict(TokenStream,0,Context) ) {
			case 1:
				{
				_localctx = new ParentExpressionContext(_localctx);
				Context = _localctx;
				_prevctx = _localctx;

				State = 16; Match(LPAREN);
				State = 17; expression(0);
				State = 18; Match(RPAREN);
				}
				break;
			case 2:
				{
				_localctx = new NotExpressionContext(_localctx);
				Context = _localctx;
				_prevctx = _localctx;
				State = 20; Match(NOT);
				State = 21; expression(5);
				}
				break;
			case 3:
				{
				_localctx = new PropertyExpressionContext(_localctx);
				Context = _localctx;
				_prevctx = _localctx;
				State = 22; ((PropertyExpressionContext)_localctx).left = subjectproperty();
				State = 23; ((PropertyExpressionContext)_localctx).op = Match(IS);
				State = 24; ((PropertyExpressionContext)_localctx).right = Match(TEXT);
				}
				break;
			case 4:
				{
				_localctx = new SubjectExpressionContext(_localctx);
				Context = _localctx;
				_prevctx = _localctx;
				State = 26; ((SubjectExpressionContext)_localctx).left = subject();
				State = 27; ((SubjectExpressionContext)_localctx).op = Match(IS);
				State = 28; ((SubjectExpressionContext)_localctx).right = Match(TEXT);
				}
				break;
			case 5:
				{
				_localctx = new FlowExpressionContext(_localctx);
				Context = _localctx;
				_prevctx = _localctx;
				State = 30; ((FlowExpressionContext)_localctx).left = Match(FLOW);
				State = 31; ((FlowExpressionContext)_localctx).op = @operator();
				State = 32; ((FlowExpressionContext)_localctx).right = Match(TEXT);
				}
				break;
			}
			Context.Stop = TokenStream.LT(-1);
			State = 42;
			ErrorHandler.Sync(this);
			_alt = Interpreter.AdaptivePredict(TokenStream,1,Context);
			while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( ParseListeners!=null )
						TriggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new BooleanExpressionContext(new ExpressionContext(_parentctx, _parentState));
					((BooleanExpressionContext)_localctx).left = _prevctx;
					PushNewRecursionContext(_localctx, _startState, RULE_expression);
					State = 36;
					if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)");
					State = 37; ((BooleanExpressionContext)_localctx).op = boolean();
					State = 38; ((BooleanExpressionContext)_localctx).right = expression(5);
					}
					} 
				}
				State = 44;
				ErrorHandler.Sync(this);
				_alt = Interpreter.AdaptivePredict(TokenStream,1,Context);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			ErrorHandler.ReportError(this, re);
			ErrorHandler.Recover(this, re);
		}
		finally {
			UnrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}
예제 #4
0
        private ExpressionContext expression(int _p)
        {
            ParserRuleContext _parentctx = Context;
            int _parentState             = State;
            ExpressionContext _localctx  = new ExpressionContext(Context, _parentState);
            ExpressionContext _prevctx   = _localctx;
            int _startState = 2;

            EnterRecursionRule(_localctx, 2, RULE_expression, _p);
            try {
                int _alt;
                EnterOuterAlt(_localctx, 1);
                {
                    State = 24;
                    ErrorHandler.Sync(this);
                    switch (TokenStream.LA(1))
                    {
                    case LPAREN:
                    {
                        _localctx = new ParenExpressionContext(_localctx);
                        Context   = _localctx;
                        _prevctx  = _localctx;

                        State = 14; Match(LPAREN);
                        State = 15; expression(0);
                        State = 16; Match(RPAREN);
                    }
                    break;

                    case NOT:
                    {
                        _localctx = new NotExpressionContext(_localctx);
                        Context   = _localctx;
                        _prevctx  = _localctx;
                        State     = 18; Match(NOT);
                        State     = 19; expression(7);
                    }
                    break;

                    case TRUE:
                    case FALSE:
                    {
                        _localctx = new BoolExpressionContext(_localctx);
                        Context   = _localctx;
                        _prevctx  = _localctx;
                        State     = 20; @bool();
                    }
                    break;

                    case IDENTIFIER:
                    {
                        _localctx = new IdentifierExpressionContext(_localctx);
                        Context   = _localctx;
                        _prevctx  = _localctx;
                        State     = 21; Match(IDENTIFIER);
                    }
                    break;

                    case DECIMAL:
                    {
                        _localctx = new DecimalExpressionContext(_localctx);
                        Context   = _localctx;
                        _prevctx  = _localctx;
                        State     = 22; Match(DECIMAL);
                    }
                    break;

                    case STRING:
                    {
                        _localctx = new StringExpressionContext(_localctx);
                        Context   = _localctx;
                        _prevctx  = _localctx;
                        State     = 23; Match(STRING);
                    }
                    break;

                    default:
                        throw new NoViableAltException(this);
                    }
                    Context.Stop = TokenStream.LT(-1);
                    State        = 36;
                    ErrorHandler.Sync(this);
                    _alt = Interpreter.AdaptivePredict(TokenStream, 2, Context);
                    while (_alt != 2 && _alt != global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER)
                    {
                        if (_alt == 1)
                        {
                            if (ParseListeners != null)
                            {
                                TriggerExitRuleEvent();
                            }
                            _prevctx = _localctx;
                            {
                                State = 34;
                                ErrorHandler.Sync(this);
                                switch (Interpreter.AdaptivePredict(TokenStream, 1, Context))
                                {
                                case 1:
                                {
                                    _localctx = new ComparatorExpressionContext(new ExpressionContext(_parentctx, _parentState));
                                    ((ComparatorExpressionContext)_localctx).left = _prevctx;
                                    PushNewRecursionContext(_localctx, _startState, RULE_expression);
                                    State = 26;
                                    if (!(Precpred(Context, 6)))
                                    {
                                        throw new FailedPredicateException(this, "Precpred(Context, 6)");
                                    }
                                    State = 27; ((ComparatorExpressionContext)_localctx).op = comparator();
                                    State = 28; ((ComparatorExpressionContext)_localctx).right = expression(7);
                                }
                                break;

                                case 2:
                                {
                                    _localctx = new BinaryExpressionContext(new ExpressionContext(_parentctx, _parentState));
                                    ((BinaryExpressionContext)_localctx).left = _prevctx;
                                    PushNewRecursionContext(_localctx, _startState, RULE_expression);
                                    State = 30;
                                    if (!(Precpred(Context, 5)))
                                    {
                                        throw new FailedPredicateException(this, "Precpred(Context, 5)");
                                    }
                                    State = 31; ((BinaryExpressionContext)_localctx).op = binary();
                                    State = 32; ((BinaryExpressionContext)_localctx).right = expression(6);
                                }
                                break;
                                }
                            }
                        }
                        State = 38;
                        ErrorHandler.Sync(this);
                        _alt = Interpreter.AdaptivePredict(TokenStream, 2, Context);
                    }
                }
            }
            catch (RecognitionException re) {
                _localctx.exception = re;
                ErrorHandler.ReportError(this, re);
                ErrorHandler.Recover(this, re);
            }
            finally {
                UnrollRecursionContexts(_parentctx);
            }
            return(_localctx);
        }