public final Symbol parser_do_action()

in src/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java [1161:2779]


    public final Symbol parser_do_action(
        int parser_act_num,
        lr_parser parser_parser,
        Stack<Symbol> parser_stack,
        int parser_top)
        throws java.lang.Exception {
        /* Symbol object for return from actions */
        Symbol parser_result;

        /* select the action based on the action number */
        switch (parser_act_num) {
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 0: // $START ::= TopLevel EOF
            {
                SyntaxTreeNode start_val = (SyntaxTreeNode) (parser_stack.get(parser_top - 1)).value;
                parser_result = new Symbol(0, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, start_val);
            }
            /* ACCEPT */
            parser_parser.done_parsing();
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 1: // TopLevel ::= PATTERN Pattern
            {
                Pattern pattern = (Pattern) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(1, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, pattern);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 2: // TopLevel ::= EXPRESSION Expr
            {
                Expression expr = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(1, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, expr);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 3: // Pattern ::= LocationPathPattern
            {
                Pattern lpp = (Pattern) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(28, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, lpp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 4: // Pattern ::= LocationPathPattern VBAR Pattern
            {
                Pattern lpp = (Pattern) (parser_stack.get(parser_top - 2)).value;
                Pattern p = (Pattern) (parser_stack.get(parser_top - 0)).value;
                Pattern result = new AlternativePattern(lpp, p);
                parser_result = new Symbol(28, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 5: // LocationPathPattern ::= SLASH
            {
                Pattern result = new AbsolutePathPattern(null);
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 6: // LocationPathPattern ::= SLASH RelativePathPattern
            {
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                Pattern result = new AbsolutePathPattern(rpp);
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 7: // LocationPathPattern ::= IdKeyPattern
            {
                IdKeyPattern ikp = (IdKeyPattern) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ikp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern
            {
                IdKeyPattern ikp = (IdKeyPattern) (parser_stack.get(parser_top - 2)).value;
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                Pattern result = new ParentPattern(ikp, rpp);
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern
            {
                IdKeyPattern ikp = (IdKeyPattern) (parser_stack.get(parser_top - 2)).value;
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                Pattern result = new AncestorPattern(ikp, rpp);
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 10: // LocationPathPattern ::= DSLASH RelativePathPattern
            {
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                Pattern result = new AncestorPattern(rpp);
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 11: // LocationPathPattern ::= RelativePathPattern
            {
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(29, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, rpp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN
            {
                String l = (String) (parser_stack.get(parser_top - 1)).value;
                IdKeyPattern result = new IdPattern(l);
                parser.setHasIdCall(true);
                parser_result = new Symbol(27, (parser_stack.get(parser_top - 3)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN
            {
                String l1 = (String) (parser_stack.get(parser_top - 3)).value;
                String l2 = (String) (parser_stack.get(parser_top - 1)).value;
                IdKeyPattern result = new KeyPattern(l1, l2);
                parser_result = new Symbol(27, (parser_stack.get(parser_top - 5)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN
            {
                String l = (String) (parser_stack.get(parser_top - 1)).value;
                StepPattern result = new ProcessingInstructionPattern(l);
                parser_result = new Symbol(30, (parser_stack.get(parser_top - 3)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 15: // RelativePathPattern ::= StepPattern
            {
                StepPattern sp = (StepPattern) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(31, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, sp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern
            {
                StepPattern sp = (StepPattern) (parser_stack.get(parser_top - 2)).value;
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                RelativePathPattern result = new ParentPattern(sp, rpp);
                parser_result = new Symbol(31, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern
            {
                StepPattern sp = (StepPattern) (parser_stack.get(parser_top - 2)).value;
                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
                RelativePathPattern result = new AncestorPattern(sp, rpp);
                parser_result = new Symbol(31, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 18: // StepPattern ::= NodeTestPattern
            {
                Object nt = parser_stack.get(parser_top - 0).value;
                StepPattern result = parser.createStepPattern(Axis.CHILD, nt, null);
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 19: // StepPattern ::= NodeTestPattern Predicates
            {
                Object nt = parser_stack.get(parser_top - 1).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                StepPattern result = parser.createStepPattern(Axis.CHILD, nt, pp);
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 20: // StepPattern ::= ProcessingInstructionPattern
            {
                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, pip);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 21: // StepPattern ::= ProcessingInstructionPattern Predicates
            {
                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 1)).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                StepPattern result = (ProcessingInstructionPattern) pip.setPredicates(pp);
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern
            {
                Integer axis = (Integer) (parser_stack.get(parser_top - 1)).value;
                Object nt = parser_stack.get(parser_top - 0).value;
                StepPattern result = parser.createStepPattern(axis, nt, null);
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 23: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern Predicates
            {
                Integer axis = (Integer) (parser_stack.get(parser_top - 2)).value;
                Object nt = parser_stack.get(parser_top - 1).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                StepPattern result = parser.createStepPattern(axis, nt, pp);
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern
            {
                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 0)).value;
                StepPattern result = pip;    // TODO: report error if axis is attribute
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates
            {
                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 1)).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                // TODO: report error if axis is attribute
                StepPattern result = (ProcessingInstructionPattern) pip.setPredicates(pp);
                parser_result = new Symbol(32, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 26: // NodeTestPattern ::= NameTestPattern
            {
                Object nt = parser_stack.get(parser_top - 0).value;
                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, nt);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 27: // NodeTestPattern ::= NODE
            {
                Object result = NodeTest.ANODE;
                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 28: // NodeTestPattern ::= TEXT
            {
                Object result = NodeTest.TEXT;
                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 29: // NodeTestPattern ::= COMMENT
            {
                Object result = NodeTest.COMMENT;
                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 30: // NodeTestPattern ::= PI
            {
                Object result = NodeTest.PI;
                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 31: // NameTestPattern ::= STAR
            {
                Object result = null;
                parser_result = new Symbol(34, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 32: // NameTestPattern ::= QName
            {
                QName qn = (QName) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(34, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, qn);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN
            {
                Integer result = Axis.ATTRIBUTE;
                parser_result = new Symbol(42, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 34: // ChildOrAttributeAxisSpecifier ::= CHILD DCOLON
            {
                Integer result = Axis.CHILD;
                parser_result = new Symbol(42, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 35: // ChildOrAttributeAxisSpecifier ::= ATTRIBUTE DCOLON
            {
                Integer result = Axis.ATTRIBUTE;
                parser_result = new Symbol(42, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 36: // Predicates ::= Predicate
            {
                Expression p = (Expression) (parser_stack.get(parser_top - 0)).value;
                Vector temp = new Vector();
                temp.add(p);
                parser_result = new Symbol(35, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, temp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 37: // Predicates ::= Predicate Predicates
            {
                Expression p = (Expression) (parser_stack.get(parser_top - 1)).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                pp.add(0, p);
                parser_result = new Symbol(35, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, pp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 38: // Predicate ::= LBRACK Expr RBRACK
            {
                Expression e = (Expression) (parser_stack.get(parser_top - 1)).value;
                Expression result = new Predicate(e);
                parser_result = new Symbol(5, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 39: // Expr ::= OrExpr
            {
                Expression ex = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(2, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ex);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 40: // OrExpr ::= AndExpr
            {
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(8, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ae);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 41: // OrExpr ::= OrExpr OR AndExpr
            {
                Expression oe = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new LogicalExpr(LogicalExpr.OR, oe, ae);
                parser_result = new Symbol(8, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 42: // AndExpr ::= EqualityExpr
            {
                Expression e = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(9, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, e);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 43: // AndExpr ::= AndExpr AND EqualityExpr
            {
                Expression ae = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ee = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new LogicalExpr(LogicalExpr.AND, ae, ee);
                parser_result = new Symbol(9, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 44: // EqualityExpr ::= RelationalExpr
            {
                Expression re = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(10, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, re);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr
            {
                Expression ee = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression re = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new EqualityExpr(Operators.EQ, ee, re);
                parser_result = new Symbol(10, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr
            {
                Expression ee = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression re = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new EqualityExpr(Operators.NE, ee, re);
                parser_result = new Symbol(10, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 47: // RelationalExpr ::= AdditiveExpr
            {
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(11, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ae);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr
            {
                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new RelationalExpr(Operators.LT, re, ae);
                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr
            {
                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new RelationalExpr(Operators.GT, re, ae);
                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr
            {
                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new RelationalExpr(Operators.LE, re, ae);
                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr
            {
                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new RelationalExpr(Operators.GE, re, ae);
                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 52: // AdditiveExpr ::= MultiplicativeExpr
            {
                Expression me = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(12, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, me);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr
            {
                Expression ae = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression me = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new BinOpExpr(BinOpExpr.PLUS, ae, me);
                parser_result = new Symbol(12, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr
            {
                Expression ae = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression me = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new BinOpExpr(BinOpExpr.MINUS, ae, me);
                parser_result = new Symbol(12, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 55: // MultiplicativeExpr ::= UnaryExpr
            {
                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(13, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ue);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 56: // MultiplicativeExpr ::= MultiplicativeExpr STAR UnaryExpr
            {
                Expression me = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new BinOpExpr(BinOpExpr.TIMES, me, ue);
                parser_result = new Symbol(13, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr
            {
                Expression me = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new BinOpExpr(BinOpExpr.DIV, me, ue);
                parser_result = new Symbol(13, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr
            {
                Expression me = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new BinOpExpr(BinOpExpr.MOD, me, ue);
                parser_result = new Symbol(13, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 59: // UnaryExpr ::= UnionExpr
            {
                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(14, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ue);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 60: // UnaryExpr ::= MINUS UnaryExpr
            {
                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new UnaryOpExpr(ue);
                parser_result = new Symbol(14, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 61: // UnionExpr ::= PathExpr
            {
                Expression pe = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(18, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, pe);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 62: // UnionExpr ::= PathExpr VBAR UnionExpr
            {
                Expression pe = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression rest = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new UnionPathExpr(pe, rest);
                parser_result = new Symbol(18, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 63: // PathExpr ::= LocationPath
            {
                Expression lp = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(19, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, lp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 64: // PathExpr ::= FilterExpr
            {
                Expression fexp = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(19, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, fexp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath
            {
                Expression fexp = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new FilterParentPath(fexp, rlp);
                parser_result = new Symbol(19, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath
            {
                Expression fexp = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
                //
                // Expand '//' into '/descendant-or-self::node()/' or
                // into /descendant-or-self::*/
                //
                int nodeType = DOM.NO_TYPE;
                if (rlp instanceof Step
                    && parser.isElementAxis(((Step) rlp).getAxis())) {
                    nodeType = DTM.ELEMENT_NODE;
                }
                final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
                FilterParentPath fpp = new FilterParentPath(fexp, step);
                fpp = new FilterParentPath(fpp, rlp);
                if (fexp instanceof KeyCall == false) {
                    fpp.setDescendantAxis();
                }
                parser_result = new Symbol(19, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, fpp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 67: // LocationPath ::= RelativeLocationPath
            {
                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(4, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, rlp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 68: // LocationPath ::= AbsoluteLocationPath
            {
                Expression alp = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(4, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, alp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 69: // RelativeLocationPath ::= Step
            {
                Expression step = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(21, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, step);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 70: // RelativeLocationPath ::= RelativeLocationPath SLASH Step
            {
                Expression result = null;
                Expression rlp = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression step = (Expression) (parser_stack.get(parser_top - 0)).value;
                if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
                    result = step;       // Remove './' from the middle
                } else if (((Step) step).isAbbreviatedDot()) {
                    result = rlp;        // Remove '/.' from the end
                } else {
                    result
                        = new ParentLocationPath((RelativeLocationPath) rlp, step);
                }
                parser_result = new Symbol(21, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 71: // RelativeLocationPath ::= AbbreviatedRelativeLocationPath
            {
                Expression arlp = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(21, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, arlp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 72: // AbsoluteLocationPath ::= SLASH
            {
                Expression result = new AbsoluteLocationPath();
                parser_result = new Symbol(23, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 73: // AbsoluteLocationPath ::= SLASH RelativeLocationPath
            {
                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
                Expression result = new AbsoluteLocationPath(rlp);
                parser_result = new Symbol(23, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath
            {
                Expression aalp = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(23, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, aalp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step
            {
                Expression result = null;
                Expression rlp = (Expression) (parser_stack.get(parser_top - 2)).value;
                Expression step = (Expression) (parser_stack.get(parser_top - 0)).value;
                final Step right = (Step) step;
                final int axis = right.getAxis();
                final int type = right.getNodeType();
                final Vector predicates = right.getPredicates();
                if ((axis == Axis.CHILD) && (type != NodeTest.ATTRIBUTE)) {
                    // Compress './/child:E' into 'descendant::E' - if possible
                    if (predicates == null) {
                        right.setAxis(Axis.DESCENDANT);
                        if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
                            result = right;
                        } else {
                            // Expand 'rlp//child::E' into 'rlp/descendant::E'
                            RelativeLocationPath left = (RelativeLocationPath) rlp;
                            result = new ParentLocationPath(left, right);
                        }
                    } else // Expand './/step' -> 'descendant-or-self::*/step'
                        if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
                            Step left = new Step(Axis.DESCENDANTORSELF,
                                DTM.ELEMENT_NODE, null);
                            result = new ParentLocationPath(left, right);
                        } else {
                            // Expand 'rlp//step' -> 'rlp/descendant-or-self::*/step'
                            RelativeLocationPath left = (RelativeLocationPath) rlp;
                            Step mid = new Step(Axis.DESCENDANTORSELF,
                                DTM.ELEMENT_NODE, null);
                            ParentLocationPath ppl = new ParentLocationPath(mid, right);
                            result = new ParentLocationPath(left, ppl);
                        }
                } else if ((axis == Axis.ATTRIBUTE) || (type == NodeTest.ATTRIBUTE)) {
                    // Expand 'rlp//step' -> 'rlp/descendant-or-self::*/step'
                    RelativeLocationPath left = (RelativeLocationPath) rlp;
                    Step middle = new Step(Axis.DESCENDANTORSELF,
                        DTM.ELEMENT_NODE, null);
                    ParentLocationPath ppl = new ParentLocationPath(middle, right);
                    result = new ParentLocationPath(left, ppl);
                } else {
                    // Expand 'rlp//step' -> 'rlp/descendant-or-self::node()/step'
                    RelativeLocationPath left = (RelativeLocationPath) rlp;
                    Step middle = new Step(Axis.DESCENDANTORSELF,
                        DOM.NO_TYPE, null);
                    ParentLocationPath ppl = new ParentLocationPath(middle, right);
                    result = new ParentLocationPath(left, ppl);
                }
                parser_result = new Symbol(22, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath
            {
                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
                //
                // Expand '//' into '/descendant-or-self::node()/' or
                // into /descendant-or-self::*/
                //
                int nodeType = DOM.NO_TYPE;
                if (rlp instanceof Step
                    && parser.isElementAxis(((Step) rlp).getAxis())) {
                    nodeType = DTM.ELEMENT_NODE;
                }
                final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
                Expression result = new AbsoluteLocationPath(parser.insertStep(step,
                    (RelativeLocationPath) rlp));
                parser_result = new Symbol(24, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 77: // Step ::= NodeTest
            {
                Expression result = null;
                Object ntest = parser_stack.get(parser_top - 0).value;
                if (ntest instanceof Step) {
                    result = (Step) ntest;
                } else {
                    result = new Step(Axis.CHILD,
                        parser.findNodeType(Axis.CHILD, ntest),
                        null);
                }
                parser_result = new Symbol(7, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 78: // Step ::= NodeTest Predicates
            {
                Expression result = null;
                Object ntest = parser_stack.get(parser_top - 1).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                if (ntest instanceof Step) {
                    Step step = (Step) ntest;
                    step.addPredicates(pp);
                    result = (Step) ntest;
                } else {
                    result = new Step(Axis.CHILD,
                        parser.findNodeType(Axis.CHILD, ntest), pp);
                }
                parser_result = new Symbol(7, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 79: // Step ::= AxisSpecifier NodeTest Predicates
            {
                Integer axis = (Integer) (parser_stack.get(parser_top - 2)).value;
                Object ntest = parser_stack.get(parser_top - 1).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                Expression result = new Step(axis, parser.findNodeType(axis, ntest), pp);
                parser_result = new Symbol(7, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 80: // Step ::= AxisSpecifier NodeTest
            {
                Integer axis = (Integer) (parser_stack.get(parser_top - 1)).value;
                Object ntest = parser_stack.get(parser_top - 0).value;
                Expression result = new Step(axis, parser.findNodeType(axis, ntest), null);
                parser_result = new Symbol(7, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 81: // Step ::= AbbreviatedStep
            {
                Expression abbrev = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(7, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, abbrev);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 82: // AxisSpecifier ::= AxisName DCOLON
            {
                Integer an = (Integer) (parser_stack.get(parser_top - 1)).value;
                parser_result = new Symbol(41, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, an);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 83: // AxisSpecifier ::= ATSIGN
            {
                Integer result = Axis.ATTRIBUTE;
                parser_result = new Symbol(41, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 84: // AxisName ::= ANCESTOR
            {
                Integer result = Axis.ANCESTOR;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 85: // AxisName ::= ANCESTORORSELF
            {
                Integer result = Axis.ANCESTORORSELF;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 86: // AxisName ::= ATTRIBUTE
            {
                Integer result = Axis.ATTRIBUTE;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 87: // AxisName ::= CHILD
            {
                Integer result = Axis.CHILD;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 88: // AxisName ::= DESCENDANT
            {
                Integer result = Axis.DESCENDANT;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 89: // AxisName ::= DESCENDANTORSELF
            {
                Integer result = Axis.DESCENDANTORSELF;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 90: // AxisName ::= FOLLOWING
            {
                Integer result = Axis.FOLLOWING;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 91: // AxisName ::= FOLLOWINGSIBLING
            {
                Integer result = Axis.FOLLOWINGSIBLING;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 92: // AxisName ::= NAMESPACE
            {
                Integer result = Axis.NAMESPACE;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 93: // AxisName ::= PARENT
            {
                Integer result = Axis.PARENT;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 94: // AxisName ::= PRECEDING
            {
                Integer result = Axis.PRECEDING;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 95: // AxisName ::= PRECEDINGSIBLING
            {
                Integer result = Axis.PRECEDINGSIBLING;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 96: // AxisName ::= SELF
            {
                Integer result = Axis.SELF;
                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 97: // AbbreviatedStep ::= DOT
            {
                Expression result = new Step(Axis.SELF, NodeTest.ANODE, null);
                parser_result = new Symbol(20, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 98: // AbbreviatedStep ::= DDOT
            {
                Expression result = new Step(Axis.PARENT, NodeTest.ANODE, null);
                parser_result = new Symbol(20, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 99: // FilterExpr ::= PrimaryExpr
            {
                Expression primary = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(6, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, primary);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 100: // FilterExpr ::= PrimaryExpr Predicates
            {
                Expression primary = (Expression) (parser_stack.get(parser_top - 1)).value;
                @SuppressWarnings("unchecked")
                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
                Expression result = new FilterExpr(primary, pp);
                parser_result = new Symbol(6, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 101: // PrimaryExpr ::= VariableReference
            {
                Expression vr = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, vr);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 102: // PrimaryExpr ::= LPAREN Expr RPAREN
            {
                Expression ex = (Expression) (parser_stack.get(parser_top - 1)).value;
                parser_result = new Symbol(17, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, ex);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 103: // PrimaryExpr ::= Literal
            {
                String string = (String) (parser_stack.get(parser_top - 0)).value;
                /*
                 * If the string appears to have the syntax of a QName, store
                 * namespace info in the literal expression. This is used for
                 * element-available and function-available functions, among
                 * others. Also, the default namespace must be ignored.
                 */
                String namespace = null;
                final int index = string.lastIndexOf(':');
                if (index > 0) {
                    final String prefix = string.substring(0, index);
                    namespace = parser._symbolTable.lookupNamespace(prefix);
                }
                Expression result = (namespace == null) ? new LiteralExpr(string)
                    : new LiteralExpr(string, namespace);
                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 104: // PrimaryExpr ::= INT
            {
                Expression result = null;
                Long num = (Long) (parser_stack.get(parser_top - 0)).value;
                if (num < Integer.MIN_VALUE || num > Integer.MAX_VALUE) {
                    result = new RealExpr(num);
                } else if (num.doubleValue() == -0) {
                    result = new RealExpr(num.doubleValue());
                } else if (num.intValue() == 0) {
                    result = new IntExpr(num.intValue());
                } else if (num.doubleValue() == 0.0) {
                    result = new RealExpr(num.doubleValue());
                } else {
                    result = new IntExpr(num.intValue());
                }
                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 105: // PrimaryExpr ::= REAL
            {
                Double num = (Double) (parser_stack.get(parser_top - 0)).value;
                Expression result = new RealExpr(num);
                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 106: // PrimaryExpr ::= FunctionCall
            {
                Expression fc = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, fc);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 107: // VariableReference ::= DOLLAR VariableName
            {
                Expression result = null;
                QName varName = (QName) (parser_stack.get(parser_top - 0)).value;
                // An empty qname prefix for a variable or parameter reference
                // should map to the null namespace and not the default URI.
                SyntaxTreeNode node = parser.lookupName(varName);
                if (node != null) {
                    if (node instanceof Variable) {
                        result = new VariableRef((Variable) node);
                    } else if (node instanceof Param) {
                        result = new ParameterRef((Param) node);
                    } else {
                        result = new UnresolvedRef(varName);
                    }
                }
                if (node == null) {
                    result = new UnresolvedRef(varName);
                }
                parser_result = new Symbol(15, (parser_stack.get(parser_top - 1)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 108: // FunctionCall ::= FunctionName LPAREN RPAREN
            {
                Expression result = null;
                QName fname = (QName) (parser_stack.get(parser_top - 2)).value;
                if (fname == parser.getQNameIgnoreDefaultNs("current")) {
                    result = new CurrentCall(fname);
                } else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
                    result = new NumberCall(fname, XPathParser.EmptyArgs);
                } else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
                    result = new StringCall(fname, XPathParser.EmptyArgs);
                } else if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
                    result = new ConcatCall(fname, XPathParser.EmptyArgs);
                } else if (fname == parser.getQNameIgnoreDefaultNs("true")) {
                    result = new BooleanExpr(true);
                } else if (fname == parser.getQNameIgnoreDefaultNs("false")) {
                    result = new BooleanExpr(false);
                } else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
                    result = new NameCall(fname);
                } else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
                    result = new GenerateIdCall(fname, XPathParser.EmptyArgs);
                } else if (fname == parser.getQNameIgnoreDefaultNs("string-length")) {
                    result = new StringLengthCall(fname, XPathParser.EmptyArgs);
                } else if (fname == parser.getQNameIgnoreDefaultNs("position")) {
                    result = new PositionCall(fname);
                } else if (fname == parser.getQNameIgnoreDefaultNs("last")) {
                    result = new LastCall(fname);
                } else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
                    result = new LocalNameCall(fname);
                } else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
                    result = new NamespaceUriCall(fname);
                } else {
                    result = new FunctionCall(fname, XPathParser.EmptyArgs);
                }
                parser_result = new Symbol(16, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN
            {
                Expression result = null;
                QName fname = (QName) (parser_stack.get(parser_top - 3)).value;
                @SuppressWarnings("unchecked")
                Vector argl = (Vector) (parser_stack.get(parser_top - 1)).value;
                if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
                    result = new ConcatCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
                    result = new NumberCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("document")) {
                    parser.setMultiDocument(true);
                    result = new DocumentCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
                    result = new StringCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("boolean")) {
                    result = new BooleanCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
                    result = new NameCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
                    result = new GenerateIdCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("not")) {
                    result = new NotCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("format-number")) {
                    result = new FormatNumberCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("unparsed-entity-uri")) {
                    result = new UnparsedEntityUriCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("key")) {
                    result = new KeyCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("id")) {
                    result = new KeyCall(fname, argl);
                    parser.setHasIdCall(true);
                } else if (fname == parser.getQNameIgnoreDefaultNs("ceiling")) {
                    result = new CeilingCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("round")) {
                    result = new RoundCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("floor")) {
                    result = new FloorCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("contains")) {
                    result = new ContainsCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("string-length")) {
                    result = new StringLengthCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("starts-with")) {
                    result = new StartsWithCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("function-available")) {
                    result = new FunctionAvailableCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("element-available")) {
                    result = new ElementAvailableCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
                    result = new LocalNameCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("lang")) {
                    result = new LangCall(fname, argl);
                } else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
                    result = new NamespaceUriCall(fname, argl);
                } else if (fname == parser.getQName(Constants.TRANSLET_URI, "xsltc", "cast")) {
                    result = new CastCall(fname, argl);
                } // Special case for extension function nodeset()
                else if (fname.getLocalPart().equals("nodeset") || fname.getLocalPart().equals("node-set")) {
                    parser.setCallsNodeset(true);  // implies MultiDOM
                    result = new FunctionCall(fname, argl);
                } else {
                    result = new FunctionCall(fname, argl);
                }
                parser_result = new Symbol(16, (parser_stack.get(parser_top - 3)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 110: // NonemptyArgumentList ::= Argument
            {
                Expression arg = (Expression) (parser_stack.get(parser_top - 0)).value;
                Vector temp = new Vector();
                temp.add(arg);
                parser_result = new Symbol(36, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, temp);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList
            {
                Expression arg = (Expression) (parser_stack.get(parser_top - 2)).value;
                @SuppressWarnings("unchecked")
                Vector argl = (Vector) (parser_stack.get(parser_top - 0)).value;
                argl.add(0, arg);
                parser_result = new Symbol(36, (parser_stack.get(parser_top - 2)).left,
                    (parser_stack.get(parser_top - 0)).right, argl);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 112: // FunctionName ::= QName
            {
                QName fname = (QName) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(38, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, fname);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 113: // VariableName ::= QName
            {
                QName vname = (QName) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(39, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, vname);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 114: // Argument ::= Expr
            {
                Expression ex = (Expression) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(3, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, ex);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 115: // NodeTest ::= NameTest
            {
                Object nt = parser_stack.get(parser_top - 0).value;
                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, nt);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 116: // NodeTest ::= NODE
            {
                Object result = NodeTest.ANODE;
                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 117: // NodeTest ::= TEXT
            {
                Object result = NodeTest.TEXT;
                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 118: // NodeTest ::= COMMENT
            {
                Object result = NodeTest.COMMENT;
                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN
            {
                String l = (String) (parser_stack.get(parser_top - 1)).value;
                QName name = parser.getQNameIgnoreDefaultNs("name");
                Expression exp = new EqualityExpr(Operators.EQ,
                    new NameCall(name),
                    new LiteralExpr(l));
                Vector predicates = new Vector();
                predicates.add(new Predicate(exp));
                Object result = new Step(Axis.CHILD, NodeTest.PI, predicates);
                parser_result = new Symbol(25, (parser_stack.get(parser_top - 3)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 120: // NodeTest ::= PI
            {
                Object result = NodeTest.PI;
                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 121: // NameTest ::= STAR
            {
                Object result = null;
                parser_result = new Symbol(26, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 122: // NameTest ::= QName
            {
                QName qn = (QName) (parser_stack.get(parser_top - 0)).value;
                parser_result = new Symbol(26, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, qn);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 123: // QName ::= QNAME
            {
                String qname = (String) (parser_stack.get(parser_top - 0)).value;
                QName result = parser.getQNameIgnoreDefaultNs(qname);
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 124: // QName ::= DIV
            {
                QName result = parser.getQNameIgnoreDefaultNs("div");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 125: // QName ::= MOD
            {
                QName result = parser.getQNameIgnoreDefaultNs("mod");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 126: // QName ::= KEY
            {
                QName result = parser.getQNameIgnoreDefaultNs("key");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 127: // QName ::= ANCESTOR
            {
                QName result = parser.getQNameIgnoreDefaultNs("child");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 128: // QName ::= ANCESTORORSELF
            {
                QName result = parser.getQNameIgnoreDefaultNs("ancestor-or-self");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 129: // QName ::= ATTRIBUTE
            {
                QName result = parser.getQNameIgnoreDefaultNs("attribute");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 130: // QName ::= CHILD
            {
                QName result = parser.getQNameIgnoreDefaultNs("child");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 131: // QName ::= DESCENDANT
            {
                QName result = parser.getQNameIgnoreDefaultNs("decendant");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 132: // QName ::= DESCENDANTORSELF
            {
                QName result = parser.getQNameIgnoreDefaultNs("decendant-or-self");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 133: // QName ::= FOLLOWING
            {
                QName result = parser.getQNameIgnoreDefaultNs("following");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 134: // QName ::= FOLLOWINGSIBLING
            {
                QName result = parser.getQNameIgnoreDefaultNs("following-sibling");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 135: // QName ::= NAMESPACE
            {
                QName result = parser.getQNameIgnoreDefaultNs("namespace");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 136: // QName ::= PARENT
            {
                QName result = parser.getQNameIgnoreDefaultNs("parent");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 137: // QName ::= PRECEDING
            {
                QName result = parser.getQNameIgnoreDefaultNs("preceding");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 138: // QName ::= PRECEDINGSIBLING
            {
                QName result = parser.getQNameIgnoreDefaultNs("preceding-sibling");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 139: // QName ::= SELF
            {
                QName result = parser.getQNameIgnoreDefaultNs("self");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /*. . . . . . . . . . . . . . . . . . . .*/
            case 140: // QName ::= ID
            {
                QName result = parser.getQNameIgnoreDefaultNs("id");
                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
                    (parser_stack.get(parser_top - 0)).right, result);
            }
            return parser_result;

            /* . . . . . .*/
            default:
                throw new Exception(
                    "Invalid action number found in internal parse table");

        }
    }