Exemplo n.º 1
0
        ///<summary>Initializes the parser by creating all the production
        ///patterns.</summary>
        ///
        ///<exception cref='ParserCreationException'>if the parser
        ///couldn't be initialized correctly</exception>
        private void CreatePatterns()
        {
            ProductionPattern            pattern = default(ProductionPattern);
            ProductionPatternAlternative alt     = default(ProductionPatternAlternative);

            pattern = new ProductionPattern((int)ExpressionConstants.EXPRESSION, "Expression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.XOR_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.XOR_EXPRESSION, "XorExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.OR_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_1, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.OR_EXPRESSION, "OrExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.AND_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_2, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.AND_EXPRESSION, "AndExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.NOT_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_3, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.NOT_EXPRESSION, "NotExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.NOT, 0, 1);
            alt.AddProduction((int)ExpressionConstants.IN_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.IN_EXPRESSION, "InExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.COMPARE_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_4, 0, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.IN_TARGET_EXPRESSION, "InTargetExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.FIELD_PROPERTY_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.IN_LIST_TARGET_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.IN_LIST_TARGET_EXPRESSION, "InListTargetExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.LEFT_PAREN, 1, 1);
            alt.AddProduction((int)ExpressionConstants.ARGUMENT_LIST, 1, 1);
            alt.AddToken((int)ExpressionConstants.RIGHT_PAREN, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.COMPARE_EXPRESSION, "CompareExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.SHIFT_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_6, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.SHIFT_EXPRESSION, "ShiftExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.ADDITIVE_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_8, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.ADDITIVE_EXPRESSION, "AdditiveExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.MULTIPLICATIVE_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_10, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.MULTIPLICATIVE_EXPRESSION, "MultiplicativeExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.POWER_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_12, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.POWER_EXPRESSION, "PowerExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.NEGATE_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_13, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.NEGATE_EXPRESSION, "NegateExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.SUB, 0, 1);
            alt.AddProduction((int)ExpressionConstants.MEMBER_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.MEMBER_EXPRESSION, "MemberExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.BASIC_EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_14, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.MEMBER_ACCESS_EXPRESSION, "MemberAccessExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.DOT, 1, 1);
            alt.AddProduction((int)ExpressionConstants.MEMBER_FUNCTION_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.BASIC_EXPRESSION, "BasicExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.LITERAL_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.EXPRESSION_GROUP, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.MEMBER_FUNCTION_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.SPECIAL_FUNCTION_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.MEMBER_FUNCTION_EXPRESSION, "MemberFunctionExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.FIELD_PROPERTY_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.FUNCTION_CALL_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.FIELD_PROPERTY_EXPRESSION, "FieldPropertyExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.IDENTIFIER, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.SPECIAL_FUNCTION_EXPRESSION, "SpecialFunctionExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.IF_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.CAST_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.IF_EXPRESSION, "IfExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.IF, 1, 1);
            alt.AddToken((int)ExpressionConstants.LEFT_PAREN, 1, 1);
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            alt.AddToken((int)ExpressionConstants.ARGUMENT_SEPARATOR, 1, 1);
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            alt.AddToken((int)ExpressionConstants.ARGUMENT_SEPARATOR, 1, 1);
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            alt.AddToken((int)ExpressionConstants.RIGHT_PAREN, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.CAST_EXPRESSION, "CastExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.CAST, 1, 1);
            alt.AddToken((int)ExpressionConstants.LEFT_PAREN, 1, 1);
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            alt.AddToken((int)ExpressionConstants.ARGUMENT_SEPARATOR, 1, 1);
            alt.AddProduction((int)ExpressionConstants.CAST_TYPE_EXPRESSION, 1, 1);
            alt.AddToken((int)ExpressionConstants.RIGHT_PAREN, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.CAST_TYPE_EXPRESSION, "CastTypeExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.IDENTIFIER, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_15, 0, -1);
            alt.AddToken((int)ExpressionConstants.ARRAY_BRACES, 0, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.INDEX_EXPRESSION, "IndexExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.LEFT_BRACE, 1, 1);
            alt.AddProduction((int)ExpressionConstants.ARGUMENT_LIST, 1, 1);
            alt.AddToken((int)ExpressionConstants.RIGHT_BRACE, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.FUNCTION_CALL_EXPRESSION, "FunctionCallExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.IDENTIFIER, 1, 1);
            alt.AddToken((int)ExpressionConstants.LEFT_PAREN, 1, 1);
            alt.AddProduction((int)ExpressionConstants.ARGUMENT_LIST, 0, 1);
            alt.AddToken((int)ExpressionConstants.RIGHT_PAREN, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.ARGUMENT_LIST, "ArgumentList");
            alt     = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_16, 0, -1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.LITERAL_EXPRESSION, "LiteralExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.INTEGER, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.REAL, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.STRING_LITERAL, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.BOOLEAN_LITERAL_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.HEX_LITERAL, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.CHAR_LITERAL, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.NULL_LITERAL, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.DATETIME, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.TIMESPAN, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.BOOLEAN_LITERAL_EXPRESSION, "BooleanLiteralExpression");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.TRUE, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.FALSE, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern = new ProductionPattern((int)ExpressionConstants.EXPRESSION_GROUP, "ExpressionGroup");
            alt     = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.LEFT_PAREN, 1, 1);
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            alt.AddToken((int)ExpressionConstants.RIGHT_PAREN, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_1, "Subproduction1");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.XOR, 1, 1);
            alt.AddProduction((int)ExpressionConstants.OR_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_2, "Subproduction2");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.OR, 1, 1);
            alt.AddProduction((int)ExpressionConstants.AND_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_3, "Subproduction3");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.AND, 1, 1);
            alt.AddProduction((int)ExpressionConstants.NOT_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_4, "Subproduction4");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.IN, 1, 1);
            alt.AddProduction((int)ExpressionConstants.IN_TARGET_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_5, "Subproduction5");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.EQ, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.GT, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.LT, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.GTE, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.LTE, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.NE, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_6, "Subproduction6");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_5, 1, 1);
            alt.AddProduction((int)ExpressionConstants.SHIFT_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_7, "Subproduction7");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.LEFT_SHIFT, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.RIGHT_SHIFT, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_8, "Subproduction8");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_7, 1, 1);
            alt.AddProduction((int)ExpressionConstants.ADDITIVE_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_9, "Subproduction9");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.ADD, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.SUB, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_10, "Subproduction10");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_9, 1, 1);
            alt.AddProduction((int)ExpressionConstants.MULTIPLICATIVE_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_11, "Subproduction11");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.MUL, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.DIV, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.MOD, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_12, "Subproduction12");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)SynteticPatterns.SUBPRODUCTION_11, 1, 1);
            alt.AddProduction((int)ExpressionConstants.POWER_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_13, "Subproduction13");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.POWER, 1, 1);
            alt.AddProduction((int)ExpressionConstants.NEGATE_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_14, "Subproduction14");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.MEMBER_ACCESS_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            alt = new ProductionPatternAlternative();
            alt.AddProduction((int)ExpressionConstants.INDEX_EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_15, "Subproduction15");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.DOT, 1, 1);
            alt.AddToken((int)ExpressionConstants.IDENTIFIER, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);

            pattern           = new ProductionPattern((int)SynteticPatterns.SUBPRODUCTION_16, "Subproduction16");
            pattern.Synthetic = true;
            alt = new ProductionPatternAlternative();
            alt.AddToken((int)ExpressionConstants.ARGUMENT_SEPARATOR, 1, 1);
            alt.AddProduction((int)ExpressionConstants.EXPRESSION, 1, 1);
            pattern.AddAlternative(alt);
            AddPattern(pattern);
        }