< prev index next >

src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java

Print this page




1294                  RESULT = parser.getQNameIgnoreDefaultNs("mod");
1295               parser_result = new Symbol(37/*QName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1296             }
1297           return parser_result;
1298 
1299           /*. . . . . . . . . . . . . . . . . . . .*/
1300           case 124: // QName ::= DIV
1301             {
1302               QName RESULT = null;
1303                  RESULT = parser.getQNameIgnoreDefaultNs("div");
1304               parser_result = new Symbol(37/*QName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1305             }
1306           return parser_result;
1307 
1308           /*. . . . . . . . . . . . . . . . . . . .*/
1309           case 123: // QName ::= QNAME
1310             {
1311               QName RESULT = null;
1312                 int qnameleft = (parser_stack.get(parser_top-0)).left;
1313                 int qnameright = (parser_stack.get(parser_top-0)).right;
1314                 String qname = (String)((Symbol) parser_stack.get(parser_top-0)).value;
1315                  RESULT = parser.getQNameIgnoreDefaultNs(qname);
1316               parser_result = new Symbol(37/*QName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1317             }
1318           return parser_result;
1319 
1320           /*. . . . . . . . . . . . . . . . . . . .*/
1321           case 122: // NameTest ::= QName
1322             {
1323               Object RESULT = null;
1324                 int qnleft = (parser_stack.get(parser_top-0)).left;
1325                 int qnright = (parser_stack.get(parser_top-0)).right;
1326                 QName qn = (QName)((Symbol) parser_stack.get(parser_top-0)).value;
1327                  RESULT = qn;
1328               parser_result = new Symbol(26/*NameTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1329             }
1330           return parser_result;
1331 
1332           /*. . . . . . . . . . . . . . . . . . . .*/
1333           case 121: // NameTest ::= STAR
1334             {
1335               Object RESULT = null;
1336                  RESULT = null;
1337               parser_result = new Symbol(26/*NameTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1338             }
1339           return parser_result;
1340 
1341           /*. . . . . . . . . . . . . . . . . . . .*/
1342           case 120: // NodeTest ::= PI
1343             {
1344               Object RESULT = null;
1345                  RESULT = Integer.valueOf(NodeTest.PI);
1346               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1347             }
1348           return parser_result;
1349 
1350           /*. . . . . . . . . . . . . . . . . . . .*/
1351           case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN
1352             {
1353               Object RESULT = null;
1354                 int lleft = (parser_stack.get(parser_top-1)).left;
1355                 int lright = (parser_stack.get(parser_top-1)).right;
1356                 String l = (String)((Symbol) parser_stack.get(parser_top-1)).value;
1357 
1358            QName name = parser.getQNameIgnoreDefaultNs("name");
1359            Expression exp = new EqualityExpr(Operators.EQ,
1360                                              new NameCall(name),
1361                                              new LiteralExpr(l));
1362            List<Predicate> predicates = new ArrayList<>();
1363            predicates.add(new Predicate(exp));
1364            RESULT = new Step(Axis.CHILD, NodeTest.PI, predicates);
1365 
1366               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1367             }
1368           return parser_result;
1369 
1370           /*. . . . . . . . . . . . . . . . . . . .*/
1371           case 118: // NodeTest ::= COMMENT
1372             {
1373               Object RESULT = null;
1374                  RESULT = Integer.valueOf(NodeTest.COMMENT);
1375               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1376             }


1383                  RESULT = Integer.valueOf(NodeTest.TEXT);
1384               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1385             }
1386           return parser_result;
1387 
1388           /*. . . . . . . . . . . . . . . . . . . .*/
1389           case 116: // NodeTest ::= NODE
1390             {
1391               Object RESULT = null;
1392                  RESULT = Integer.valueOf(NodeTest.ANODE);
1393               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1394             }
1395           return parser_result;
1396 
1397           /*. . . . . . . . . . . . . . . . . . . .*/
1398           case 115: // NodeTest ::= NameTest
1399             {
1400               Object RESULT = null;
1401                 int ntleft = (parser_stack.get(parser_top-0)).left;
1402                 int ntright = (parser_stack.get(parser_top-0)).right;
1403                 Object nt = (Object)((Symbol) parser_stack.get(parser_top-0)).value;
1404                  RESULT = nt;
1405               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1406             }
1407           return parser_result;
1408 
1409           /*. . . . . . . . . . . . . . . . . . . .*/
1410           case 114: // Argument ::= Expr
1411             {
1412               Expression RESULT = null;
1413                 int exleft = (parser_stack.get(parser_top-0)).left;
1414                 int exright = (parser_stack.get(parser_top-0)).right;
1415                 Expression ex = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
1416                  RESULT = ex;
1417               parser_result = new Symbol(3/*Argument*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1418             }
1419           return parser_result;
1420 
1421           /*. . . . . . . . . . . . . . . . . . . .*/
1422           case 113: // VariableName ::= QName
1423             {
1424               QName RESULT = null;
1425                 int vnameleft = (parser_stack.get(parser_top-0)).left;
1426                 int vnameright = (parser_stack.get(parser_top-0)).right;
1427                 QName vname = (QName)((Symbol) parser_stack.get(parser_top-0)).value;
1428 
1429             RESULT = vname;
1430 
1431               parser_result = new Symbol(39/*VariableName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1432             }
1433           return parser_result;
1434 
1435           /*. . . . . . . . . . . . . . . . . . . .*/
1436           case 112: // FunctionName ::= QName
1437             {
1438               QName RESULT = null;
1439                 int fnameleft = (parser_stack.get(parser_top-0)).left;
1440                 int fnameright = (parser_stack.get(parser_top-0)).right;
1441                 QName fname = (QName)((Symbol) parser_stack.get(parser_top-0)).value;
1442 
1443             RESULT = fname;
1444 
1445               parser_result = new Symbol(38/*FunctionName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1446             }
1447           return parser_result;
1448 
1449           /*. . . . . . . . . . . . . . . . . . . .*/
1450           case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList
1451             {
1452                 List<Expression> RESULT = null;
1453                 int argleft = (parser_stack.get(parser_top-2)).left;
1454                 int argright = (parser_stack.get(parser_top-2)).right;
1455                 Expression arg = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
1456                 int arglleft = (parser_stack.get(parser_top-0)).left;
1457                 int arglright = (parser_stack.get(parser_top-0)).right;
1458                 @SuppressWarnings("unchecked")
1459                 List<Expression> argl = (ArrayList<Expression>)((Symbol) parser_stack.get(parser_top-0)).value;
1460                 argl.add(0, arg);
1461                 RESULT = argl;
1462               parser_result = new Symbol(36/*NonemptyArgumentList*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1463             }
1464           return parser_result;
1465 
1466           /*. . . . . . . . . . . . . . . . . . . .*/
1467           case 110: // NonemptyArgumentList ::= Argument
1468             {
1469               List<Expression> RESULT = null;
1470                 int argleft = (parser_stack.get(parser_top-0)).left;
1471                 int argright = (parser_stack.get(parser_top-0)).right;
1472                 Expression arg = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
1473 
1474             List<Expression> temp = new ArrayList<>();
1475             temp.add(arg);
1476             RESULT = temp;
1477 
1478               parser_result = new Symbol(36/*NonemptyArgumentList*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1479             }
1480           return parser_result;
1481 
1482           /*. . . . . . . . . . . . . . . . . . . .*/
1483           case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN
1484             {
1485                 Expression RESULT = null;
1486                 int fnameleft = (parser_stack.get(parser_top-3)).left;
1487                 int fnameright = (parser_stack.get(parser_top-3)).right;
1488                 QName fname = (QName)((Symbol) parser_stack.get(parser_top-3)).value;
1489                 int arglleft = (parser_stack.get(parser_top-1)).left;
1490                 int arglright = (parser_stack.get(parser_top-1)).right;
1491                 @SuppressWarnings("unchecked")
1492                 List<Expression> argl = (ArrayList<Expression>)((Symbol) parser_stack.get(parser_top-1)).value;
1493 
1494           if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
1495             RESULT = new ConcatCall(fname, argl);
1496           }
1497           else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
1498             RESULT = new NumberCall(fname, argl);
1499           }
1500           else if (fname == parser.getQNameIgnoreDefaultNs("document")) {
1501             parser.setMultiDocument(true);
1502             RESULT = new DocumentCall(fname, argl);
1503           }
1504           else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
1505             RESULT = new StringCall(fname, argl);
1506           }
1507           else if (fname == parser.getQNameIgnoreDefaultNs("boolean")) {
1508             RESULT = new BooleanCall(fname, argl);
1509           }
1510           else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
1511             RESULT = new NameCall(fname, argl);
1512           }


1567           }
1568           // Special case for extension function nodeset()
1569           else if (fname.getLocalPart().equals("nodeset") || fname.getLocalPart().equals("node-set")) {
1570             parser.setCallsNodeset(true);  // implies MultiDOM
1571             RESULT = new FunctionCall(fname, argl);
1572           }
1573           else {
1574             RESULT = new FunctionCall(fname, argl);
1575           }
1576 
1577               parser_result = new Symbol(16/*FunctionCall*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1578             }
1579           return parser_result;
1580 
1581           /*. . . . . . . . . . . . . . . . . . . .*/
1582           case 108: // FunctionCall ::= FunctionName LPAREN RPAREN
1583             {
1584               Expression RESULT = null;
1585                 int fnameleft = (parser_stack.get(parser_top-2)).left;
1586                 int fnameright = (parser_stack.get(parser_top-2)).right;
1587                 QName fname = (QName)((Symbol) parser_stack.get(parser_top-2)).value;
1588 
1589 
1590           if (fname == parser.getQNameIgnoreDefaultNs("current")) {
1591             RESULT = new CurrentCall(fname);
1592           }
1593           else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
1594             RESULT = new NumberCall(fname, XPathParser.EmptyArgs);
1595           }
1596           else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
1597             RESULT = new StringCall(fname, XPathParser.EmptyArgs);
1598           }
1599           else if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
1600             RESULT = new ConcatCall(fname, XPathParser.EmptyArgs);
1601           }
1602           else if (fname == parser.getQNameIgnoreDefaultNs("true")) {
1603             RESULT = new BooleanExpr(true);
1604           }
1605           else if (fname == parser.getQNameIgnoreDefaultNs("false")) {
1606             RESULT = new BooleanExpr(false);
1607           }


1623           else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
1624             RESULT = new LocalNameCall(fname);
1625           }
1626           else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
1627             RESULT = new NamespaceUriCall(fname);
1628           }
1629           else {
1630             RESULT = new FunctionCall(fname, XPathParser.EmptyArgs);
1631           }
1632 
1633               parser_result = new Symbol(16/*FunctionCall*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1634             }
1635           return parser_result;
1636 
1637           /*. . . . . . . . . . . . . . . . . . . .*/
1638           case 107: // VariableReference ::= DOLLAR VariableName
1639             {
1640               Expression RESULT = null;
1641                 int varNameleft = (parser_stack.get(parser_top-0)).left;
1642                 int varNameright = (parser_stack.get(parser_top-0)).right;
1643                 QName varName = (QName)((Symbol) parser_stack.get(parser_top-0)).value;
1644 
1645             // An empty qname prefix for a variable or parameter reference
1646             // should map to the null namespace and not the default URI.
1647             SyntaxTreeNode node = parser.lookupName(varName);
1648 
1649             if (node != null) {
1650                 if (node instanceof Variable) {
1651                     RESULT = new VariableRef((Variable)node);
1652                 }
1653                 else if (node instanceof Param) {
1654                     RESULT = new ParameterRef((Param)node);
1655                 }
1656                 else {
1657                     RESULT = new UnresolvedRef(varName);
1658                 }
1659             }
1660 
1661             if (node == null) {
1662                 RESULT = new UnresolvedRef(varName);
1663             }
1664 
1665               parser_result = new Symbol(15/*VariableReference*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1666             }
1667           return parser_result;
1668 
1669           /*. . . . . . . . . . . . . . . . . . . .*/
1670           case 106: // PrimaryExpr ::= FunctionCall
1671             {
1672               Expression RESULT = null;
1673                 int fcleft = (parser_stack.get(parser_top-0)).left;
1674                 int fcright = (parser_stack.get(parser_top-0)).right;
1675                 Expression fc = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
1676                  RESULT = fc;
1677               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1678             }
1679           return parser_result;
1680 
1681           /*. . . . . . . . . . . . . . . . . . . .*/
1682           case 105: // PrimaryExpr ::= REAL
1683             {
1684               Expression RESULT = null;
1685                 int numleft = (parser_stack.get(parser_top-0)).left;
1686                 int numright = (parser_stack.get(parser_top-0)).right;
1687                 Double num = (Double)((Symbol) parser_stack.get(parser_top-0)).value;
1688                  RESULT = new RealExpr(num.doubleValue());
1689               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1690             }
1691           return parser_result;
1692 
1693           /*. . . . . . . . . . . . . . . . . . . .*/
1694           case 104: // PrimaryExpr ::= INT
1695             {
1696               Expression RESULT = null;
1697                 int numleft = (parser_stack.get(parser_top-0)).left;
1698                 int numright = (parser_stack.get(parser_top-0)).right;
1699                 Long num = (Long)((Symbol) parser_stack.get(parser_top-0)).value;
1700 
1701            long value = num.longValue();
1702            if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
1703                 RESULT = new RealExpr(value);
1704            }
1705            else {
1706                if (num.doubleValue() == -0)
1707                    RESULT = new RealExpr(num.doubleValue());
1708                else if (num.intValue() == 0)
1709                    RESULT = new IntExpr(num.intValue());
1710                else if (num.doubleValue() == 0.0)
1711                    RESULT = new RealExpr(num.doubleValue());
1712                else
1713                    RESULT = new IntExpr(num.intValue());
1714            }
1715 
1716               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1717             }
1718           return parser_result;
1719 
1720           /*. . . . . . . . . . . . . . . . . . . .*/
1721           case 103: // PrimaryExpr ::= Literal
1722             {
1723               Expression RESULT = null;
1724                 int stringleft = (parser_stack.get(parser_top-0)).left;
1725                 int stringright = (parser_stack.get(parser_top-0)).right;
1726                 String string = (String)((Symbol) parser_stack.get(parser_top-0)).value;
1727 
1728         /*
1729         * If the string appears to have the syntax of a QName, store
1730         * namespace info in the literal expression. This is used for
1731         * element-available and function-available functions, among
1732         * others. Also, the default namespace must be ignored.
1733         */
1734         String namespace = null;
1735         final int index = string.lastIndexOf(':');
1736 
1737         if (index > 0) {
1738             final String prefix = string.substring(0, index);
1739             namespace = parser._symbolTable.lookupNamespace(prefix);
1740         }
1741         RESULT = (namespace == null) ? new LiteralExpr(string)
1742                      : new LiteralExpr(string, namespace);
1743 
1744               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1745             }
1746           return parser_result;
1747 
1748           /*. . . . . . . . . . . . . . . . . . . .*/
1749           case 102: // PrimaryExpr ::= LPAREN Expr RPAREN
1750             {
1751               Expression RESULT = null;
1752                 int exleft = (parser_stack.get(parser_top-1)).left;
1753                 int exright = (parser_stack.get(parser_top-1)).right;
1754                 Expression ex = (Expression)((Symbol) parser_stack.get(parser_top-1)).value;
1755                  RESULT = ex;
1756               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1757             }
1758           return parser_result;
1759 
1760           /*. . . . . . . . . . . . . . . . . . . .*/
1761           case 101: // PrimaryExpr ::= VariableReference
1762             {
1763               Expression RESULT = null;
1764                 int vrleft = (parser_stack.get(parser_top-0)).left;
1765                 int vrright = (parser_stack.get(parser_top-0)).right;
1766                 Expression vr = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
1767                  RESULT = vr;
1768               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1769             }
1770           return parser_result;
1771 
1772           /*. . . . . . . . . . . . . . . . . . . .*/
1773           case 100: // FilterExpr ::= PrimaryExpr Predicates
1774             {
1775               Expression RESULT = null;
1776                 int primaryleft = (parser_stack.get(parser_top-1)).left;
1777                 int primaryright = (parser_stack.get(parser_top-1)).right;
1778                 Expression primary = (Expression)((Symbol) parser_stack.get(parser_top-1)).value;
1779                 int ppleft = (parser_stack.get(parser_top-0)).left;
1780                 int ppright = (parser_stack.get(parser_top-0)).right;
1781                 @SuppressWarnings("unchecked")
1782                 List<Expression> pp = (ArrayList<Expression>)((Symbol) parser_stack.get(parser_top-0)).value;
1783                  RESULT = new FilterExpr(primary, pp);
1784               parser_result = new Symbol(6/*FilterExpr*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1785             }
1786           return parser_result;
1787 
1788           /*. . . . . . . . . . . . . . . . . . . .*/
1789           case 99: // FilterExpr ::= PrimaryExpr
1790             {
1791               Expression RESULT = null;
1792                 int primaryleft = (parser_stack.get(parser_top-0)).left;
1793                 int primaryright = (parser_stack.get(parser_top-0)).right;
1794                 Expression primary = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
1795                  RESULT = primary;
1796               parser_result = new Symbol(6/*FilterExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1797             }
1798           return parser_result;
1799 
1800           /*. . . . . . . . . . . . . . . . . . . .*/
1801           case 98: // AbbreviatedStep ::= DDOT
1802             {
1803               Expression RESULT = null;
1804                  RESULT = new Step(Axis.PARENT, NodeTest.ANODE, null);
1805               parser_result = new Symbol(20/*AbbreviatedStep*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1806             }
1807           return parser_result;
1808 
1809           /*. . . . . . . . . . . . . . . . . . . .*/
1810           case 97: // AbbreviatedStep ::= DOT
1811             {
1812               Expression RESULT = null;
1813                  RESULT = new Step(Axis.SELF, NodeTest.ANODE, null);
1814               parser_result = new Symbol(20/*AbbreviatedStep*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);


1930                  RESULT = Integer.valueOf(Axis.ANCESTOR);
1931               parser_result = new Symbol(40/*AxisName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1932             }
1933           return parser_result;
1934 
1935           /*. . . . . . . . . . . . . . . . . . . .*/
1936           case 83: // AxisSpecifier ::= ATSIGN
1937             {
1938               Integer RESULT = null;
1939                  RESULT = Integer.valueOf(Axis.ATTRIBUTE);
1940               parser_result = new Symbol(41/*AxisSpecifier*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1941             }
1942           return parser_result;
1943 
1944           /*. . . . . . . . . . . . . . . . . . . .*/
1945           case 82: // AxisSpecifier ::= AxisName DCOLON
1946             {
1947               Integer RESULT = null;
1948                 int anleft = (parser_stack.get(parser_top-1)).left;
1949                 int anright = (parser_stack.get(parser_top-1)).right;
1950                 Integer an = (Integer)((Symbol) parser_stack.get(parser_top-1)).value;
1951                  RESULT = an;
1952               parser_result = new Symbol(41/*AxisSpecifier*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1953             }
1954           return parser_result;
1955 
1956           /*. . . . . . . . . . . . . . . . . . . .*/
1957           case 81: // Step ::= AbbreviatedStep
1958             {
1959               Expression RESULT = null;
1960                 int abbrevleft = (parser_stack.get(parser_top-0)).left;
1961                 int abbrevright = (parser_stack.get(parser_top-0)).right;
1962                 Expression abbrev = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
1963                  RESULT = abbrev;
1964               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1965             }
1966           return parser_result;
1967 
1968           /*. . . . . . . . . . . . . . . . . . . .*/
1969           case 80: // Step ::= AxisSpecifier NodeTest
1970             {
1971               Expression RESULT = null;
1972                 int axisleft = (parser_stack.get(parser_top-1)).left;
1973                 int axisright = (parser_stack.get(parser_top-1)).right;
1974                 Integer axis = (Integer)((Symbol) parser_stack.get(parser_top-1)).value;
1975                 int ntestleft = (parser_stack.get(parser_top-0)).left;
1976                 int ntestright = (parser_stack.get(parser_top-0)).right;
1977                 Object ntest = (Object)((Symbol) parser_stack.get(parser_top-0)).value;
1978                  RESULT = new Step(axis.intValue(),
1979                              parser.findNodeType(axis.intValue(), ntest),
1980                              null);
1981 
1982               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1983             }
1984           return parser_result;
1985 
1986           /*. . . . . . . . . . . . . . . . . . . .*/
1987           case 79: // Step ::= AxisSpecifier NodeTest Predicates
1988             {
1989               Expression RESULT = null;
1990                 int axisleft = (parser_stack.get(parser_top-2)).left;
1991                 int axisright = (parser_stack.get(parser_top-2)).right;
1992                 Integer axis = (Integer)((Symbol) parser_stack.get(parser_top-2)).value;
1993                 int ntestleft = (parser_stack.get(parser_top-1)).left;
1994                 int ntestright = (parser_stack.get(parser_top-1)).right;
1995                 Object ntest = (Object)((Symbol) parser_stack.get(parser_top-1)).value;
1996                 int ppleft = (parser_stack.get(parser_top-0)).left;
1997                 int ppright = (parser_stack.get(parser_top-0)).right;
1998                 @SuppressWarnings("unchecked")
1999                 List<Predicate> pp = (ArrayList<Predicate>)((Symbol) parser_stack.get(parser_top-0)).value;
2000                  RESULT = new Step(axis.intValue(),
2001                              parser.findNodeType(axis.intValue(), ntest),
2002                              pp);
2003 
2004               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2005             }
2006           return parser_result;
2007 
2008           /*. . . . . . . . . . . . . . . . . . . .*/
2009           case 78: // Step ::= NodeTest Predicates
2010             {
2011               Expression RESULT = null;
2012                 int ntestleft = (parser_stack.get(parser_top-1)).left;
2013                 int ntestright = (parser_stack.get(parser_top-1)).right;
2014                 Object ntest = (Object)((Symbol) parser_stack.get(parser_top-1)).value;
2015                 int ppleft = (parser_stack.get(parser_top-0)).left;
2016                 int ppright = (parser_stack.get(parser_top-0)).right;
2017                 @SuppressWarnings("unchecked")
2018                 List<Predicate> pp = (ArrayList<Predicate>)((Symbol) parser_stack.get(parser_top-0)).value;
2019 
2020             if (ntest instanceof Step) {
2021                 Step step = (Step)ntest;
2022                 step.addPredicates(pp);
2023                 RESULT = (Step)ntest;
2024             }
2025             else {
2026                 RESULT = new Step(Axis.CHILD,
2027                              parser.findNodeType(Axis.CHILD, ntest), pp);
2028             }
2029 
2030               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2031             }
2032           return parser_result;
2033 
2034           /*. . . . . . . . . . . . . . . . . . . .*/
2035           case 77: // Step ::= NodeTest
2036             {
2037               Expression RESULT = null;
2038                 int ntestleft = (parser_stack.get(parser_top-0)).left;
2039                 int ntestright = (parser_stack.get(parser_top-0)).right;
2040                 Object ntest = (Object)((Symbol) parser_stack.get(parser_top-0)).value;
2041 
2042             if (ntest instanceof Step) {
2043                 RESULT = (Step)ntest;
2044             }
2045             else {
2046                 RESULT = new Step(Axis.CHILD,
2047                              parser.findNodeType(Axis.CHILD, ntest),
2048                              null);
2049             }
2050 
2051               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2052             }
2053           return parser_result;
2054 
2055           /*. . . . . . . . . . . . . . . . . . . .*/
2056           case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath
2057             {
2058               Expression RESULT = null;
2059                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2060                 int rlpright = (parser_stack.get(parser_top-0)).right;
2061                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2062 
2063            //
2064            // Expand '//' into '/descendant-or-self::node()/' or
2065            // into /descendant-or-self::*/
2066            //
2067            int nodeType = DOM.NO_TYPE;
2068            if (rlp instanceof Step &&
2069                parser.isElementAxis(((Step) rlp).getAxis()))
2070            {
2071                nodeType = DTM.ELEMENT_NODE;
2072            }
2073            final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
2074            RESULT = new AbsoluteLocationPath(parser.insertStep(step,
2075                                 (RelativeLocationPath) rlp));
2076 
2077               parser_result = new Symbol(24/*AbbreviatedAbsoluteLocationPath*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2078             }
2079           return parser_result;
2080 
2081           /*. . . . . . . . . . . . . . . . . . . .*/
2082           case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step
2083             {
2084               Expression RESULT = null;
2085                 int rlpleft = (parser_stack.get(parser_top-2)).left;
2086                 int rlpright = (parser_stack.get(parser_top-2)).right;
2087                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2088                 int stepleft = (parser_stack.get(parser_top-0)).left;
2089                 int stepright = (parser_stack.get(parser_top-0)).right;
2090                 Expression step = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2091 
2092            final Step right  = (Step)step;
2093            final int  axis   = right.getAxis();
2094            final int  type   = right.getNodeType();
2095            final List<Predicate> predicates = right.getPredicates();
2096 
2097            if ((axis == Axis.CHILD) && (type != NodeTest.ATTRIBUTE)) {
2098                // Compress './/child:E' into 'descendant::E' - if possible
2099                if (predicates == null) {
2100                    right.setAxis(Axis.DESCENDANT);
2101                    if (rlp instanceof Step && ((Step)rlp).isAbbreviatedDot()) {
2102                        RESULT = right;
2103                    }
2104                    else {
2105                        // Expand 'rlp//child::E' into 'rlp/descendant::E'
2106                        RelativeLocationPath left = (RelativeLocationPath)rlp;
2107                        RESULT = new ParentLocationPath(left, right);
2108                    }
2109                }
2110                else {


2134            }
2135            else {
2136                // Expand 'rlp//step' -> 'rlp/descendant-or-self::node()/step'
2137                RelativeLocationPath left = (RelativeLocationPath)rlp;
2138                Step middle = new Step(Axis.DESCENDANTORSELF,
2139                     DOM.NO_TYPE, null);
2140                ParentLocationPath ppl = new ParentLocationPath(middle, right);
2141                RESULT = new ParentLocationPath(left, ppl);
2142            }
2143 
2144               parser_result = new Symbol(22/*AbbreviatedRelativeLocationPath*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2145             }
2146           return parser_result;
2147 
2148           /*. . . . . . . . . . . . . . . . . . . .*/
2149           case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath
2150             {
2151               Expression RESULT = null;
2152                 int aalpleft = (parser_stack.get(parser_top-0)).left;
2153                 int aalpright = (parser_stack.get(parser_top-0)).right;
2154                 Expression aalp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2155                  RESULT = aalp;
2156               parser_result = new Symbol(23/*AbsoluteLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2157             }
2158           return parser_result;
2159 
2160           /*. . . . . . . . . . . . . . . . . . . .*/
2161           case 73: // AbsoluteLocationPath ::= SLASH RelativeLocationPath
2162             {
2163               Expression RESULT = null;
2164                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2165                 int rlpright = (parser_stack.get(parser_top-0)).right;
2166                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2167                  RESULT = new AbsoluteLocationPath(rlp);
2168               parser_result = new Symbol(23/*AbsoluteLocationPath*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2169             }
2170           return parser_result;
2171 
2172           /*. . . . . . . . . . . . . . . . . . . .*/
2173           case 72: // AbsoluteLocationPath ::= SLASH
2174             {
2175               Expression RESULT = null;
2176                  RESULT = new AbsoluteLocationPath();
2177               parser_result = new Symbol(23/*AbsoluteLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2178             }
2179           return parser_result;
2180 
2181           /*. . . . . . . . . . . . . . . . . . . .*/
2182           case 71: // RelativeLocationPath ::= AbbreviatedRelativeLocationPath
2183             {
2184               Expression RESULT = null;
2185                 int arlpleft = (parser_stack.get(parser_top-0)).left;
2186                 int arlpright = (parser_stack.get(parser_top-0)).right;
2187                 Expression arlp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2188                  RESULT = arlp;
2189               parser_result = new Symbol(21/*RelativeLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2190             }
2191           return parser_result;
2192 
2193           /*. . . . . . . . . . . . . . . . . . . .*/
2194           case 70: // RelativeLocationPath ::= RelativeLocationPath SLASH Step
2195             {
2196               Expression RESULT = null;
2197                 int rlpleft = (parser_stack.get(parser_top-2)).left;
2198                 int rlpright = (parser_stack.get(parser_top-2)).right;
2199                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2200                 int stepleft = (parser_stack.get(parser_top-0)).left;
2201                 int stepright = (parser_stack.get(parser_top-0)).right;
2202                 Expression step = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2203 
2204         if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
2205               RESULT = step;       // Remove './' from the middle
2206         }
2207         else if (((Step) step).isAbbreviatedDot()) {
2208               RESULT = rlp;        // Remove '/.' from the end
2209         }
2210         else {
2211              RESULT =
2212                 new ParentLocationPath((RelativeLocationPath) rlp, step);
2213            }
2214 
2215               parser_result = new Symbol(21/*RelativeLocationPath*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2216             }
2217           return parser_result;
2218 
2219           /*. . . . . . . . . . . . . . . . . . . .*/
2220           case 69: // RelativeLocationPath ::= Step
2221             {
2222               Expression RESULT = null;
2223                 int stepleft = (parser_stack.get(parser_top-0)).left;
2224                 int stepright = (parser_stack.get(parser_top-0)).right;
2225                 Expression step = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2226                  RESULT = step;
2227               parser_result = new Symbol(21/*RelativeLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2228             }
2229           return parser_result;
2230 
2231           /*. . . . . . . . . . . . . . . . . . . .*/
2232           case 68: // LocationPath ::= AbsoluteLocationPath
2233             {
2234               Expression RESULT = null;
2235                 int alpleft = (parser_stack.get(parser_top-0)).left;
2236                 int alpright = (parser_stack.get(parser_top-0)).right;
2237                 Expression alp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2238                  RESULT = alp;
2239               parser_result = new Symbol(4/*LocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2240             }
2241           return parser_result;
2242 
2243           /*. . . . . . . . . . . . . . . . . . . .*/
2244           case 67: // LocationPath ::= RelativeLocationPath
2245             {
2246               Expression RESULT = null;
2247                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2248                 int rlpright = (parser_stack.get(parser_top-0)).right;
2249                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2250                  RESULT = rlp;
2251               parser_result = new Symbol(4/*LocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2252             }
2253           return parser_result;
2254 
2255           /*. . . . . . . . . . . . . . . . . . . .*/
2256           case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath
2257             {
2258               Expression RESULT = null;
2259                 int fexpleft = (parser_stack.get(parser_top-2)).left;
2260                 int fexpright = (parser_stack.get(parser_top-2)).right;
2261                 Expression fexp = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2262                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2263                 int rlpright = (parser_stack.get(parser_top-0)).right;
2264                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2265 
2266            //
2267            // Expand '//' into '/descendant-or-self::node()/' or
2268            // into /descendant-or-self::*/
2269            //
2270            int nodeType = DOM.NO_TYPE;
2271            if (rlp instanceof Step &&
2272                parser.isElementAxis(((Step) rlp).getAxis()))
2273            {
2274                nodeType = DTM.ELEMENT_NODE;
2275            }
2276            final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
2277            FilterParentPath fpp = new FilterParentPath(fexp, step);
2278            fpp = new FilterParentPath(fpp, rlp);
2279            if (fexp instanceof KeyCall == false) {
2280                fpp.setDescendantAxis();
2281            }
2282            RESULT = fpp;
2283 
2284               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2285             }
2286           return parser_result;
2287 
2288           /*. . . . . . . . . . . . . . . . . . . .*/
2289           case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath
2290             {
2291               Expression RESULT = null;
2292                 int fexpleft = (parser_stack.get(parser_top-2)).left;
2293                 int fexpright = (parser_stack.get(parser_top-2)).right;
2294                 Expression fexp = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2295                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2296                 int rlpright = (parser_stack.get(parser_top-0)).right;
2297                 Expression rlp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2298                  RESULT = new FilterParentPath(fexp, rlp);
2299               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2300             }
2301           return parser_result;
2302 
2303           /*. . . . . . . . . . . . . . . . . . . .*/
2304           case 64: // PathExpr ::= FilterExpr
2305             {
2306               Expression RESULT = null;
2307                 int fexpleft = (parser_stack.get(parser_top-0)).left;
2308                 int fexpright = (parser_stack.get(parser_top-0)).right;
2309                 Expression fexp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2310                  RESULT = fexp;
2311               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2312             }
2313           return parser_result;
2314 
2315           /*. . . . . . . . . . . . . . . . . . . .*/
2316           case 63: // PathExpr ::= LocationPath
2317             {
2318               Expression RESULT = null;
2319                 int lpleft = (parser_stack.get(parser_top-0)).left;
2320                 int lpright = (parser_stack.get(parser_top-0)).right;
2321                 Expression lp = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2322                  RESULT = lp;
2323               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2324             }
2325           return parser_result;
2326 
2327           /*. . . . . . . . . . . . . . . . . . . .*/
2328           case 62: // UnionExpr ::= PathExpr VBAR UnionExpr
2329             {
2330               Expression RESULT = null;
2331                 int peleft = (parser_stack.get(parser_top-2)).left;
2332                 int peright = (parser_stack.get(parser_top-2)).right;
2333                 Expression pe = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2334                 int restleft = (parser_stack.get(parser_top-0)).left;
2335                 int restright = (parser_stack.get(parser_top-0)).right;
2336                 Expression rest = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2337                  RESULT = new UnionPathExpr(pe, rest);
2338               parser_result = new Symbol(18/*UnionExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2339             }
2340           return parser_result;
2341 
2342           /*. . . . . . . . . . . . . . . . . . . .*/
2343           case 61: // UnionExpr ::= PathExpr
2344             {
2345               Expression RESULT = null;
2346                 int peleft = (parser_stack.get(parser_top-0)).left;
2347                 int peright = (parser_stack.get(parser_top-0)).right;
2348                 Expression pe = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2349                  RESULT = pe;
2350               parser_result = new Symbol(18/*UnionExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2351             }
2352           return parser_result;
2353 
2354           /*. . . . . . . . . . . . . . . . . . . .*/
2355           case 60: // UnaryExpr ::= MINUS UnaryExpr
2356             {
2357               Expression RESULT = null;
2358                 int ueleft = (parser_stack.get(parser_top-0)).left;
2359                 int ueright = (parser_stack.get(parser_top-0)).right;
2360                 Expression ue = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2361                  RESULT = new UnaryOpExpr(ue);
2362               parser_result = new Symbol(14/*UnaryExpr*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2363             }
2364           return parser_result;
2365 
2366           /*. . . . . . . . . . . . . . . . . . . .*/
2367           case 59: // UnaryExpr ::= UnionExpr
2368             {
2369               Expression RESULT = null;
2370                 int ueleft = (parser_stack.get(parser_top-0)).left;
2371                 int ueright = (parser_stack.get(parser_top-0)).right;
2372                 Expression ue = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2373                  RESULT = ue;
2374               parser_result = new Symbol(14/*UnaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2375             }
2376           return parser_result;
2377 
2378           /*. . . . . . . . . . . . . . . . . . . .*/
2379           case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr
2380             {
2381               Expression RESULT = null;
2382                 int meleft = (parser_stack.get(parser_top-2)).left;
2383                 int meright = (parser_stack.get(parser_top-2)).right;
2384                 Expression me = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2385                 int ueleft = (parser_stack.get(parser_top-0)).left;
2386                 int ueright = (parser_stack.get(parser_top-0)).right;
2387                 Expression ue = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2388                  RESULT = new BinOpExpr(BinOpExpr.MOD, me, ue);
2389               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2390             }
2391           return parser_result;
2392 
2393           /*. . . . . . . . . . . . . . . . . . . .*/
2394           case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr
2395             {
2396               Expression RESULT = null;
2397                 int meleft = (parser_stack.get(parser_top-2)).left;
2398                 int meright = (parser_stack.get(parser_top-2)).right;
2399                 Expression me = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2400                 int ueleft = (parser_stack.get(parser_top-0)).left;
2401                 int ueright = (parser_stack.get(parser_top-0)).right;
2402                 Expression ue = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2403                  RESULT = new BinOpExpr(BinOpExpr.DIV, me, ue);
2404               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2405             }
2406           return parser_result;
2407 
2408           /*. . . . . . . . . . . . . . . . . . . .*/
2409           case 56: // MultiplicativeExpr ::= MultiplicativeExpr STAR UnaryExpr
2410             {
2411               Expression RESULT = null;
2412                 int meleft = (parser_stack.get(parser_top-2)).left;
2413                 int meright = (parser_stack.get(parser_top-2)).right;
2414                 Expression me = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2415                 int ueleft = (parser_stack.get(parser_top-0)).left;
2416                 int ueright = (parser_stack.get(parser_top-0)).right;
2417                 Expression ue = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2418                  RESULT = new BinOpExpr(BinOpExpr.TIMES, me, ue);
2419               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2420             }
2421           return parser_result;
2422 
2423           /*. . . . . . . . . . . . . . . . . . . .*/
2424           case 55: // MultiplicativeExpr ::= UnaryExpr
2425             {
2426               Expression RESULT = null;
2427                 int ueleft = (parser_stack.get(parser_top-0)).left;
2428                 int ueright = (parser_stack.get(parser_top-0)).right;
2429                 Expression ue = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2430                  RESULT = ue;
2431               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2432             }
2433           return parser_result;
2434 
2435           /*. . . . . . . . . . . . . . . . . . . .*/
2436           case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr
2437             {
2438               Expression RESULT = null;
2439                 int aeleft = (parser_stack.get(parser_top-2)).left;
2440                 int aeright = (parser_stack.get(parser_top-2)).right;
2441                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2442                 int meleft = (parser_stack.get(parser_top-0)).left;
2443                 int meright = (parser_stack.get(parser_top-0)).right;
2444                 Expression me = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2445                  RESULT = new BinOpExpr(BinOpExpr.MINUS, ae, me);
2446               parser_result = new Symbol(12/*AdditiveExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2447             }
2448           return parser_result;
2449 
2450           /*. . . . . . . . . . . . . . . . . . . .*/
2451           case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr
2452             {
2453               Expression RESULT = null;
2454                 int aeleft = (parser_stack.get(parser_top-2)).left;
2455                 int aeright = (parser_stack.get(parser_top-2)).right;
2456                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2457                 int meleft = (parser_stack.get(parser_top-0)).left;
2458                 int meright = (parser_stack.get(parser_top-0)).right;
2459                 Expression me = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2460                  RESULT = new BinOpExpr(BinOpExpr.PLUS, ae, me);
2461               parser_result = new Symbol(12/*AdditiveExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2462             }
2463           return parser_result;
2464 
2465           /*. . . . . . . . . . . . . . . . . . . .*/
2466           case 52: // AdditiveExpr ::= MultiplicativeExpr
2467             {
2468               Expression RESULT = null;
2469                 int meleft = (parser_stack.get(parser_top-0)).left;
2470                 int meright = (parser_stack.get(parser_top-0)).right;
2471                 Expression me = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2472                  RESULT = me;
2473               parser_result = new Symbol(12/*AdditiveExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2474             }
2475           return parser_result;
2476 
2477           /*. . . . . . . . . . . . . . . . . . . .*/
2478           case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr
2479             {
2480               Expression RESULT = null;
2481                 int releft = (parser_stack.get(parser_top-2)).left;
2482                 int reright = (parser_stack.get(parser_top-2)).right;
2483                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2484                 int aeleft = (parser_stack.get(parser_top-0)).left;
2485                 int aeright = (parser_stack.get(parser_top-0)).right;
2486                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2487                  RESULT = new RelationalExpr(Operators.GE, re, ae);
2488               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2489             }
2490           return parser_result;
2491 
2492           /*. . . . . . . . . . . . . . . . . . . .*/
2493           case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr
2494             {
2495               Expression RESULT = null;
2496                 int releft = (parser_stack.get(parser_top-2)).left;
2497                 int reright = (parser_stack.get(parser_top-2)).right;
2498                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2499                 int aeleft = (parser_stack.get(parser_top-0)).left;
2500                 int aeright = (parser_stack.get(parser_top-0)).right;
2501                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2502                  RESULT = new RelationalExpr(Operators.LE, re, ae);
2503               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2504             }
2505           return parser_result;
2506 
2507           /*. . . . . . . . . . . . . . . . . . . .*/
2508           case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr
2509             {
2510               Expression RESULT = null;
2511                 int releft = (parser_stack.get(parser_top-2)).left;
2512                 int reright = (parser_stack.get(parser_top-2)).right;
2513                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2514                 int aeleft = (parser_stack.get(parser_top-0)).left;
2515                 int aeright = (parser_stack.get(parser_top-0)).right;
2516                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2517                  RESULT = new RelationalExpr(Operators.GT, re, ae);
2518               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2519             }
2520           return parser_result;
2521 
2522           /*. . . . . . . . . . . . . . . . . . . .*/
2523           case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr
2524             {
2525               Expression RESULT = null;
2526                 int releft = (parser_stack.get(parser_top-2)).left;
2527                 int reright = (parser_stack.get(parser_top-2)).right;
2528                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2529                 int aeleft = (parser_stack.get(parser_top-0)).left;
2530                 int aeright = (parser_stack.get(parser_top-0)).right;
2531                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2532                  RESULT = new RelationalExpr(Operators.LT, re, ae);
2533               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2534             }
2535           return parser_result;
2536 
2537           /*. . . . . . . . . . . . . . . . . . . .*/
2538           case 47: // RelationalExpr ::= AdditiveExpr
2539             {
2540               Expression RESULT = null;
2541                 int aeleft = (parser_stack.get(parser_top-0)).left;
2542                 int aeright = (parser_stack.get(parser_top-0)).right;
2543                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2544                  RESULT = ae;
2545               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2546             }
2547           return parser_result;
2548 
2549           /*. . . . . . . . . . . . . . . . . . . .*/
2550           case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr
2551             {
2552               Expression RESULT = null;
2553                 int eeleft = (parser_stack.get(parser_top-2)).left;
2554                 int eeright = (parser_stack.get(parser_top-2)).right;
2555                 Expression ee = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2556                 int releft = (parser_stack.get(parser_top-0)).left;
2557                 int reright = (parser_stack.get(parser_top-0)).right;
2558                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2559                  RESULT = new EqualityExpr(Operators.NE, ee, re);
2560               parser_result = new Symbol(10/*EqualityExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2561             }
2562           return parser_result;
2563 
2564           /*. . . . . . . . . . . . . . . . . . . .*/
2565           case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr
2566             {
2567               Expression RESULT = null;
2568                 int eeleft = (parser_stack.get(parser_top-2)).left;
2569                 int eeright = (parser_stack.get(parser_top-2)).right;
2570                 Expression ee = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2571                 int releft = (parser_stack.get(parser_top-0)).left;
2572                 int reright = (parser_stack.get(parser_top-0)).right;
2573                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2574                  RESULT = new EqualityExpr(Operators.EQ, ee, re);
2575               parser_result = new Symbol(10/*EqualityExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2576             }
2577           return parser_result;
2578 
2579           /*. . . . . . . . . . . . . . . . . . . .*/
2580           case 44: // EqualityExpr ::= RelationalExpr
2581             {
2582               Expression RESULT = null;
2583                 int releft = (parser_stack.get(parser_top-0)).left;
2584                 int reright = (parser_stack.get(parser_top-0)).right;
2585                 Expression re = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2586                  RESULT = re;
2587               parser_result = new Symbol(10/*EqualityExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2588             }
2589           return parser_result;
2590 
2591           /*. . . . . . . . . . . . . . . . . . . .*/
2592           case 43: // AndExpr ::= AndExpr AND EqualityExpr
2593             {
2594               Expression RESULT = null;
2595                 int aeleft = (parser_stack.get(parser_top-2)).left;
2596                 int aeright = (parser_stack.get(parser_top-2)).right;
2597                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2598                 int eeleft = (parser_stack.get(parser_top-0)).left;
2599                 int eeright = (parser_stack.get(parser_top-0)).right;
2600                 Expression ee = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2601                  RESULT = new LogicalExpr(LogicalExpr.AND, ae, ee);
2602               parser_result = new Symbol(9/*AndExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2603             }
2604           return parser_result;
2605 
2606           /*. . . . . . . . . . . . . . . . . . . .*/
2607           case 42: // AndExpr ::= EqualityExpr
2608             {
2609               Expression RESULT = null;
2610                 int eleft = (parser_stack.get(parser_top-0)).left;
2611                 int eright = (parser_stack.get(parser_top-0)).right;
2612                 Expression e = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2613                  RESULT = e;
2614               parser_result = new Symbol(9/*AndExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2615             }
2616           return parser_result;
2617 
2618           /*. . . . . . . . . . . . . . . . . . . .*/
2619           case 41: // OrExpr ::= OrExpr OR AndExpr
2620             {
2621               Expression RESULT = null;
2622                 int oeleft = (parser_stack.get(parser_top-2)).left;
2623                 int oeright = (parser_stack.get(parser_top-2)).right;
2624                 Expression oe = (Expression)((Symbol) parser_stack.get(parser_top-2)).value;
2625                 int aeleft = (parser_stack.get(parser_top-0)).left;
2626                 int aeright = (parser_stack.get(parser_top-0)).right;
2627                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2628                  RESULT = new LogicalExpr(LogicalExpr.OR, oe, ae);
2629               parser_result = new Symbol(8/*OrExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2630             }
2631           return parser_result;
2632 
2633           /*. . . . . . . . . . . . . . . . . . . .*/
2634           case 40: // OrExpr ::= AndExpr
2635             {
2636               Expression RESULT = null;
2637                 int aeleft = (parser_stack.get(parser_top-0)).left;
2638                 int aeright = (parser_stack.get(parser_top-0)).right;
2639                 Expression ae = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2640                  RESULT = ae;
2641               parser_result = new Symbol(8/*OrExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2642             }
2643           return parser_result;
2644 
2645           /*. . . . . . . . . . . . . . . . . . . .*/
2646           case 39: // Expr ::= OrExpr
2647             {
2648               Expression RESULT = null;
2649                 int exleft = (parser_stack.get(parser_top-0)).left;
2650                 int exright = (parser_stack.get(parser_top-0)).right;
2651                 Expression ex = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2652                  RESULT = ex;
2653               parser_result = new Symbol(2/*Expr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2654             }
2655           return parser_result;
2656 
2657           /*. . . . . . . . . . . . . . . . . . . .*/
2658           case 38: // Predicate ::= LBRACK Expr RBRACK
2659             {
2660               Expression RESULT = null;
2661                 int eleft = (parser_stack.get(parser_top-1)).left;
2662                 int eright = (parser_stack.get(parser_top-1)).right;
2663                 Expression e = (Expression)((Symbol) parser_stack.get(parser_top-1)).value;
2664 
2665                 RESULT = new Predicate(e);
2666 
2667               parser_result = new Symbol(5/*Predicate*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2668             }
2669           return parser_result;
2670 
2671           /*. . . . . . . . . . . . . . . . . . . .*/
2672           case 37: // Predicates ::= Predicate Predicates
2673             {
2674                 List<Expression> RESULT = null;
2675                 int pleft = (parser_stack.get(parser_top-1)).left;
2676                 int pright = (parser_stack.get(parser_top-1)).right;
2677                 Expression p = (Expression)((Symbol) parser_stack.get(parser_top-1)).value;
2678                 int ppleft = (parser_stack.get(parser_top-0)).left;
2679                 int ppright = (parser_stack.get(parser_top-0)).right;
2680                 @SuppressWarnings("unchecked")
2681                 List<Expression> pp = (ArrayList<Expression>)((Symbol) parser_stack.get(parser_top-0)).value;
2682                 pp.add(0, p); RESULT = pp;
2683               parser_result = new Symbol(35/*Predicates*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2684             }
2685           return parser_result;
2686 
2687           /*. . . . . . . . . . . . . . . . . . . .*/
2688           case 36: // Predicates ::= Predicate
2689             {
2690                 List<Expression> RESULT = null;
2691                 int pleft = (parser_stack.get(parser_top-0)).left;
2692                 int pright = (parser_stack.get(parser_top-0)).right;
2693                 Expression p = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
2694 
2695                 List<Expression> temp = new ArrayList<>();
2696                 temp.add(p);
2697                 RESULT = temp;
2698 
2699               parser_result = new Symbol(35/*Predicates*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2700             }
2701           return parser_result;
2702 
2703           /*. . . . . . . . . . . . . . . . . . . .*/
2704           case 35: // ChildOrAttributeAxisSpecifier ::= ATTRIBUTE DCOLON
2705             {
2706               Integer RESULT = null;
2707                  RESULT = Integer.valueOf(Axis.ATTRIBUTE);
2708               parser_result = new Symbol(42/*ChildOrAttributeAxisSpecifier*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2709             }
2710           return parser_result;
2711 
2712           /*. . . . . . . . . . . . . . . . . . . .*/
2713           case 34: // ChildOrAttributeAxisSpecifier ::= CHILD DCOLON


2716                  RESULT = Integer.valueOf(Axis.CHILD);
2717               parser_result = new Symbol(42/*ChildOrAttributeAxisSpecifier*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2718             }
2719           return parser_result;
2720 
2721           /*. . . . . . . . . . . . . . . . . . . .*/
2722           case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN
2723             {
2724               Integer RESULT = null;
2725                  RESULT = Integer.valueOf(Axis.ATTRIBUTE);
2726               parser_result = new Symbol(42/*ChildOrAttributeAxisSpecifier*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2727             }
2728           return parser_result;
2729 
2730           /*. . . . . . . . . . . . . . . . . . . .*/
2731           case 32: // NameTestPattern ::= QName
2732             {
2733               Object RESULT = null;
2734                 int qnleft = (parser_stack.get(parser_top-0)).left;
2735                 int qnright = (parser_stack.get(parser_top-0)).right;
2736                 QName qn = (QName)((Symbol) parser_stack.get(parser_top-0)).value;
2737                  RESULT = qn;
2738               parser_result = new Symbol(34/*NameTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2739             }
2740           return parser_result;
2741 
2742           /*. . . . . . . . . . . . . . . . . . . .*/
2743           case 31: // NameTestPattern ::= STAR
2744             {
2745               Object RESULT = null;
2746                  RESULT = null;
2747               parser_result = new Symbol(34/*NameTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2748             }
2749           return parser_result;
2750 
2751           /*. . . . . . . . . . . . . . . . . . . .*/
2752           case 30: // NodeTestPattern ::= PI
2753             {
2754               Object RESULT = null;
2755                  RESULT = Integer.valueOf(NodeTest.PI);
2756               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);


2773                  RESULT = Integer.valueOf(NodeTest.TEXT);
2774               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2775             }
2776           return parser_result;
2777 
2778           /*. . . . . . . . . . . . . . . . . . . .*/
2779           case 27: // NodeTestPattern ::= NODE
2780             {
2781               Object RESULT = null;
2782                  RESULT = Integer.valueOf(NodeTest.ANODE);
2783               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2784             }
2785           return parser_result;
2786 
2787           /*. . . . . . . . . . . . . . . . . . . .*/
2788           case 26: // NodeTestPattern ::= NameTestPattern
2789             {
2790               Object RESULT = null;
2791                 int ntleft = (parser_stack.get(parser_top-0)).left;
2792                 int ntright = (parser_stack.get(parser_top-0)).right;
2793                 Object nt = (Object)((Symbol) parser_stack.get(parser_top-0)).value;
2794                  RESULT = nt;
2795               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2796             }
2797           return parser_result;
2798 
2799           /*. . . . . . . . . . . . . . . . . . . .*/
2800           case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates
2801             {
2802               StepPattern RESULT = null;
2803                 int axisleft = (parser_stack.get(parser_top-2)).left;
2804                 int axisright = (parser_stack.get(parser_top-2)).right;
2805                 Integer axis = (Integer)((Symbol) parser_stack.get(parser_top-2)).value;
2806                 int pipleft = (parser_stack.get(parser_top-1)).left;
2807                 int pipright = (parser_stack.get(parser_top-1)).right;
2808                 StepPattern pip = (StepPattern)((Symbol) parser_stack.get(parser_top-1)).value;
2809                 int ppleft = (parser_stack.get(parser_top-0)).left;
2810                 int ppright = (parser_stack.get(parser_top-0)).right;
2811                 @SuppressWarnings("unchecked")
2812                 List<Predicate> pp = (ArrayList<Predicate>)((Symbol) parser_stack.get(parser_top-0)).value;
2813 
2814                // TODO: report error if axis is attribute
2815                RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp);
2816 
2817               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2818             }
2819           return parser_result;
2820 
2821           /*. . . . . . . . . . . . . . . . . . . .*/
2822           case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern
2823             {
2824               StepPattern RESULT = null;
2825                 int axisleft = (parser_stack.get(parser_top-1)).left;
2826                 int axisright = (parser_stack.get(parser_top-1)).right;
2827                 Integer axis = (Integer)((Symbol) parser_stack.get(parser_top-1)).value;
2828                 int pipleft = (parser_stack.get(parser_top-0)).left;
2829                 int pipright = (parser_stack.get(parser_top-0)).right;
2830                 StepPattern pip = (StepPattern)((Symbol) parser_stack.get(parser_top-0)).value;
2831 
2832                RESULT = pip;    // TODO: report error if axis is attribute
2833 
2834               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2835             }
2836           return parser_result;
2837 
2838           /*. . . . . . . . . . . . . . . . . . . .*/
2839           case 23: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern Predicates
2840             {
2841               StepPattern RESULT = null;
2842                 int axisleft = (parser_stack.get(parser_top-2)).left;
2843                 int axisright = (parser_stack.get(parser_top-2)).right;
2844                 Integer axis = (Integer)((Symbol) parser_stack.get(parser_top-2)).value;
2845                 int ntleft = (parser_stack.get(parser_top-1)).left;
2846                 int ntright = (parser_stack.get(parser_top-1)).right;
2847                 Object nt = (Object)((Symbol) parser_stack.get(parser_top-1)).value;
2848                 int ppleft = (parser_stack.get(parser_top-0)).left;
2849                 int ppright = (parser_stack.get(parser_top-0)).right;
2850                 @SuppressWarnings("unchecked")
2851                List<Predicate>pp = (ArrayList<Predicate>)((Symbol) parser_stack.get(parser_top-0)).value;
2852 
2853                RESULT = parser.createStepPattern(axis.intValue(), nt, pp);
2854 
2855               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2856             }
2857           return parser_result;
2858 
2859           /*. . . . . . . . . . . . . . . . . . . .*/
2860           case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern
2861             {
2862               StepPattern RESULT = null;
2863                 int axisleft = (parser_stack.get(parser_top-1)).left;
2864                 int axisright = (parser_stack.get(parser_top-1)).right;
2865                 Integer axis = (Integer)((Symbol) parser_stack.get(parser_top-1)).value;
2866                 int ntleft = (parser_stack.get(parser_top-0)).left;
2867                 int ntright = (parser_stack.get(parser_top-0)).right;
2868                 Object nt = (Object)((Symbol) parser_stack.get(parser_top-0)).value;
2869 
2870                RESULT = parser.createStepPattern(axis.intValue(), nt, null);
2871 
2872               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2873             }
2874           return parser_result;
2875 
2876           /*. . . . . . . . . . . . . . . . . . . .*/
2877           case 21: // StepPattern ::= ProcessingInstructionPattern Predicates
2878             {
2879               StepPattern RESULT = null;
2880                 int pipleft = (parser_stack.get(parser_top-1)).left;
2881                 int pipright = (parser_stack.get(parser_top-1)).right;
2882                 StepPattern pip = (StepPattern)((Symbol) parser_stack.get(parser_top-1)).value;
2883                 int ppleft = (parser_stack.get(parser_top-0)).left;
2884                 int ppright = (parser_stack.get(parser_top-0)).right;
2885                 @SuppressWarnings("unchecked")
2886                 List<Predicate> pp = (ArrayList<Predicate>)((Symbol) parser_stack.get(parser_top-0)).value;
2887                  RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp);
2888               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2889             }
2890           return parser_result;
2891 
2892           /*. . . . . . . . . . . . . . . . . . . .*/
2893           case 20: // StepPattern ::= ProcessingInstructionPattern
2894             {
2895               StepPattern RESULT = null;
2896                 int pipleft = (parser_stack.get(parser_top-0)).left;
2897                 int pipright = (parser_stack.get(parser_top-0)).right;
2898                 StepPattern pip = (StepPattern)((Symbol) parser_stack.get(parser_top-0)).value;
2899                  RESULT = pip;
2900               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2901             }
2902           return parser_result;
2903 
2904           /*. . . . . . . . . . . . . . . . . . . .*/
2905           case 19: // StepPattern ::= NodeTestPattern Predicates
2906             {
2907               StepPattern RESULT = null;
2908                 int ntleft = (parser_stack.get(parser_top-1)).left;
2909                 int ntright = (parser_stack.get(parser_top-1)).right;
2910                 Object nt = (Object)((Symbol) parser_stack.get(parser_top-1)).value;
2911                 int ppleft = (parser_stack.get(parser_top-0)).left;
2912                 int ppright = (parser_stack.get(parser_top-0)).right;
2913                 @SuppressWarnings("unchecked")
2914                 List<Predicate> pp = (ArrayList<Predicate>)((Symbol) parser_stack.get(parser_top-0)).value;
2915 
2916                 RESULT = parser.createStepPattern(Axis.CHILD, nt, pp);
2917 
2918               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2919             }
2920           return parser_result;
2921 
2922           /*. . . . . . . . . . . . . . . . . . . .*/
2923           case 18: // StepPattern ::= NodeTestPattern
2924             {
2925               StepPattern RESULT = null;
2926                 int ntleft = (parser_stack.get(parser_top-0)).left;
2927                 int ntright = (parser_stack.get(parser_top-0)).right;
2928                 Object nt = (Object)((Symbol) parser_stack.get(parser_top-0)).value;
2929 
2930                 RESULT = parser.createStepPattern(Axis.CHILD, nt, null);
2931 
2932               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2933             }
2934           return parser_result;
2935 
2936           /*. . . . . . . . . . . . . . . . . . . .*/
2937           case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern
2938             {
2939               RelativePathPattern RESULT = null;
2940                 int spleft = (parser_stack.get(parser_top-2)).left;
2941                 int spright = (parser_stack.get(parser_top-2)).right;
2942                 StepPattern sp = (StepPattern)((Symbol) parser_stack.get(parser_top-2)).value;
2943                 int rppleft = (parser_stack.get(parser_top-0)).left;
2944                 int rppright = (parser_stack.get(parser_top-0)).right;
2945                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
2946                  RESULT = new AncestorPattern(sp, rpp);
2947               parser_result = new Symbol(31/*RelativePathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2948             }
2949           return parser_result;
2950 
2951           /*. . . . . . . . . . . . . . . . . . . .*/
2952           case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern
2953             {
2954               RelativePathPattern RESULT = null;
2955                 int spleft = (parser_stack.get(parser_top-2)).left;
2956                 int spright = (parser_stack.get(parser_top-2)).right;
2957                 StepPattern sp = (StepPattern)((Symbol) parser_stack.get(parser_top-2)).value;
2958                 int rppleft = (parser_stack.get(parser_top-0)).left;
2959                 int rppright = (parser_stack.get(parser_top-0)).right;
2960                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
2961                  RESULT = new ParentPattern(sp, rpp);
2962               parser_result = new Symbol(31/*RelativePathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2963             }
2964           return parser_result;
2965 
2966           /*. . . . . . . . . . . . . . . . . . . .*/
2967           case 15: // RelativePathPattern ::= StepPattern
2968             {
2969               RelativePathPattern RESULT = null;
2970                 int spleft = (parser_stack.get(parser_top-0)).left;
2971                 int spright = (parser_stack.get(parser_top-0)).right;
2972                 StepPattern sp = (StepPattern)((Symbol) parser_stack.get(parser_top-0)).value;
2973                  RESULT = sp;
2974               parser_result = new Symbol(31/*RelativePathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2975             }
2976           return parser_result;
2977 
2978           /*. . . . . . . . . . . . . . . . . . . .*/
2979           case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN
2980             {
2981               StepPattern RESULT = null;
2982                 int lleft = (parser_stack.get(parser_top-1)).left;
2983                 int lright = (parser_stack.get(parser_top-1)).right;
2984                 String l = (String)((Symbol) parser_stack.get(parser_top-1)).value;
2985                  RESULT = new ProcessingInstructionPattern(l);
2986               parser_result = new Symbol(30/*ProcessingInstructionPattern*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2987             }
2988           return parser_result;
2989 
2990           /*. . . . . . . . . . . . . . . . . . . .*/
2991           case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN
2992             {
2993               IdKeyPattern RESULT = null;
2994                 int l1left = (parser_stack.get(parser_top-3)).left;
2995                 int l1right = (parser_stack.get(parser_top-3)).right;
2996                 String l1 = (String)((Symbol) parser_stack.get(parser_top-3)).value;
2997                 int l2left = (parser_stack.get(parser_top-1)).left;
2998                 int l2right = (parser_stack.get(parser_top-1)).right;
2999                 String l2 = (String)((Symbol) parser_stack.get(parser_top-1)).value;
3000                  RESULT = new KeyPattern(l1, l2);
3001               parser_result = new Symbol(27/*IdKeyPattern*/, (parser_stack.get(parser_top-5)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3002             }
3003           return parser_result;
3004 
3005           /*. . . . . . . . . . . . . . . . . . . .*/
3006           case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN
3007             {
3008               IdKeyPattern RESULT = null;
3009                 int lleft = (parser_stack.get(parser_top-1)).left;
3010                 int lright = (parser_stack.get(parser_top-1)).right;
3011                 String l = (String)((Symbol) parser_stack.get(parser_top-1)).value;
3012                  RESULT = new IdPattern(l);
3013                parser.setHasIdCall(true);
3014 
3015               parser_result = new Symbol(27/*IdKeyPattern*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3016             }
3017           return parser_result;
3018 
3019           /*. . . . . . . . . . . . . . . . . . . .*/
3020           case 11: // LocationPathPattern ::= RelativePathPattern
3021             {
3022               Pattern RESULT = null;
3023                 int rppleft = (parser_stack.get(parser_top-0)).left;
3024                 int rppright = (parser_stack.get(parser_top-0)).right;
3025                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
3026                  RESULT = rpp;
3027               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3028             }
3029           return parser_result;
3030 
3031           /*. . . . . . . . . . . . . . . . . . . .*/
3032           case 10: // LocationPathPattern ::= DSLASH RelativePathPattern
3033             {
3034               Pattern RESULT = null;
3035                 int rppleft = (parser_stack.get(parser_top-0)).left;
3036                 int rppright = (parser_stack.get(parser_top-0)).right;
3037                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
3038                  RESULT = new AncestorPattern(rpp);
3039               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3040             }
3041           return parser_result;
3042 
3043           /*. . . . . . . . . . . . . . . . . . . .*/
3044           case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern
3045             {
3046               Pattern RESULT = null;
3047                 int ikpleft = (parser_stack.get(parser_top-2)).left;
3048                 int ikpright = (parser_stack.get(parser_top-2)).right;
3049                 IdKeyPattern ikp = (IdKeyPattern)((Symbol) parser_stack.get(parser_top-2)).value;
3050                 int rppleft = (parser_stack.get(parser_top-0)).left;
3051                 int rppright = (parser_stack.get(parser_top-0)).right;
3052                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
3053                  RESULT = new AncestorPattern(ikp, rpp);
3054               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3055             }
3056           return parser_result;
3057 
3058           /*. . . . . . . . . . . . . . . . . . . .*/
3059           case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern
3060             {
3061               Pattern RESULT = null;
3062                 int ikpleft = (parser_stack.get(parser_top-2)).left;
3063                 int ikpright = (parser_stack.get(parser_top-2)).right;
3064                 IdKeyPattern ikp = (IdKeyPattern)((Symbol) parser_stack.get(parser_top-2)).value;
3065                 int rppleft = (parser_stack.get(parser_top-0)).left;
3066                 int rppright = (parser_stack.get(parser_top-0)).right;
3067                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
3068                  RESULT = new ParentPattern(ikp, rpp);
3069               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3070             }
3071           return parser_result;
3072 
3073           /*. . . . . . . . . . . . . . . . . . . .*/
3074           case 7: // LocationPathPattern ::= IdKeyPattern
3075             {
3076               Pattern RESULT = null;
3077                 int ikpleft = (parser_stack.get(parser_top-0)).left;
3078                 int ikpright = (parser_stack.get(parser_top-0)).right;
3079                 IdKeyPattern ikp = (IdKeyPattern)((Symbol) parser_stack.get(parser_top-0)).value;
3080                  RESULT = ikp;
3081               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3082             }
3083           return parser_result;
3084 
3085           /*. . . . . . . . . . . . . . . . . . . .*/
3086           case 6: // LocationPathPattern ::= SLASH RelativePathPattern
3087             {
3088               Pattern RESULT = null;
3089                 int rppleft = (parser_stack.get(parser_top-0)).left;
3090                 int rppright = (parser_stack.get(parser_top-0)).right;
3091                 RelativePathPattern rpp = (RelativePathPattern)((Symbol) parser_stack.get(parser_top-0)).value;
3092                  RESULT = new AbsolutePathPattern(rpp);
3093               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3094             }
3095           return parser_result;
3096 
3097           /*. . . . . . . . . . . . . . . . . . . .*/
3098           case 5: // LocationPathPattern ::= SLASH
3099             {
3100               Pattern RESULT = null;
3101                  RESULT = new AbsolutePathPattern(null);
3102               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3103             }
3104           return parser_result;
3105 
3106           /*. . . . . . . . . . . . . . . . . . . .*/
3107           case 4: // Pattern ::= LocationPathPattern VBAR Pattern
3108             {
3109               Pattern RESULT = null;
3110                 int lppleft = (parser_stack.get(parser_top-2)).left;
3111                 int lppright = (parser_stack.get(parser_top-2)).right;
3112                 Pattern lpp = (Pattern)((Symbol) parser_stack.get(parser_top-2)).value;
3113                 int pleft = (parser_stack.get(parser_top-0)).left;
3114                 int pright = (parser_stack.get(parser_top-0)).right;
3115                 Pattern p = (Pattern)((Symbol) parser_stack.get(parser_top-0)).value;
3116                  RESULT = new AlternativePattern(lpp, p);
3117               parser_result = new Symbol(28/*Pattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3118             }
3119           return parser_result;
3120 
3121           /*. . . . . . . . . . . . . . . . . . . .*/
3122           case 3: // Pattern ::= LocationPathPattern
3123             {
3124               Pattern RESULT = null;
3125                 int lppleft = (parser_stack.get(parser_top-0)).left;
3126                 int lppright = (parser_stack.get(parser_top-0)).right;
3127                 Pattern lpp = (Pattern)((Symbol) parser_stack.get(parser_top-0)).value;
3128                  RESULT = lpp;
3129               parser_result = new Symbol(28/*Pattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3130             }
3131           return parser_result;
3132 
3133           /*. . . . . . . . . . . . . . . . . . . .*/
3134           case 2: // TopLevel ::= EXPRESSION Expr
3135             {
3136               SyntaxTreeNode RESULT = null;
3137                 int exprleft = (parser_stack.get(parser_top-0)).left;
3138                 int exprright = (parser_stack.get(parser_top-0)).right;
3139                 Expression expr = (Expression)((Symbol) parser_stack.get(parser_top-0)).value;
3140                  RESULT = expr;
3141               parser_result = new Symbol(1/*TopLevel*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3142             }
3143           return parser_result;
3144 
3145           /*. . . . . . . . . . . . . . . . . . . .*/
3146           case 1: // TopLevel ::= PATTERN Pattern
3147             {
3148               SyntaxTreeNode RESULT = null;
3149                 int patternleft = (parser_stack.get(parser_top-0)).left;
3150                 int patternright = (parser_stack.get(parser_top-0)).right;
3151                 Pattern pattern = (Pattern)((Symbol) parser_stack.get(parser_top-0)).value;
3152                  RESULT = pattern;
3153               parser_result = new Symbol(1/*TopLevel*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3154             }
3155           return parser_result;
3156 
3157           /*. . . . . . . . . . . . . . . . . . . .*/
3158           case 0: // $START ::= TopLevel EOF
3159             {
3160               Object RESULT = null;
3161                 int start_valleft = (parser_stack.get(parser_top-1)).left;
3162                 int start_valright = (parser_stack.get(parser_top-1)).right;
3163                 SyntaxTreeNode start_val = (SyntaxTreeNode)((Symbol) parser_stack.get(parser_top-1)).value;
3164                 RESULT = start_val;
3165               parser_result = new Symbol(0/*$START*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3166             }
3167           /* ACCEPT */
3168           parser_parser.done_parsing();
3169           return parser_result;
3170 
3171           /* . . . . . .*/
3172           default:
3173             throw new Exception(
3174                "Invalid action number found in internal parse table");
3175 
3176         }
3177     }
3178 }


1294                  RESULT = parser.getQNameIgnoreDefaultNs("mod");
1295               parser_result = new Symbol(37/*QName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1296             }
1297           return parser_result;
1298 
1299           /*. . . . . . . . . . . . . . . . . . . .*/
1300           case 124: // QName ::= DIV
1301             {
1302               QName RESULT = null;
1303                  RESULT = parser.getQNameIgnoreDefaultNs("div");
1304               parser_result = new Symbol(37/*QName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1305             }
1306           return parser_result;
1307 
1308           /*. . . . . . . . . . . . . . . . . . . .*/
1309           case 123: // QName ::= QNAME
1310             {
1311               QName RESULT = null;
1312                 int qnameleft = (parser_stack.get(parser_top-0)).left;
1313                 int qnameright = (parser_stack.get(parser_top-0)).right;
1314                 String qname = (String)(parser_stack.get(parser_top-0)).value;
1315                  RESULT = parser.getQNameIgnoreDefaultNs(qname);
1316               parser_result = new Symbol(37/*QName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1317             }
1318           return parser_result;
1319 
1320           /*. . . . . . . . . . . . . . . . . . . .*/
1321           case 122: // NameTest ::= QName
1322             {
1323               Object RESULT = null;
1324                 int qnleft = (parser_stack.get(parser_top-0)).left;
1325                 int qnright = (parser_stack.get(parser_top-0)).right;
1326                 QName qn = (QName)(parser_stack.get(parser_top-0)).value;
1327                  RESULT = qn;
1328               parser_result = new Symbol(26/*NameTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1329             }
1330           return parser_result;
1331 
1332           /*. . . . . . . . . . . . . . . . . . . .*/
1333           case 121: // NameTest ::= STAR
1334             {
1335               Object RESULT = null;
1336                  RESULT = null;
1337               parser_result = new Symbol(26/*NameTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1338             }
1339           return parser_result;
1340 
1341           /*. . . . . . . . . . . . . . . . . . . .*/
1342           case 120: // NodeTest ::= PI
1343             {
1344               Object RESULT = null;
1345                  RESULT = Integer.valueOf(NodeTest.PI);
1346               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1347             }
1348           return parser_result;
1349 
1350           /*. . . . . . . . . . . . . . . . . . . .*/
1351           case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN
1352             {
1353               Object RESULT = null;
1354                 int lleft = (parser_stack.get(parser_top-1)).left;
1355                 int lright = (parser_stack.get(parser_top-1)).right;
1356                 String l = (String)(parser_stack.get(parser_top-1)).value;
1357 
1358            QName name = parser.getQNameIgnoreDefaultNs("name");
1359            Expression exp = new EqualityExpr(Operators.EQ,
1360                                              new NameCall(name),
1361                                              new LiteralExpr(l));
1362            List<Predicate> predicates = new ArrayList<>();
1363            predicates.add(new Predicate(exp));
1364            RESULT = new Step(Axis.CHILD, NodeTest.PI, predicates);
1365 
1366               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1367             }
1368           return parser_result;
1369 
1370           /*. . . . . . . . . . . . . . . . . . . .*/
1371           case 118: // NodeTest ::= COMMENT
1372             {
1373               Object RESULT = null;
1374                  RESULT = Integer.valueOf(NodeTest.COMMENT);
1375               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1376             }


1383                  RESULT = Integer.valueOf(NodeTest.TEXT);
1384               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1385             }
1386           return parser_result;
1387 
1388           /*. . . . . . . . . . . . . . . . . . . .*/
1389           case 116: // NodeTest ::= NODE
1390             {
1391               Object RESULT = null;
1392                  RESULT = Integer.valueOf(NodeTest.ANODE);
1393               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1394             }
1395           return parser_result;
1396 
1397           /*. . . . . . . . . . . . . . . . . . . .*/
1398           case 115: // NodeTest ::= NameTest
1399             {
1400               Object RESULT = null;
1401                 int ntleft = (parser_stack.get(parser_top-0)).left;
1402                 int ntright = (parser_stack.get(parser_top-0)).right;
1403                 Object nt = parser_stack.get(parser_top-0).value;
1404                  RESULT = nt;
1405               parser_result = new Symbol(25/*NodeTest*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1406             }
1407           return parser_result;
1408 
1409           /*. . . . . . . . . . . . . . . . . . . .*/
1410           case 114: // Argument ::= Expr
1411             {
1412               Expression RESULT = null;
1413                 int exleft = (parser_stack.get(parser_top-0)).left;
1414                 int exright = (parser_stack.get(parser_top-0)).right;
1415                 Expression ex = (Expression)(parser_stack.get(parser_top-0)).value;
1416                  RESULT = ex;
1417               parser_result = new Symbol(3/*Argument*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1418             }
1419           return parser_result;
1420 
1421           /*. . . . . . . . . . . . . . . . . . . .*/
1422           case 113: // VariableName ::= QName
1423             {
1424               QName RESULT = null;
1425                 int vnameleft = (parser_stack.get(parser_top-0)).left;
1426                 int vnameright = (parser_stack.get(parser_top-0)).right;
1427                 QName vname = (QName)(parser_stack.get(parser_top-0)).value;
1428 
1429             RESULT = vname;
1430 
1431               parser_result = new Symbol(39/*VariableName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1432             }
1433           return parser_result;
1434 
1435           /*. . . . . . . . . . . . . . . . . . . .*/
1436           case 112: // FunctionName ::= QName
1437             {
1438               QName RESULT = null;
1439                 int fnameleft = (parser_stack.get(parser_top-0)).left;
1440                 int fnameright = (parser_stack.get(parser_top-0)).right;
1441                 QName fname = (QName)(parser_stack.get(parser_top-0)).value;
1442 
1443             RESULT = fname;
1444 
1445               parser_result = new Symbol(38/*FunctionName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1446             }
1447           return parser_result;
1448 
1449           /*. . . . . . . . . . . . . . . . . . . .*/
1450           case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList
1451             {
1452                 List<Expression> RESULT = null;
1453                 int argleft = (parser_stack.get(parser_top-2)).left;
1454                 int argright = (parser_stack.get(parser_top-2)).right;
1455                 Expression arg = (Expression)(parser_stack.get(parser_top-2)).value;
1456                 int arglleft = (parser_stack.get(parser_top-0)).left;
1457                 int arglright = (parser_stack.get(parser_top-0)).right;
1458                 @SuppressWarnings("unchecked")
1459                 List<Expression> argl = (ArrayList<Expression>)(parser_stack.get(parser_top-0)).value;
1460                 argl.add(0, arg);
1461                 RESULT = argl;
1462               parser_result = new Symbol(36/*NonemptyArgumentList*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1463             }
1464           return parser_result;
1465 
1466           /*. . . . . . . . . . . . . . . . . . . .*/
1467           case 110: // NonemptyArgumentList ::= Argument
1468             {
1469               List<Expression> RESULT = null;
1470                 int argleft = (parser_stack.get(parser_top-0)).left;
1471                 int argright = (parser_stack.get(parser_top-0)).right;
1472                 Expression arg = (Expression)(parser_stack.get(parser_top-0)).value;
1473 
1474             List<Expression> temp = new ArrayList<>();
1475             temp.add(arg);
1476             RESULT = temp;
1477 
1478               parser_result = new Symbol(36/*NonemptyArgumentList*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1479             }
1480           return parser_result;
1481 
1482           /*. . . . . . . . . . . . . . . . . . . .*/
1483           case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN
1484             {
1485                 Expression RESULT = null;
1486                 int fnameleft = (parser_stack.get(parser_top-3)).left;
1487                 int fnameright = (parser_stack.get(parser_top-3)).right;
1488                 QName fname = (QName)(parser_stack.get(parser_top-3)).value;
1489                 int arglleft = (parser_stack.get(parser_top-1)).left;
1490                 int arglright = (parser_stack.get(parser_top-1)).right;
1491                 @SuppressWarnings("unchecked")
1492                 List<Expression> argl = (ArrayList<Expression>)(parser_stack.get(parser_top-1)).value;
1493 
1494           if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
1495             RESULT = new ConcatCall(fname, argl);
1496           }
1497           else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
1498             RESULT = new NumberCall(fname, argl);
1499           }
1500           else if (fname == parser.getQNameIgnoreDefaultNs("document")) {
1501             parser.setMultiDocument(true);
1502             RESULT = new DocumentCall(fname, argl);
1503           }
1504           else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
1505             RESULT = new StringCall(fname, argl);
1506           }
1507           else if (fname == parser.getQNameIgnoreDefaultNs("boolean")) {
1508             RESULT = new BooleanCall(fname, argl);
1509           }
1510           else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
1511             RESULT = new NameCall(fname, argl);
1512           }


1567           }
1568           // Special case for extension function nodeset()
1569           else if (fname.getLocalPart().equals("nodeset") || fname.getLocalPart().equals("node-set")) {
1570             parser.setCallsNodeset(true);  // implies MultiDOM
1571             RESULT = new FunctionCall(fname, argl);
1572           }
1573           else {
1574             RESULT = new FunctionCall(fname, argl);
1575           }
1576 
1577               parser_result = new Symbol(16/*FunctionCall*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1578             }
1579           return parser_result;
1580 
1581           /*. . . . . . . . . . . . . . . . . . . .*/
1582           case 108: // FunctionCall ::= FunctionName LPAREN RPAREN
1583             {
1584               Expression RESULT = null;
1585                 int fnameleft = (parser_stack.get(parser_top-2)).left;
1586                 int fnameright = (parser_stack.get(parser_top-2)).right;
1587                 QName fname = (QName)(parser_stack.get(parser_top-2)).value;
1588 
1589 
1590           if (fname == parser.getQNameIgnoreDefaultNs("current")) {
1591             RESULT = new CurrentCall(fname);
1592           }
1593           else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
1594             RESULT = new NumberCall(fname, XPathParser.EmptyArgs);
1595           }
1596           else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
1597             RESULT = new StringCall(fname, XPathParser.EmptyArgs);
1598           }
1599           else if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
1600             RESULT = new ConcatCall(fname, XPathParser.EmptyArgs);
1601           }
1602           else if (fname == parser.getQNameIgnoreDefaultNs("true")) {
1603             RESULT = new BooleanExpr(true);
1604           }
1605           else if (fname == parser.getQNameIgnoreDefaultNs("false")) {
1606             RESULT = new BooleanExpr(false);
1607           }


1623           else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
1624             RESULT = new LocalNameCall(fname);
1625           }
1626           else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
1627             RESULT = new NamespaceUriCall(fname);
1628           }
1629           else {
1630             RESULT = new FunctionCall(fname, XPathParser.EmptyArgs);
1631           }
1632 
1633               parser_result = new Symbol(16/*FunctionCall*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1634             }
1635           return parser_result;
1636 
1637           /*. . . . . . . . . . . . . . . . . . . .*/
1638           case 107: // VariableReference ::= DOLLAR VariableName
1639             {
1640               Expression RESULT = null;
1641                 int varNameleft = (parser_stack.get(parser_top-0)).left;
1642                 int varNameright = (parser_stack.get(parser_top-0)).right;
1643                 QName varName = (QName)(parser_stack.get(parser_top-0)).value;
1644 
1645             // An empty qname prefix for a variable or parameter reference
1646             // should map to the null namespace and not the default URI.
1647             SyntaxTreeNode node = parser.lookupName(varName);
1648 
1649             if (node != null) {
1650                 if (node instanceof Variable) {
1651                     RESULT = new VariableRef((Variable)node);
1652                 }
1653                 else if (node instanceof Param) {
1654                     RESULT = new ParameterRef((Param)node);
1655                 }
1656                 else {
1657                     RESULT = new UnresolvedRef(varName);
1658                 }
1659             }
1660 
1661             if (node == null) {
1662                 RESULT = new UnresolvedRef(varName);
1663             }
1664 
1665               parser_result = new Symbol(15/*VariableReference*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1666             }
1667           return parser_result;
1668 
1669           /*. . . . . . . . . . . . . . . . . . . .*/
1670           case 106: // PrimaryExpr ::= FunctionCall
1671             {
1672               Expression RESULT = null;
1673                 int fcleft = (parser_stack.get(parser_top-0)).left;
1674                 int fcright = (parser_stack.get(parser_top-0)).right;
1675                 Expression fc = (Expression)(parser_stack.get(parser_top-0)).value;
1676                  RESULT = fc;
1677               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1678             }
1679           return parser_result;
1680 
1681           /*. . . . . . . . . . . . . . . . . . . .*/
1682           case 105: // PrimaryExpr ::= REAL
1683             {
1684               Expression RESULT = null;
1685                 int numleft = (parser_stack.get(parser_top-0)).left;
1686                 int numright = (parser_stack.get(parser_top-0)).right;
1687                 Double num = (Double)(parser_stack.get(parser_top-0)).value;
1688                  RESULT = new RealExpr(num.doubleValue());
1689               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1690             }
1691           return parser_result;
1692 
1693           /*. . . . . . . . . . . . . . . . . . . .*/
1694           case 104: // PrimaryExpr ::= INT
1695             {
1696               Expression RESULT = null;
1697                 int numleft = (parser_stack.get(parser_top-0)).left;
1698                 int numright = (parser_stack.get(parser_top-0)).right;
1699                 Long num = (Long)(parser_stack.get(parser_top-0)).value;
1700 
1701            long value = num.longValue();
1702            if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
1703                 RESULT = new RealExpr(value);
1704            }
1705            else {
1706                if (num.doubleValue() == -0)
1707                    RESULT = new RealExpr(num.doubleValue());
1708                else if (num.intValue() == 0)
1709                    RESULT = new IntExpr(num.intValue());
1710                else if (num.doubleValue() == 0.0)
1711                    RESULT = new RealExpr(num.doubleValue());
1712                else
1713                    RESULT = new IntExpr(num.intValue());
1714            }
1715 
1716               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1717             }
1718           return parser_result;
1719 
1720           /*. . . . . . . . . . . . . . . . . . . .*/
1721           case 103: // PrimaryExpr ::= Literal
1722             {
1723               Expression RESULT = null;
1724                 int stringleft = (parser_stack.get(parser_top-0)).left;
1725                 int stringright = (parser_stack.get(parser_top-0)).right;
1726                 String string = (String)(parser_stack.get(parser_top-0)).value;
1727 
1728         /*
1729         * If the string appears to have the syntax of a QName, store
1730         * namespace info in the literal expression. This is used for
1731         * element-available and function-available functions, among
1732         * others. Also, the default namespace must be ignored.
1733         */
1734         String namespace = null;
1735         final int index = string.lastIndexOf(':');
1736 
1737         if (index > 0) {
1738             final String prefix = string.substring(0, index);
1739             namespace = parser._symbolTable.lookupNamespace(prefix);
1740         }
1741         RESULT = (namespace == null) ? new LiteralExpr(string)
1742                      : new LiteralExpr(string, namespace);
1743 
1744               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1745             }
1746           return parser_result;
1747 
1748           /*. . . . . . . . . . . . . . . . . . . .*/
1749           case 102: // PrimaryExpr ::= LPAREN Expr RPAREN
1750             {
1751               Expression RESULT = null;
1752                 int exleft = (parser_stack.get(parser_top-1)).left;
1753                 int exright = (parser_stack.get(parser_top-1)).right;
1754                 Expression ex = (Expression)(parser_stack.get(parser_top-1)).value;
1755                  RESULT = ex;
1756               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1757             }
1758           return parser_result;
1759 
1760           /*. . . . . . . . . . . . . . . . . . . .*/
1761           case 101: // PrimaryExpr ::= VariableReference
1762             {
1763               Expression RESULT = null;
1764                 int vrleft = (parser_stack.get(parser_top-0)).left;
1765                 int vrright = (parser_stack.get(parser_top-0)).right;
1766                 Expression vr = (Expression)(parser_stack.get(parser_top-0)).value;
1767                  RESULT = vr;
1768               parser_result = new Symbol(17/*PrimaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1769             }
1770           return parser_result;
1771 
1772           /*. . . . . . . . . . . . . . . . . . . .*/
1773           case 100: // FilterExpr ::= PrimaryExpr Predicates
1774             {
1775               Expression RESULT = null;
1776                 int primaryleft = (parser_stack.get(parser_top-1)).left;
1777                 int primaryright = (parser_stack.get(parser_top-1)).right;
1778                 Expression primary = (Expression)(parser_stack.get(parser_top-1)).value;
1779                 int ppleft = (parser_stack.get(parser_top-0)).left;
1780                 int ppright = (parser_stack.get(parser_top-0)).right;
1781                 @SuppressWarnings("unchecked")
1782                 List<Expression> pp = (ArrayList<Expression>)(parser_stack.get(parser_top-0)).value;
1783                  RESULT = new FilterExpr(primary, pp);
1784               parser_result = new Symbol(6/*FilterExpr*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1785             }
1786           return parser_result;
1787 
1788           /*. . . . . . . . . . . . . . . . . . . .*/
1789           case 99: // FilterExpr ::= PrimaryExpr
1790             {
1791               Expression RESULT = null;
1792                 int primaryleft = (parser_stack.get(parser_top-0)).left;
1793                 int primaryright = (parser_stack.get(parser_top-0)).right;
1794                 Expression primary = (Expression)(parser_stack.get(parser_top-0)).value;
1795                  RESULT = primary;
1796               parser_result = new Symbol(6/*FilterExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1797             }
1798           return parser_result;
1799 
1800           /*. . . . . . . . . . . . . . . . . . . .*/
1801           case 98: // AbbreviatedStep ::= DDOT
1802             {
1803               Expression RESULT = null;
1804                  RESULT = new Step(Axis.PARENT, NodeTest.ANODE, null);
1805               parser_result = new Symbol(20/*AbbreviatedStep*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1806             }
1807           return parser_result;
1808 
1809           /*. . . . . . . . . . . . . . . . . . . .*/
1810           case 97: // AbbreviatedStep ::= DOT
1811             {
1812               Expression RESULT = null;
1813                  RESULT = new Step(Axis.SELF, NodeTest.ANODE, null);
1814               parser_result = new Symbol(20/*AbbreviatedStep*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);


1930                  RESULT = Integer.valueOf(Axis.ANCESTOR);
1931               parser_result = new Symbol(40/*AxisName*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1932             }
1933           return parser_result;
1934 
1935           /*. . . . . . . . . . . . . . . . . . . .*/
1936           case 83: // AxisSpecifier ::= ATSIGN
1937             {
1938               Integer RESULT = null;
1939                  RESULT = Integer.valueOf(Axis.ATTRIBUTE);
1940               parser_result = new Symbol(41/*AxisSpecifier*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1941             }
1942           return parser_result;
1943 
1944           /*. . . . . . . . . . . . . . . . . . . .*/
1945           case 82: // AxisSpecifier ::= AxisName DCOLON
1946             {
1947               Integer RESULT = null;
1948                 int anleft = (parser_stack.get(parser_top-1)).left;
1949                 int anright = (parser_stack.get(parser_top-1)).right;
1950                 Integer an = (Integer)(parser_stack.get(parser_top-1)).value;
1951                  RESULT = an;
1952               parser_result = new Symbol(41/*AxisSpecifier*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1953             }
1954           return parser_result;
1955 
1956           /*. . . . . . . . . . . . . . . . . . . .*/
1957           case 81: // Step ::= AbbreviatedStep
1958             {
1959               Expression RESULT = null;
1960                 int abbrevleft = (parser_stack.get(parser_top-0)).left;
1961                 int abbrevright = (parser_stack.get(parser_top-0)).right;
1962                 Expression abbrev = (Expression)(parser_stack.get(parser_top-0)).value;
1963                  RESULT = abbrev;
1964               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1965             }
1966           return parser_result;
1967 
1968           /*. . . . . . . . . . . . . . . . . . . .*/
1969           case 80: // Step ::= AxisSpecifier NodeTest
1970             {
1971               Expression RESULT = null;
1972                 int axisleft = (parser_stack.get(parser_top-1)).left;
1973                 int axisright = (parser_stack.get(parser_top-1)).right;
1974                 Integer axis = (Integer)(parser_stack.get(parser_top-1)).value;
1975                 int ntestleft = (parser_stack.get(parser_top-0)).left;
1976                 int ntestright = (parser_stack.get(parser_top-0)).right;
1977                 Object ntest = parser_stack.get(parser_top-0).value;
1978                  RESULT = new Step(axis.intValue(),
1979                              parser.findNodeType(axis.intValue(), ntest),
1980                              null);
1981 
1982               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
1983             }
1984           return parser_result;
1985 
1986           /*. . . . . . . . . . . . . . . . . . . .*/
1987           case 79: // Step ::= AxisSpecifier NodeTest Predicates
1988             {
1989               Expression RESULT = null;
1990                 int axisleft = (parser_stack.get(parser_top-2)).left;
1991                 int axisright = (parser_stack.get(parser_top-2)).right;
1992                 Integer axis = (Integer)(parser_stack.get(parser_top-2)).value;
1993                 int ntestleft = (parser_stack.get(parser_top-1)).left;
1994                 int ntestright = (parser_stack.get(parser_top-1)).right;
1995                 Object ntest = parser_stack.get(parser_top-1).value;
1996                 int ppleft = (parser_stack.get(parser_top-0)).left;
1997                 int ppright = (parser_stack.get(parser_top-0)).right;
1998                 @SuppressWarnings("unchecked")
1999                 List<Predicate> pp = (ArrayList<Predicate>)(parser_stack.get(parser_top-0)).value;
2000                  RESULT = new Step(axis.intValue(),
2001                              parser.findNodeType(axis.intValue(), ntest),
2002                              pp);
2003 
2004               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2005             }
2006           return parser_result;
2007 
2008           /*. . . . . . . . . . . . . . . . . . . .*/
2009           case 78: // Step ::= NodeTest Predicates
2010             {
2011               Expression RESULT = null;
2012                 int ntestleft = (parser_stack.get(parser_top-1)).left;
2013                 int ntestright = (parser_stack.get(parser_top-1)).right;
2014                 Object ntest = parser_stack.get(parser_top-1).value;
2015                 int ppleft = (parser_stack.get(parser_top-0)).left;
2016                 int ppright = (parser_stack.get(parser_top-0)).right;
2017                 @SuppressWarnings("unchecked")
2018                 List<Predicate> pp = (ArrayList<Predicate>)(parser_stack.get(parser_top-0)).value;
2019 
2020             if (ntest instanceof Step) {
2021                 Step step = (Step)ntest;
2022                 step.addPredicates(pp);
2023                 RESULT = (Step)ntest;
2024             }
2025             else {
2026                 RESULT = new Step(Axis.CHILD,
2027                              parser.findNodeType(Axis.CHILD, ntest), pp);
2028             }
2029 
2030               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2031             }
2032           return parser_result;
2033 
2034           /*. . . . . . . . . . . . . . . . . . . .*/
2035           case 77: // Step ::= NodeTest
2036             {
2037               Expression RESULT = null;
2038                 int ntestleft = (parser_stack.get(parser_top-0)).left;
2039                 int ntestright = (parser_stack.get(parser_top-0)).right;
2040                 Object ntest = parser_stack.get(parser_top-0).value;
2041 
2042             if (ntest instanceof Step) {
2043                 RESULT = (Step)ntest;
2044             }
2045             else {
2046                 RESULT = new Step(Axis.CHILD,
2047                              parser.findNodeType(Axis.CHILD, ntest),
2048                              null);
2049             }
2050 
2051               parser_result = new Symbol(7/*Step*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2052             }
2053           return parser_result;
2054 
2055           /*. . . . . . . . . . . . . . . . . . . .*/
2056           case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath
2057             {
2058               Expression RESULT = null;
2059                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2060                 int rlpright = (parser_stack.get(parser_top-0)).right;
2061                 Expression rlp = (Expression)(parser_stack.get(parser_top-0)).value;
2062 
2063            //
2064            // Expand '//' into '/descendant-or-self::node()/' or
2065            // into /descendant-or-self::*/
2066            //
2067            int nodeType = DOM.NO_TYPE;
2068            if (rlp instanceof Step &&
2069                parser.isElementAxis(((Step) rlp).getAxis()))
2070            {
2071                nodeType = DTM.ELEMENT_NODE;
2072            }
2073            final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
2074            RESULT = new AbsoluteLocationPath(parser.insertStep(step,
2075                                 (RelativeLocationPath) rlp));
2076 
2077               parser_result = new Symbol(24/*AbbreviatedAbsoluteLocationPath*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2078             }
2079           return parser_result;
2080 
2081           /*. . . . . . . . . . . . . . . . . . . .*/
2082           case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step
2083             {
2084               Expression RESULT = null;
2085                 int rlpleft = (parser_stack.get(parser_top-2)).left;
2086                 int rlpright = (parser_stack.get(parser_top-2)).right;
2087                 Expression rlp = (Expression)(parser_stack.get(parser_top-2)).value;
2088                 int stepleft = (parser_stack.get(parser_top-0)).left;
2089                 int stepright = (parser_stack.get(parser_top-0)).right;
2090                 Expression step = (Expression)(parser_stack.get(parser_top-0)).value;
2091 
2092            final Step right  = (Step)step;
2093            final int  axis   = right.getAxis();
2094            final int  type   = right.getNodeType();
2095            final List<Predicate> predicates = right.getPredicates();
2096 
2097            if ((axis == Axis.CHILD) && (type != NodeTest.ATTRIBUTE)) {
2098                // Compress './/child:E' into 'descendant::E' - if possible
2099                if (predicates == null) {
2100                    right.setAxis(Axis.DESCENDANT);
2101                    if (rlp instanceof Step && ((Step)rlp).isAbbreviatedDot()) {
2102                        RESULT = right;
2103                    }
2104                    else {
2105                        // Expand 'rlp//child::E' into 'rlp/descendant::E'
2106                        RelativeLocationPath left = (RelativeLocationPath)rlp;
2107                        RESULT = new ParentLocationPath(left, right);
2108                    }
2109                }
2110                else {


2134            }
2135            else {
2136                // Expand 'rlp//step' -> 'rlp/descendant-or-self::node()/step'
2137                RelativeLocationPath left = (RelativeLocationPath)rlp;
2138                Step middle = new Step(Axis.DESCENDANTORSELF,
2139                     DOM.NO_TYPE, null);
2140                ParentLocationPath ppl = new ParentLocationPath(middle, right);
2141                RESULT = new ParentLocationPath(left, ppl);
2142            }
2143 
2144               parser_result = new Symbol(22/*AbbreviatedRelativeLocationPath*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2145             }
2146           return parser_result;
2147 
2148           /*. . . . . . . . . . . . . . . . . . . .*/
2149           case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath
2150             {
2151               Expression RESULT = null;
2152                 int aalpleft = (parser_stack.get(parser_top-0)).left;
2153                 int aalpright = (parser_stack.get(parser_top-0)).right;
2154                 Expression aalp = (Expression)(parser_stack.get(parser_top-0)).value;
2155                  RESULT = aalp;
2156               parser_result = new Symbol(23/*AbsoluteLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2157             }
2158           return parser_result;
2159 
2160           /*. . . . . . . . . . . . . . . . . . . .*/
2161           case 73: // AbsoluteLocationPath ::= SLASH RelativeLocationPath
2162             {
2163               Expression RESULT = null;
2164                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2165                 int rlpright = (parser_stack.get(parser_top-0)).right;
2166                 Expression rlp = (Expression)(parser_stack.get(parser_top-0)).value;
2167                  RESULT = new AbsoluteLocationPath(rlp);
2168               parser_result = new Symbol(23/*AbsoluteLocationPath*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2169             }
2170           return parser_result;
2171 
2172           /*. . . . . . . . . . . . . . . . . . . .*/
2173           case 72: // AbsoluteLocationPath ::= SLASH
2174             {
2175               Expression RESULT = null;
2176                  RESULT = new AbsoluteLocationPath();
2177               parser_result = new Symbol(23/*AbsoluteLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2178             }
2179           return parser_result;
2180 
2181           /*. . . . . . . . . . . . . . . . . . . .*/
2182           case 71: // RelativeLocationPath ::= AbbreviatedRelativeLocationPath
2183             {
2184               Expression RESULT = null;
2185                 int arlpleft = (parser_stack.get(parser_top-0)).left;
2186                 int arlpright = (parser_stack.get(parser_top-0)).right;
2187                 Expression arlp = (Expression)(parser_stack.get(parser_top-0)).value;
2188                  RESULT = arlp;
2189               parser_result = new Symbol(21/*RelativeLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2190             }
2191           return parser_result;
2192 
2193           /*. . . . . . . . . . . . . . . . . . . .*/
2194           case 70: // RelativeLocationPath ::= RelativeLocationPath SLASH Step
2195             {
2196               Expression RESULT = null;
2197                 int rlpleft = (parser_stack.get(parser_top-2)).left;
2198                 int rlpright = (parser_stack.get(parser_top-2)).right;
2199                 Expression rlp = (Expression)(parser_stack.get(parser_top-2)).value;
2200                 int stepleft = (parser_stack.get(parser_top-0)).left;
2201                 int stepright = (parser_stack.get(parser_top-0)).right;
2202                 Expression step = (Expression)(parser_stack.get(parser_top-0)).value;
2203 
2204         if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
2205               RESULT = step;       // Remove './' from the middle
2206         }
2207         else if (((Step) step).isAbbreviatedDot()) {
2208               RESULT = rlp;        // Remove '/.' from the end
2209         }
2210         else {
2211              RESULT =
2212                 new ParentLocationPath((RelativeLocationPath) rlp, step);
2213            }
2214 
2215               parser_result = new Symbol(21/*RelativeLocationPath*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2216             }
2217           return parser_result;
2218 
2219           /*. . . . . . . . . . . . . . . . . . . .*/
2220           case 69: // RelativeLocationPath ::= Step
2221             {
2222               Expression RESULT = null;
2223                 int stepleft = (parser_stack.get(parser_top-0)).left;
2224                 int stepright = (parser_stack.get(parser_top-0)).right;
2225                 Expression step = (Expression)(parser_stack.get(parser_top-0)).value;
2226                  RESULT = step;
2227               parser_result = new Symbol(21/*RelativeLocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2228             }
2229           return parser_result;
2230 
2231           /*. . . . . . . . . . . . . . . . . . . .*/
2232           case 68: // LocationPath ::= AbsoluteLocationPath
2233             {
2234               Expression RESULT = null;
2235                 int alpleft = (parser_stack.get(parser_top-0)).left;
2236                 int alpright = (parser_stack.get(parser_top-0)).right;
2237                 Expression alp = (Expression)(parser_stack.get(parser_top-0)).value;
2238                  RESULT = alp;
2239               parser_result = new Symbol(4/*LocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2240             }
2241           return parser_result;
2242 
2243           /*. . . . . . . . . . . . . . . . . . . .*/
2244           case 67: // LocationPath ::= RelativeLocationPath
2245             {
2246               Expression RESULT = null;
2247                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2248                 int rlpright = (parser_stack.get(parser_top-0)).right;
2249                 Expression rlp = (Expression)(parser_stack.get(parser_top-0)).value;
2250                  RESULT = rlp;
2251               parser_result = new Symbol(4/*LocationPath*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2252             }
2253           return parser_result;
2254 
2255           /*. . . . . . . . . . . . . . . . . . . .*/
2256           case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath
2257             {
2258               Expression RESULT = null;
2259                 int fexpleft = (parser_stack.get(parser_top-2)).left;
2260                 int fexpright = (parser_stack.get(parser_top-2)).right;
2261                 Expression fexp = (Expression)(parser_stack.get(parser_top-2)).value;
2262                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2263                 int rlpright = (parser_stack.get(parser_top-0)).right;
2264                 Expression rlp = (Expression)(parser_stack.get(parser_top-0)).value;
2265 
2266            //
2267            // Expand '//' into '/descendant-or-self::node()/' or
2268            // into /descendant-or-self::*/
2269            //
2270            int nodeType = DOM.NO_TYPE;
2271            if (rlp instanceof Step &&
2272                parser.isElementAxis(((Step) rlp).getAxis()))
2273            {
2274                nodeType = DTM.ELEMENT_NODE;
2275            }
2276            final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
2277            FilterParentPath fpp = new FilterParentPath(fexp, step);
2278            fpp = new FilterParentPath(fpp, rlp);
2279            if (fexp instanceof KeyCall == false) {
2280                fpp.setDescendantAxis();
2281            }
2282            RESULT = fpp;
2283 
2284               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2285             }
2286           return parser_result;
2287 
2288           /*. . . . . . . . . . . . . . . . . . . .*/
2289           case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath
2290             {
2291               Expression RESULT = null;
2292                 int fexpleft = (parser_stack.get(parser_top-2)).left;
2293                 int fexpright = (parser_stack.get(parser_top-2)).right;
2294                 Expression fexp = (Expression)(parser_stack.get(parser_top-2)).value;
2295                 int rlpleft = (parser_stack.get(parser_top-0)).left;
2296                 int rlpright = (parser_stack.get(parser_top-0)).right;
2297                 Expression rlp = (Expression)(parser_stack.get(parser_top-0)).value;
2298                  RESULT = new FilterParentPath(fexp, rlp);
2299               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2300             }
2301           return parser_result;
2302 
2303           /*. . . . . . . . . . . . . . . . . . . .*/
2304           case 64: // PathExpr ::= FilterExpr
2305             {
2306               Expression RESULT = null;
2307                 int fexpleft = (parser_stack.get(parser_top-0)).left;
2308                 int fexpright = (parser_stack.get(parser_top-0)).right;
2309                 Expression fexp = (Expression)(parser_stack.get(parser_top-0)).value;
2310                  RESULT = fexp;
2311               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2312             }
2313           return parser_result;
2314 
2315           /*. . . . . . . . . . . . . . . . . . . .*/
2316           case 63: // PathExpr ::= LocationPath
2317             {
2318               Expression RESULT = null;
2319                 int lpleft = (parser_stack.get(parser_top-0)).left;
2320                 int lpright = (parser_stack.get(parser_top-0)).right;
2321                 Expression lp = (Expression)(parser_stack.get(parser_top-0)).value;
2322                  RESULT = lp;
2323               parser_result = new Symbol(19/*PathExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2324             }
2325           return parser_result;
2326 
2327           /*. . . . . . . . . . . . . . . . . . . .*/
2328           case 62: // UnionExpr ::= PathExpr VBAR UnionExpr
2329             {
2330               Expression RESULT = null;
2331                 int peleft = (parser_stack.get(parser_top-2)).left;
2332                 int peright = (parser_stack.get(parser_top-2)).right;
2333                 Expression pe = (Expression)(parser_stack.get(parser_top-2)).value;
2334                 int restleft = (parser_stack.get(parser_top-0)).left;
2335                 int restright = (parser_stack.get(parser_top-0)).right;
2336                 Expression rest = (Expression)(parser_stack.get(parser_top-0)).value;
2337                  RESULT = new UnionPathExpr(pe, rest);
2338               parser_result = new Symbol(18/*UnionExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2339             }
2340           return parser_result;
2341 
2342           /*. . . . . . . . . . . . . . . . . . . .*/
2343           case 61: // UnionExpr ::= PathExpr
2344             {
2345               Expression RESULT = null;
2346                 int peleft = (parser_stack.get(parser_top-0)).left;
2347                 int peright = (parser_stack.get(parser_top-0)).right;
2348                 Expression pe = (Expression)(parser_stack.get(parser_top-0)).value;
2349                  RESULT = pe;
2350               parser_result = new Symbol(18/*UnionExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2351             }
2352           return parser_result;
2353 
2354           /*. . . . . . . . . . . . . . . . . . . .*/
2355           case 60: // UnaryExpr ::= MINUS UnaryExpr
2356             {
2357               Expression RESULT = null;
2358                 int ueleft = (parser_stack.get(parser_top-0)).left;
2359                 int ueright = (parser_stack.get(parser_top-0)).right;
2360                 Expression ue = (Expression)(parser_stack.get(parser_top-0)).value;
2361                  RESULT = new UnaryOpExpr(ue);
2362               parser_result = new Symbol(14/*UnaryExpr*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2363             }
2364           return parser_result;
2365 
2366           /*. . . . . . . . . . . . . . . . . . . .*/
2367           case 59: // UnaryExpr ::= UnionExpr
2368             {
2369               Expression RESULT = null;
2370                 int ueleft = (parser_stack.get(parser_top-0)).left;
2371                 int ueright = (parser_stack.get(parser_top-0)).right;
2372                 Expression ue = (Expression)(parser_stack.get(parser_top-0)).value;
2373                  RESULT = ue;
2374               parser_result = new Symbol(14/*UnaryExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2375             }
2376           return parser_result;
2377 
2378           /*. . . . . . . . . . . . . . . . . . . .*/
2379           case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr
2380             {
2381               Expression RESULT = null;
2382                 int meleft = (parser_stack.get(parser_top-2)).left;
2383                 int meright = (parser_stack.get(parser_top-2)).right;
2384                 Expression me = (Expression)(parser_stack.get(parser_top-2)).value;
2385                 int ueleft = (parser_stack.get(parser_top-0)).left;
2386                 int ueright = (parser_stack.get(parser_top-0)).right;
2387                 Expression ue = (Expression)(parser_stack.get(parser_top-0)).value;
2388                  RESULT = new BinOpExpr(BinOpExpr.MOD, me, ue);
2389               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2390             }
2391           return parser_result;
2392 
2393           /*. . . . . . . . . . . . . . . . . . . .*/
2394           case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr
2395             {
2396               Expression RESULT = null;
2397                 int meleft = (parser_stack.get(parser_top-2)).left;
2398                 int meright = (parser_stack.get(parser_top-2)).right;
2399                 Expression me = (Expression)(parser_stack.get(parser_top-2)).value;
2400                 int ueleft = (parser_stack.get(parser_top-0)).left;
2401                 int ueright = (parser_stack.get(parser_top-0)).right;
2402                 Expression ue = (Expression)(parser_stack.get(parser_top-0)).value;
2403                  RESULT = new BinOpExpr(BinOpExpr.DIV, me, ue);
2404               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2405             }
2406           return parser_result;
2407 
2408           /*. . . . . . . . . . . . . . . . . . . .*/
2409           case 56: // MultiplicativeExpr ::= MultiplicativeExpr STAR UnaryExpr
2410             {
2411               Expression RESULT = null;
2412                 int meleft = (parser_stack.get(parser_top-2)).left;
2413                 int meright = (parser_stack.get(parser_top-2)).right;
2414                 Expression me = (Expression)(parser_stack.get(parser_top-2)).value;
2415                 int ueleft = (parser_stack.get(parser_top-0)).left;
2416                 int ueright = (parser_stack.get(parser_top-0)).right;
2417                 Expression ue = (Expression)(parser_stack.get(parser_top-0)).value;
2418                  RESULT = new BinOpExpr(BinOpExpr.TIMES, me, ue);
2419               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2420             }
2421           return parser_result;
2422 
2423           /*. . . . . . . . . . . . . . . . . . . .*/
2424           case 55: // MultiplicativeExpr ::= UnaryExpr
2425             {
2426               Expression RESULT = null;
2427                 int ueleft = (parser_stack.get(parser_top-0)).left;
2428                 int ueright = (parser_stack.get(parser_top-0)).right;
2429                 Expression ue = (Expression)(parser_stack.get(parser_top-0)).value;
2430                  RESULT = ue;
2431               parser_result = new Symbol(13/*MultiplicativeExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2432             }
2433           return parser_result;
2434 
2435           /*. . . . . . . . . . . . . . . . . . . .*/
2436           case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr
2437             {
2438               Expression RESULT = null;
2439                 int aeleft = (parser_stack.get(parser_top-2)).left;
2440                 int aeright = (parser_stack.get(parser_top-2)).right;
2441                 Expression ae = (Expression)(parser_stack.get(parser_top-2)).value;
2442                 int meleft = (parser_stack.get(parser_top-0)).left;
2443                 int meright = (parser_stack.get(parser_top-0)).right;
2444                 Expression me = (Expression)(parser_stack.get(parser_top-0)).value;
2445                  RESULT = new BinOpExpr(BinOpExpr.MINUS, ae, me);
2446               parser_result = new Symbol(12/*AdditiveExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2447             }
2448           return parser_result;
2449 
2450           /*. . . . . . . . . . . . . . . . . . . .*/
2451           case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr
2452             {
2453               Expression RESULT = null;
2454                 int aeleft = (parser_stack.get(parser_top-2)).left;
2455                 int aeright = (parser_stack.get(parser_top-2)).right;
2456                 Expression ae = (Expression)(parser_stack.get(parser_top-2)).value;
2457                 int meleft = (parser_stack.get(parser_top-0)).left;
2458                 int meright = (parser_stack.get(parser_top-0)).right;
2459                 Expression me = (Expression)(parser_stack.get(parser_top-0)).value;
2460                  RESULT = new BinOpExpr(BinOpExpr.PLUS, ae, me);
2461               parser_result = new Symbol(12/*AdditiveExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2462             }
2463           return parser_result;
2464 
2465           /*. . . . . . . . . . . . . . . . . . . .*/
2466           case 52: // AdditiveExpr ::= MultiplicativeExpr
2467             {
2468               Expression RESULT = null;
2469                 int meleft = (parser_stack.get(parser_top-0)).left;
2470                 int meright = (parser_stack.get(parser_top-0)).right;
2471                 Expression me = (Expression)(parser_stack.get(parser_top-0)).value;
2472                  RESULT = me;
2473               parser_result = new Symbol(12/*AdditiveExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2474             }
2475           return parser_result;
2476 
2477           /*. . . . . . . . . . . . . . . . . . . .*/
2478           case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr
2479             {
2480               Expression RESULT = null;
2481                 int releft = (parser_stack.get(parser_top-2)).left;
2482                 int reright = (parser_stack.get(parser_top-2)).right;
2483                 Expression re = (Expression)(parser_stack.get(parser_top-2)).value;
2484                 int aeleft = (parser_stack.get(parser_top-0)).left;
2485                 int aeright = (parser_stack.get(parser_top-0)).right;
2486                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2487                  RESULT = new RelationalExpr(Operators.GE, re, ae);
2488               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2489             }
2490           return parser_result;
2491 
2492           /*. . . . . . . . . . . . . . . . . . . .*/
2493           case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr
2494             {
2495               Expression RESULT = null;
2496                 int releft = (parser_stack.get(parser_top-2)).left;
2497                 int reright = (parser_stack.get(parser_top-2)).right;
2498                 Expression re = (Expression)(parser_stack.get(parser_top-2)).value;
2499                 int aeleft = (parser_stack.get(parser_top-0)).left;
2500                 int aeright = (parser_stack.get(parser_top-0)).right;
2501                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2502                  RESULT = new RelationalExpr(Operators.LE, re, ae);
2503               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2504             }
2505           return parser_result;
2506 
2507           /*. . . . . . . . . . . . . . . . . . . .*/
2508           case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr
2509             {
2510               Expression RESULT = null;
2511                 int releft = (parser_stack.get(parser_top-2)).left;
2512                 int reright = (parser_stack.get(parser_top-2)).right;
2513                 Expression re = (Expression)(parser_stack.get(parser_top-2)).value;
2514                 int aeleft = (parser_stack.get(parser_top-0)).left;
2515                 int aeright = (parser_stack.get(parser_top-0)).right;
2516                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2517                  RESULT = new RelationalExpr(Operators.GT, re, ae);
2518               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2519             }
2520           return parser_result;
2521 
2522           /*. . . . . . . . . . . . . . . . . . . .*/
2523           case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr
2524             {
2525               Expression RESULT = null;
2526                 int releft = (parser_stack.get(parser_top-2)).left;
2527                 int reright = (parser_stack.get(parser_top-2)).right;
2528                 Expression re = (Expression)(parser_stack.get(parser_top-2)).value;
2529                 int aeleft = (parser_stack.get(parser_top-0)).left;
2530                 int aeright = (parser_stack.get(parser_top-0)).right;
2531                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2532                  RESULT = new RelationalExpr(Operators.LT, re, ae);
2533               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2534             }
2535           return parser_result;
2536 
2537           /*. . . . . . . . . . . . . . . . . . . .*/
2538           case 47: // RelationalExpr ::= AdditiveExpr
2539             {
2540               Expression RESULT = null;
2541                 int aeleft = (parser_stack.get(parser_top-0)).left;
2542                 int aeright = (parser_stack.get(parser_top-0)).right;
2543                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2544                  RESULT = ae;
2545               parser_result = new Symbol(11/*RelationalExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2546             }
2547           return parser_result;
2548 
2549           /*. . . . . . . . . . . . . . . . . . . .*/
2550           case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr
2551             {
2552               Expression RESULT = null;
2553                 int eeleft = (parser_stack.get(parser_top-2)).left;
2554                 int eeright = (parser_stack.get(parser_top-2)).right;
2555                 Expression ee = (Expression)(parser_stack.get(parser_top-2)).value;
2556                 int releft = (parser_stack.get(parser_top-0)).left;
2557                 int reright = (parser_stack.get(parser_top-0)).right;
2558                 Expression re = (Expression)(parser_stack.get(parser_top-0)).value;
2559                  RESULT = new EqualityExpr(Operators.NE, ee, re);
2560               parser_result = new Symbol(10/*EqualityExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2561             }
2562           return parser_result;
2563 
2564           /*. . . . . . . . . . . . . . . . . . . .*/
2565           case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr
2566             {
2567               Expression RESULT = null;
2568                 int eeleft = (parser_stack.get(parser_top-2)).left;
2569                 int eeright = (parser_stack.get(parser_top-2)).right;
2570                 Expression ee = (Expression)(parser_stack.get(parser_top-2)).value;
2571                 int releft = (parser_stack.get(parser_top-0)).left;
2572                 int reright = (parser_stack.get(parser_top-0)).right;
2573                 Expression re = (Expression)(parser_stack.get(parser_top-0)).value;
2574                  RESULT = new EqualityExpr(Operators.EQ, ee, re);
2575               parser_result = new Symbol(10/*EqualityExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2576             }
2577           return parser_result;
2578 
2579           /*. . . . . . . . . . . . . . . . . . . .*/
2580           case 44: // EqualityExpr ::= RelationalExpr
2581             {
2582               Expression RESULT = null;
2583                 int releft = (parser_stack.get(parser_top-0)).left;
2584                 int reright = (parser_stack.get(parser_top-0)).right;
2585                 Expression re = (Expression)(parser_stack.get(parser_top-0)).value;
2586                  RESULT = re;
2587               parser_result = new Symbol(10/*EqualityExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2588             }
2589           return parser_result;
2590 
2591           /*. . . . . . . . . . . . . . . . . . . .*/
2592           case 43: // AndExpr ::= AndExpr AND EqualityExpr
2593             {
2594               Expression RESULT = null;
2595                 int aeleft = (parser_stack.get(parser_top-2)).left;
2596                 int aeright = (parser_stack.get(parser_top-2)).right;
2597                 Expression ae = (Expression)(parser_stack.get(parser_top-2)).value;
2598                 int eeleft = (parser_stack.get(parser_top-0)).left;
2599                 int eeright = (parser_stack.get(parser_top-0)).right;
2600                 Expression ee = (Expression)(parser_stack.get(parser_top-0)).value;
2601                  RESULT = new LogicalExpr(LogicalExpr.AND, ae, ee);
2602               parser_result = new Symbol(9/*AndExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2603             }
2604           return parser_result;
2605 
2606           /*. . . . . . . . . . . . . . . . . . . .*/
2607           case 42: // AndExpr ::= EqualityExpr
2608             {
2609               Expression RESULT = null;
2610                 int eleft = (parser_stack.get(parser_top-0)).left;
2611                 int eright = (parser_stack.get(parser_top-0)).right;
2612                 Expression e = (Expression)(parser_stack.get(parser_top-0)).value;
2613                  RESULT = e;
2614               parser_result = new Symbol(9/*AndExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2615             }
2616           return parser_result;
2617 
2618           /*. . . . . . . . . . . . . . . . . . . .*/
2619           case 41: // OrExpr ::= OrExpr OR AndExpr
2620             {
2621               Expression RESULT = null;
2622                 int oeleft = (parser_stack.get(parser_top-2)).left;
2623                 int oeright = (parser_stack.get(parser_top-2)).right;
2624                 Expression oe = (Expression)(parser_stack.get(parser_top-2)).value;
2625                 int aeleft = (parser_stack.get(parser_top-0)).left;
2626                 int aeright = (parser_stack.get(parser_top-0)).right;
2627                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2628                  RESULT = new LogicalExpr(LogicalExpr.OR, oe, ae);
2629               parser_result = new Symbol(8/*OrExpr*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2630             }
2631           return parser_result;
2632 
2633           /*. . . . . . . . . . . . . . . . . . . .*/
2634           case 40: // OrExpr ::= AndExpr
2635             {
2636               Expression RESULT = null;
2637                 int aeleft = (parser_stack.get(parser_top-0)).left;
2638                 int aeright = (parser_stack.get(parser_top-0)).right;
2639                 Expression ae = (Expression)(parser_stack.get(parser_top-0)).value;
2640                  RESULT = ae;
2641               parser_result = new Symbol(8/*OrExpr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2642             }
2643           return parser_result;
2644 
2645           /*. . . . . . . . . . . . . . . . . . . .*/
2646           case 39: // Expr ::= OrExpr
2647             {
2648               Expression RESULT = null;
2649                 int exleft = (parser_stack.get(parser_top-0)).left;
2650                 int exright = (parser_stack.get(parser_top-0)).right;
2651                 Expression ex = (Expression)(parser_stack.get(parser_top-0)).value;
2652                  RESULT = ex;
2653               parser_result = new Symbol(2/*Expr*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2654             }
2655           return parser_result;
2656 
2657           /*. . . . . . . . . . . . . . . . . . . .*/
2658           case 38: // Predicate ::= LBRACK Expr RBRACK
2659             {
2660               Expression RESULT = null;
2661                 int eleft = (parser_stack.get(parser_top-1)).left;
2662                 int eright = (parser_stack.get(parser_top-1)).right;
2663                 Expression e = (Expression)(parser_stack.get(parser_top-1)).value;
2664 
2665                 RESULT = new Predicate(e);
2666 
2667               parser_result = new Symbol(5/*Predicate*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2668             }
2669           return parser_result;
2670 
2671           /*. . . . . . . . . . . . . . . . . . . .*/
2672           case 37: // Predicates ::= Predicate Predicates
2673             {
2674                 List<Expression> RESULT = null;
2675                 int pleft = (parser_stack.get(parser_top-1)).left;
2676                 int pright = (parser_stack.get(parser_top-1)).right;
2677                 Expression p = (Expression)(parser_stack.get(parser_top-1)).value;
2678                 int ppleft = (parser_stack.get(parser_top-0)).left;
2679                 int ppright = (parser_stack.get(parser_top-0)).right;
2680                 @SuppressWarnings("unchecked")
2681                 List<Expression> pp = (ArrayList<Expression>)(parser_stack.get(parser_top-0)).value;
2682                 pp.add(0, p); RESULT = pp;
2683               parser_result = new Symbol(35/*Predicates*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2684             }
2685           return parser_result;
2686 
2687           /*. . . . . . . . . . . . . . . . . . . .*/
2688           case 36: // Predicates ::= Predicate
2689             {
2690                 List<Expression> RESULT = null;
2691                 int pleft = (parser_stack.get(parser_top-0)).left;
2692                 int pright = (parser_stack.get(parser_top-0)).right;
2693                 Expression p = (Expression)(parser_stack.get(parser_top-0)).value;
2694 
2695                 List<Expression> temp = new ArrayList<>();
2696                 temp.add(p);
2697                 RESULT = temp;
2698 
2699               parser_result = new Symbol(35/*Predicates*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2700             }
2701           return parser_result;
2702 
2703           /*. . . . . . . . . . . . . . . . . . . .*/
2704           case 35: // ChildOrAttributeAxisSpecifier ::= ATTRIBUTE DCOLON
2705             {
2706               Integer RESULT = null;
2707                  RESULT = Integer.valueOf(Axis.ATTRIBUTE);
2708               parser_result = new Symbol(42/*ChildOrAttributeAxisSpecifier*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2709             }
2710           return parser_result;
2711 
2712           /*. . . . . . . . . . . . . . . . . . . .*/
2713           case 34: // ChildOrAttributeAxisSpecifier ::= CHILD DCOLON


2716                  RESULT = Integer.valueOf(Axis.CHILD);
2717               parser_result = new Symbol(42/*ChildOrAttributeAxisSpecifier*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2718             }
2719           return parser_result;
2720 
2721           /*. . . . . . . . . . . . . . . . . . . .*/
2722           case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN
2723             {
2724               Integer RESULT = null;
2725                  RESULT = Integer.valueOf(Axis.ATTRIBUTE);
2726               parser_result = new Symbol(42/*ChildOrAttributeAxisSpecifier*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2727             }
2728           return parser_result;
2729 
2730           /*. . . . . . . . . . . . . . . . . . . .*/
2731           case 32: // NameTestPattern ::= QName
2732             {
2733               Object RESULT = null;
2734                 int qnleft = (parser_stack.get(parser_top-0)).left;
2735                 int qnright = (parser_stack.get(parser_top-0)).right;
2736                 QName qn = (QName)(parser_stack.get(parser_top-0)).value;
2737                  RESULT = qn;
2738               parser_result = new Symbol(34/*NameTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2739             }
2740           return parser_result;
2741 
2742           /*. . . . . . . . . . . . . . . . . . . .*/
2743           case 31: // NameTestPattern ::= STAR
2744             {
2745               Object RESULT = null;
2746                  RESULT = null;
2747               parser_result = new Symbol(34/*NameTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2748             }
2749           return parser_result;
2750 
2751           /*. . . . . . . . . . . . . . . . . . . .*/
2752           case 30: // NodeTestPattern ::= PI
2753             {
2754               Object RESULT = null;
2755                  RESULT = Integer.valueOf(NodeTest.PI);
2756               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);


2773                  RESULT = Integer.valueOf(NodeTest.TEXT);
2774               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2775             }
2776           return parser_result;
2777 
2778           /*. . . . . . . . . . . . . . . . . . . .*/
2779           case 27: // NodeTestPattern ::= NODE
2780             {
2781               Object RESULT = null;
2782                  RESULT = Integer.valueOf(NodeTest.ANODE);
2783               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2784             }
2785           return parser_result;
2786 
2787           /*. . . . . . . . . . . . . . . . . . . .*/
2788           case 26: // NodeTestPattern ::= NameTestPattern
2789             {
2790               Object RESULT = null;
2791                 int ntleft = (parser_stack.get(parser_top-0)).left;
2792                 int ntright = (parser_stack.get(parser_top-0)).right;
2793                 Object nt = parser_stack.get(parser_top-0).value;
2794                  RESULT = nt;
2795               parser_result = new Symbol(33/*NodeTestPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2796             }
2797           return parser_result;
2798 
2799           /*. . . . . . . . . . . . . . . . . . . .*/
2800           case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates
2801             {
2802               StepPattern RESULT = null;
2803                 int axisleft = (parser_stack.get(parser_top-2)).left;
2804                 int axisright = (parser_stack.get(parser_top-2)).right;
2805                 Integer axis = (Integer)(parser_stack.get(parser_top-2)).value;
2806                 int pipleft = (parser_stack.get(parser_top-1)).left;
2807                 int pipright = (parser_stack.get(parser_top-1)).right;
2808                 StepPattern pip = (StepPattern)(parser_stack.get(parser_top-1)).value;
2809                 int ppleft = (parser_stack.get(parser_top-0)).left;
2810                 int ppright = (parser_stack.get(parser_top-0)).right;
2811                 @SuppressWarnings("unchecked")
2812                 List<Predicate> pp = (ArrayList<Predicate>)(parser_stack.get(parser_top-0)).value;
2813 
2814                // TODO: report error if axis is attribute
2815                RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp);
2816 
2817               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2818             }
2819           return parser_result;
2820 
2821           /*. . . . . . . . . . . . . . . . . . . .*/
2822           case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern
2823             {
2824               StepPattern RESULT = null;
2825                 int axisleft = (parser_stack.get(parser_top-1)).left;
2826                 int axisright = (parser_stack.get(parser_top-1)).right;
2827                 Integer axis = (Integer)(parser_stack.get(parser_top-1)).value;
2828                 int pipleft = (parser_stack.get(parser_top-0)).left;
2829                 int pipright = (parser_stack.get(parser_top-0)).right;
2830                 StepPattern pip = (StepPattern)(parser_stack.get(parser_top-0)).value;
2831 
2832                RESULT = pip;    // TODO: report error if axis is attribute
2833 
2834               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2835             }
2836           return parser_result;
2837 
2838           /*. . . . . . . . . . . . . . . . . . . .*/
2839           case 23: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern Predicates
2840             {
2841               StepPattern RESULT = null;
2842                 int axisleft = (parser_stack.get(parser_top-2)).left;
2843                 int axisright = (parser_stack.get(parser_top-2)).right;
2844                 Integer axis = (Integer)(parser_stack.get(parser_top-2)).value;
2845                 int ntleft = (parser_stack.get(parser_top-1)).left;
2846                 int ntright = (parser_stack.get(parser_top-1)).right;
2847                 Object nt = parser_stack.get(parser_top-1).value;
2848                 int ppleft = (parser_stack.get(parser_top-0)).left;
2849                 int ppright = (parser_stack.get(parser_top-0)).right;
2850                 @SuppressWarnings("unchecked")
2851                List<Predicate>pp = (ArrayList<Predicate>)(parser_stack.get(parser_top-0)).value;
2852 
2853                RESULT = parser.createStepPattern(axis.intValue(), nt, pp);
2854 
2855               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2856             }
2857           return parser_result;
2858 
2859           /*. . . . . . . . . . . . . . . . . . . .*/
2860           case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern
2861             {
2862               StepPattern RESULT = null;
2863                 int axisleft = (parser_stack.get(parser_top-1)).left;
2864                 int axisright = (parser_stack.get(parser_top-1)).right;
2865                 Integer axis = (Integer)(parser_stack.get(parser_top-1)).value;
2866                 int ntleft = (parser_stack.get(parser_top-0)).left;
2867                 int ntright = (parser_stack.get(parser_top-0)).right;
2868                 Object nt = parser_stack.get(parser_top-0).value;
2869 
2870                RESULT = parser.createStepPattern(axis.intValue(), nt, null);
2871 
2872               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2873             }
2874           return parser_result;
2875 
2876           /*. . . . . . . . . . . . . . . . . . . .*/
2877           case 21: // StepPattern ::= ProcessingInstructionPattern Predicates
2878             {
2879               StepPattern RESULT = null;
2880                 int pipleft = (parser_stack.get(parser_top-1)).left;
2881                 int pipright = (parser_stack.get(parser_top-1)).right;
2882                 StepPattern pip = (StepPattern)(parser_stack.get(parser_top-1)).value;
2883                 int ppleft = (parser_stack.get(parser_top-0)).left;
2884                 int ppright = (parser_stack.get(parser_top-0)).right;
2885                 @SuppressWarnings("unchecked")
2886                 List<Predicate> pp = (ArrayList<Predicate>)(parser_stack.get(parser_top-0)).value;
2887                  RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp);
2888               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2889             }
2890           return parser_result;
2891 
2892           /*. . . . . . . . . . . . . . . . . . . .*/
2893           case 20: // StepPattern ::= ProcessingInstructionPattern
2894             {
2895               StepPattern RESULT = null;
2896                 int pipleft = (parser_stack.get(parser_top-0)).left;
2897                 int pipright = (parser_stack.get(parser_top-0)).right;
2898                 StepPattern pip = (StepPattern)(parser_stack.get(parser_top-0)).value;
2899                  RESULT = pip;
2900               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2901             }
2902           return parser_result;
2903 
2904           /*. . . . . . . . . . . . . . . . . . . .*/
2905           case 19: // StepPattern ::= NodeTestPattern Predicates
2906             {
2907               StepPattern RESULT = null;
2908                 int ntleft = (parser_stack.get(parser_top-1)).left;
2909                 int ntright = (parser_stack.get(parser_top-1)).right;
2910                 Object nt = parser_stack.get(parser_top-1).value;
2911                 int ppleft = (parser_stack.get(parser_top-0)).left;
2912                 int ppright = (parser_stack.get(parser_top-0)).right;
2913                 @SuppressWarnings("unchecked")
2914                 List<Predicate> pp = (ArrayList<Predicate>)(parser_stack.get(parser_top-0)).value;
2915 
2916                 RESULT = parser.createStepPattern(Axis.CHILD, nt, pp);
2917 
2918               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2919             }
2920           return parser_result;
2921 
2922           /*. . . . . . . . . . . . . . . . . . . .*/
2923           case 18: // StepPattern ::= NodeTestPattern
2924             {
2925               StepPattern RESULT = null;
2926                 int ntleft = (parser_stack.get(parser_top-0)).left;
2927                 int ntright = (parser_stack.get(parser_top-0)).right;
2928                 Object nt = parser_stack.get(parser_top-0).value;
2929 
2930                 RESULT = parser.createStepPattern(Axis.CHILD, nt, null);
2931 
2932               parser_result = new Symbol(32/*StepPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2933             }
2934           return parser_result;
2935 
2936           /*. . . . . . . . . . . . . . . . . . . .*/
2937           case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern
2938             {
2939               RelativePathPattern RESULT = null;
2940                 int spleft = (parser_stack.get(parser_top-2)).left;
2941                 int spright = (parser_stack.get(parser_top-2)).right;
2942                 StepPattern sp = (StepPattern)(parser_stack.get(parser_top-2)).value;
2943                 int rppleft = (parser_stack.get(parser_top-0)).left;
2944                 int rppright = (parser_stack.get(parser_top-0)).right;
2945                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
2946                  RESULT = new AncestorPattern(sp, rpp);
2947               parser_result = new Symbol(31/*RelativePathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2948             }
2949           return parser_result;
2950 
2951           /*. . . . . . . . . . . . . . . . . . . .*/
2952           case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern
2953             {
2954               RelativePathPattern RESULT = null;
2955                 int spleft = (parser_stack.get(parser_top-2)).left;
2956                 int spright = (parser_stack.get(parser_top-2)).right;
2957                 StepPattern sp = (StepPattern)(parser_stack.get(parser_top-2)).value;
2958                 int rppleft = (parser_stack.get(parser_top-0)).left;
2959                 int rppright = (parser_stack.get(parser_top-0)).right;
2960                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
2961                  RESULT = new ParentPattern(sp, rpp);
2962               parser_result = new Symbol(31/*RelativePathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2963             }
2964           return parser_result;
2965 
2966           /*. . . . . . . . . . . . . . . . . . . .*/
2967           case 15: // RelativePathPattern ::= StepPattern
2968             {
2969               RelativePathPattern RESULT = null;
2970                 int spleft = (parser_stack.get(parser_top-0)).left;
2971                 int spright = (parser_stack.get(parser_top-0)).right;
2972                 StepPattern sp = (StepPattern)(parser_stack.get(parser_top-0)).value;
2973                  RESULT = sp;
2974               parser_result = new Symbol(31/*RelativePathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2975             }
2976           return parser_result;
2977 
2978           /*. . . . . . . . . . . . . . . . . . . .*/
2979           case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN
2980             {
2981               StepPattern RESULT = null;
2982                 int lleft = (parser_stack.get(parser_top-1)).left;
2983                 int lright = (parser_stack.get(parser_top-1)).right;
2984                 String l = (String)(parser_stack.get(parser_top-1)).value;
2985                  RESULT = new ProcessingInstructionPattern(l);
2986               parser_result = new Symbol(30/*ProcessingInstructionPattern*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
2987             }
2988           return parser_result;
2989 
2990           /*. . . . . . . . . . . . . . . . . . . .*/
2991           case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN
2992             {
2993               IdKeyPattern RESULT = null;
2994                 int l1left = (parser_stack.get(parser_top-3)).left;
2995                 int l1right = (parser_stack.get(parser_top-3)).right;
2996                 String l1 = (String)(parser_stack.get(parser_top-3)).value;
2997                 int l2left = (parser_stack.get(parser_top-1)).left;
2998                 int l2right = (parser_stack.get(parser_top-1)).right;
2999                 String l2 = (String)(parser_stack.get(parser_top-1)).value;
3000                  RESULT = new KeyPattern(l1, l2);
3001               parser_result = new Symbol(27/*IdKeyPattern*/, (parser_stack.get(parser_top-5)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3002             }
3003           return parser_result;
3004 
3005           /*. . . . . . . . . . . . . . . . . . . .*/
3006           case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN
3007             {
3008               IdKeyPattern RESULT = null;
3009                 int lleft = (parser_stack.get(parser_top-1)).left;
3010                 int lright = (parser_stack.get(parser_top-1)).right;
3011                 String l = (String)(parser_stack.get(parser_top-1)).value;
3012                  RESULT = new IdPattern(l);
3013                parser.setHasIdCall(true);
3014 
3015               parser_result = new Symbol(27/*IdKeyPattern*/, (parser_stack.get(parser_top-3)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3016             }
3017           return parser_result;
3018 
3019           /*. . . . . . . . . . . . . . . . . . . .*/
3020           case 11: // LocationPathPattern ::= RelativePathPattern
3021             {
3022               Pattern RESULT = null;
3023                 int rppleft = (parser_stack.get(parser_top-0)).left;
3024                 int rppright = (parser_stack.get(parser_top-0)).right;
3025                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
3026                  RESULT = rpp;
3027               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3028             }
3029           return parser_result;
3030 
3031           /*. . . . . . . . . . . . . . . . . . . .*/
3032           case 10: // LocationPathPattern ::= DSLASH RelativePathPattern
3033             {
3034               Pattern RESULT = null;
3035                 int rppleft = (parser_stack.get(parser_top-0)).left;
3036                 int rppright = (parser_stack.get(parser_top-0)).right;
3037                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
3038                  RESULT = new AncestorPattern(rpp);
3039               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3040             }
3041           return parser_result;
3042 
3043           /*. . . . . . . . . . . . . . . . . . . .*/
3044           case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern
3045             {
3046               Pattern RESULT = null;
3047                 int ikpleft = (parser_stack.get(parser_top-2)).left;
3048                 int ikpright = (parser_stack.get(parser_top-2)).right;
3049                 IdKeyPattern ikp = (IdKeyPattern)(parser_stack.get(parser_top-2)).value;
3050                 int rppleft = (parser_stack.get(parser_top-0)).left;
3051                 int rppright = (parser_stack.get(parser_top-0)).right;
3052                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
3053                  RESULT = new AncestorPattern(ikp, rpp);
3054               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3055             }
3056           return parser_result;
3057 
3058           /*. . . . . . . . . . . . . . . . . . . .*/
3059           case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern
3060             {
3061               Pattern RESULT = null;
3062                 int ikpleft = (parser_stack.get(parser_top-2)).left;
3063                 int ikpright = (parser_stack.get(parser_top-2)).right;
3064                 IdKeyPattern ikp = (IdKeyPattern)(parser_stack.get(parser_top-2)).value;
3065                 int rppleft = (parser_stack.get(parser_top-0)).left;
3066                 int rppright = (parser_stack.get(parser_top-0)).right;
3067                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
3068                  RESULT = new ParentPattern(ikp, rpp);
3069               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3070             }
3071           return parser_result;
3072 
3073           /*. . . . . . . . . . . . . . . . . . . .*/
3074           case 7: // LocationPathPattern ::= IdKeyPattern
3075             {
3076               Pattern RESULT = null;
3077                 int ikpleft = (parser_stack.get(parser_top-0)).left;
3078                 int ikpright = (parser_stack.get(parser_top-0)).right;
3079                 IdKeyPattern ikp = (IdKeyPattern)(parser_stack.get(parser_top-0)).value;
3080                  RESULT = ikp;
3081               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3082             }
3083           return parser_result;
3084 
3085           /*. . . . . . . . . . . . . . . . . . . .*/
3086           case 6: // LocationPathPattern ::= SLASH RelativePathPattern
3087             {
3088               Pattern RESULT = null;
3089                 int rppleft = (parser_stack.get(parser_top-0)).left;
3090                 int rppright = (parser_stack.get(parser_top-0)).right;
3091                 RelativePathPattern rpp = (RelativePathPattern)(parser_stack.get(parser_top-0)).value;
3092                  RESULT = new AbsolutePathPattern(rpp);
3093               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3094             }
3095           return parser_result;
3096 
3097           /*. . . . . . . . . . . . . . . . . . . .*/
3098           case 5: // LocationPathPattern ::= SLASH
3099             {
3100               Pattern RESULT = null;
3101                  RESULT = new AbsolutePathPattern(null);
3102               parser_result = new Symbol(29/*LocationPathPattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3103             }
3104           return parser_result;
3105 
3106           /*. . . . . . . . . . . . . . . . . . . .*/
3107           case 4: // Pattern ::= LocationPathPattern VBAR Pattern
3108             {
3109               Pattern RESULT = null;
3110                 int lppleft = (parser_stack.get(parser_top-2)).left;
3111                 int lppright = (parser_stack.get(parser_top-2)).right;
3112                 Pattern lpp = (Pattern)(parser_stack.get(parser_top-2)).value;
3113                 int pleft = (parser_stack.get(parser_top-0)).left;
3114                 int pright = (parser_stack.get(parser_top-0)).right;
3115                 Pattern p = (Pattern)(parser_stack.get(parser_top-0)).value;
3116                  RESULT = new AlternativePattern(lpp, p);
3117               parser_result = new Symbol(28/*Pattern*/, (parser_stack.get(parser_top-2)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3118             }
3119           return parser_result;
3120 
3121           /*. . . . . . . . . . . . . . . . . . . .*/
3122           case 3: // Pattern ::= LocationPathPattern
3123             {
3124               Pattern RESULT = null;
3125                 int lppleft = (parser_stack.get(parser_top-0)).left;
3126                 int lppright = (parser_stack.get(parser_top-0)).right;
3127                 Pattern lpp = (Pattern)(parser_stack.get(parser_top-0)).value;
3128                  RESULT = lpp;
3129               parser_result = new Symbol(28/*Pattern*/, (parser_stack.get(parser_top-0)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3130             }
3131           return parser_result;
3132 
3133           /*. . . . . . . . . . . . . . . . . . . .*/
3134           case 2: // TopLevel ::= EXPRESSION Expr
3135             {
3136               SyntaxTreeNode RESULT = null;
3137                 int exprleft = (parser_stack.get(parser_top-0)).left;
3138                 int exprright = (parser_stack.get(parser_top-0)).right;
3139                 Expression expr = (Expression)(parser_stack.get(parser_top-0)).value;
3140                  RESULT = expr;
3141               parser_result = new Symbol(1/*TopLevel*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3142             }
3143           return parser_result;
3144 
3145           /*. . . . . . . . . . . . . . . . . . . .*/
3146           case 1: // TopLevel ::= PATTERN Pattern
3147             {
3148               SyntaxTreeNode RESULT = null;
3149                 int patternleft = (parser_stack.get(parser_top-0)).left;
3150                 int patternright = (parser_stack.get(parser_top-0)).right;
3151                 Pattern pattern = (Pattern)(parser_stack.get(parser_top-0)).value;
3152                  RESULT = pattern;
3153               parser_result = new Symbol(1/*TopLevel*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3154             }
3155           return parser_result;
3156 
3157           /*. . . . . . . . . . . . . . . . . . . .*/
3158           case 0: // $START ::= TopLevel EOF
3159             {
3160               Object RESULT = null;
3161                 int start_valleft = (parser_stack.get(parser_top-1)).left;
3162                 int start_valright = (parser_stack.get(parser_top-1)).right;
3163                 SyntaxTreeNode start_val = (SyntaxTreeNode)(parser_stack.get(parser_top-1)).value;
3164                 RESULT = start_val;
3165               parser_result = new Symbol(0/*$START*/, (parser_stack.get(parser_top-1)).left, (parser_stack.get(parser_top-0)).right, RESULT);
3166             }
3167           /* ACCEPT */
3168           parser_parser.done_parsing();
3169           return parser_result;
3170 
3171           /* . . . . . .*/
3172           default:
3173             throw new Exception(
3174                "Invalid action number found in internal parse table");
3175 
3176         }
3177     }
3178 }
< prev index next >