Example #1
0
	private OrExprContext orExpr(int _p) {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = State;
		OrExprContext _localctx = new OrExprContext(_ctx, _parentState);
		OrExprContext _prevctx = _localctx;
		int _startState = 4;
		EnterRecursionRule(_localctx, 4, RULE_orExpr, _p);
		int _la;
		try {
			int _alt;
			EnterOuterAlt(_localctx, 1);
			{
			{
			State = 49; _localctx._andExpr = andExpr(0);
			 _localctx.retValue =  _localctx._andExpr.retValue;
			}
			_ctx.stop = _input.Lt(-1);
			State = 59;
			_errHandler.Sync(this);
			_alt = Interpreter.AdaptivePredict(_input,1,_ctx);
			while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) TriggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new OrExprContext(_parentctx, _parentState);
					_localctx.first = _prevctx;
					PushNewRecursionContext(_localctx, _startState, RULE_orExpr);
					State = 52;
					if (!(Precpred(_ctx, 2))) throw new FailedPredicateException(this, "Precpred(_ctx, 2)");
					State = 53;
					_la = _input.La(1);
					if ( !(_la==T__27 || _la==T__8) ) {
					_errHandler.RecoverInline(this);
					}
					Consume();
					State = 54; _localctx._andExpr = andExpr(0);
					 _localctx.retValue =  new BinaryExpression(BinaryExpressionType.Or, _localctx.first.retValue, _localctx._andExpr.retValue);
					}
					} 
				}
				State = 61;
				_errHandler.Sync(this);
				_alt = Interpreter.AdaptivePredict(_input,1,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.ReportError(this, re);
			_errHandler.Recover(this, re);
		}
		finally {
			UnrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}
Example #2
0
    private ExprContext expr(int _p)
    {
        ParserRuleContext _parentctx = Context;
        int         _parentState     = State;
        ExprContext _localctx        = new ExprContext(Context, _parentState);
        ExprContext _prevctx         = _localctx;
        int         _startState      = 12;

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

        try {
            int _alt;
            EnterOuterAlt(_localctx, 1);
            {
                State = 58;
                switch (TokenStream.La(1))
                {
                case K_NOT:
                {
                    _localctx = new NotExprContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;

                    State = 46; Match(K_NOT);
                    State = 47; expr(5);
                }
                break;

                case ID:
                {
                    _localctx = new BaseComparisonContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 48; Match(ID);
                    State     = 49; Match(COMPARISON_OP);
                    State     = 51;
                    _la       = TokenStream.La(1);
                    if (_la == NEGATION)
                    {
                        {
                            State = 50; Match(NEGATION);
                        }
                    }

                    State = 53; literal();
                }
                break;

                case T__1:
                {
                    _localctx = new ParanthesizedExprContext(_localctx);
                    Context   = _localctx;
                    _prevctx  = _localctx;
                    State     = 54; Match(T__1);
                    State     = 55; expr(0);
                    State     = 56; Match(T__2);
                }
                break;

                default:
                    throw new NoViableAltException(this);
                }
                Context.Stop = TokenStream.Lt(-1);
                State        = 68;
                ErrorHandler.Sync(this);
                _alt = Interpreter.AdaptivePredict(TokenStream, 6, Context);
                while (_alt != 2 && _alt != global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber)
                {
                    if (_alt == 1)
                    {
                        if (ParseListeners != null)
                        {
                            TriggerExitRuleEvent();
                        }
                        _prevctx = _localctx;
                        {
                            State = 66;
                            switch (Interpreter.AdaptivePredict(TokenStream, 5, Context))
                            {
                            case 1:
                            {
                                _localctx = new AndExprContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 60;
                                if (!(Precpred(Context, 3)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 3)");
                                }
                                State = 61; Match(K_AND);
                                State = 62; expr(4);
                            }
                            break;

                            case 2:
                            {
                                _localctx = new OrExprContext(new ExprContext(_parentctx, _parentState));
                                PushNewRecursionContext(_localctx, _startState, RULE_expr);
                                State = 63;
                                if (!(Precpred(Context, 2)))
                                {
                                    throw new FailedPredicateException(this, "Precpred(Context, 2)");
                                }
                                State = 64; Match(K_OR);
                                State = 65; expr(3);
                            }
                            break;
                            }
                        }
                    }
                    State = 70;
                    ErrorHandler.Sync(this);
                    _alt = Interpreter.AdaptivePredict(TokenStream, 6, Context);
                }
            }
        }
        catch (RecognitionException re) {
            _localctx.exception = re;
            ErrorHandler.ReportError(this, re);
            ErrorHandler.Recover(this, re);
        }
        finally {
            UnrollRecursionContexts(_parentctx);
        }
        return(_localctx);
    }
Example #3
0
	private bool orExpr_sempred(OrExprContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0: return Precpred(_ctx, 2);
		}
		return true;
	}