18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2005 Frerich Raabe <raabe@kde.org>
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Apple Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%{
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XPATH)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XPathFunctions.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XPathNSResolver.h"
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XPathParser.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XPathPath.h"
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XPathPredicate.h"
39c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville#include "XPathStep.h"
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XPathVariableReference.h"
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/FastMalloc.h>
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define YYMALLOC fastMalloc
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define YYFREE fastFree
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define YYENABLE_NLS 0
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define YYLTYPE_IS_TRIVIAL 1
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define YYDEBUG 0
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define YYMAXDEPTH 10000
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace XPath;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%}
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%pure_parser
57c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville%parse-param { WebCore::XPath::Parser* parser }
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%union
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Step::Axis axis;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Step::NodeTest* nodeTest;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NumericOp::Opcode numop;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    EqTestOp::Opcode eqop;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    String* str;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Expression* expr;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Vector<Predicate*>* predList;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Vector<Expression*>* argList;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Step* step;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    LocationPath* locationPath;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%{
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic int xpathyylex(YYSTYPE* yylval) { return Parser::current()->lex(yylval); }
76c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Savillestatic void xpathyyerror(void*, const char*) { }
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%}
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%left <numop> MULOP
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%left <eqop> EQOP RELOP
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%left PLUS MINUS
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%left OR AND
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%token <axis> AXISNAME
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%token <str> NODETYPE PI FUNCTIONNAME LITERAL
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%token <str> VARIABLEREFERENCE NUMBER
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%token DOTDOT SLASHSLASH
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%token <str> NAMETEST
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%token XPATH_ERROR
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <locationPath> LocationPath
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <locationPath> AbsoluteLocationPath
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <locationPath> RelativeLocationPath
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <step> Step
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <axis> AxisSpecifier
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <step> DescendantOrSelf
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <nodeTest> NodeTest
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> Predicate
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <predList> OptionalPredicateList
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <predList> PredicateList
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <step> AbbreviatedStep
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> Expr
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> PrimaryExpr
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> FunctionCall
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <argList> ArgumentList
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> Argument
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> UnionExpr
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> PathExpr
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> FilterExpr
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> OrExpr
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> AndExpr
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> EqualityExpr
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> RelationalExpr
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> AdditiveExpr
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> MultiplicativeExpr
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%type <expr> UnaryExpr
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%%
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectExpr:
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    OrExpr
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
123c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->m_topExpr = $1;
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectLocationPath:
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RelativeLocationPath
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->setAbsolute(false);
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AbsoluteLocationPath
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->setAbsolute(true);
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAbsoluteLocationPath:
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    '/'
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new LocationPath;
143c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    '/' RelativeLocationPath
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = $2;
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    DescendantOrSelf RelativeLocationPath
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = $2;
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->insertFirstStep($1);
155c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRelativeLocationPath:
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Step
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new LocationPath;
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->appendStep($1);
164c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
165c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RelativeLocationPath '/' Step
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->appendStep($3);
171c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RelativeLocationPath DescendantOrSelf Step
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->appendStep($2);
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->appendStep($3);
178c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($2);
179c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectStep:
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NodeTest OptionalPredicateList
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ($2) {
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step(Step::ChildAxis, *$1, *$2);
188c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville            parser->deletePredicateVector($2);
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step(Step::ChildAxis, *$1);
191c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteNodeTest($1);
192c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NAMETEST OptionalPredicateList
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String localName;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String namespaceURI;
199c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        if (!parser->expandQName(*$1, localName, namespaceURI)) {
200c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville            parser->m_gotNamespaceError = true;
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            YYABORT;
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ($2) {
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI), *$2);
206c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville            parser->deletePredicateVector($2);
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI));
209c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
210c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AxisSpecifier NodeTest OptionalPredicateList
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ($3) {
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step($1, *$2, *$3);
217c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville            parser->deletePredicateVector($3);
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step($1, *$2);
220c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteNodeTest($2);
221c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AxisSpecifier NAMETEST OptionalPredicateList
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String localName;
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String namespaceURI;
228c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        if (!parser->expandQName(*$2, localName, namespaceURI)) {
229c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville            parser->m_gotNamespaceError = true;
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            YYABORT;
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ($3) {
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step($1, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI), *$3);
235c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville            parser->deletePredicateVector($3);
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step($1, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI));
238c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($2);
239c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AbbreviatedStep
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAxisSpecifier:
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AXISNAME
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    '@'
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = Step::AttributeAxis;
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNodeTest:
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NODETYPE '(' ')'
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (*$1 == "node")
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step::NodeTest(Step::NodeTest::AnyNodeTest);
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else if (*$1 == "text")
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step::NodeTest(Step::NodeTest::TextNodeTest);
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else if (*$1 == "comment")
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            $$ = new Step::NodeTest(Step::NodeTest::CommentNodeTest);
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
264c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
265c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerNodeTest($$);
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PI '(' ')'
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest);
271c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
272c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerNodeTest($$);
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PI '(' LITERAL ')'
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, $3->stripWhiteSpace());
278c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
279c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($3);
280c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerNodeTest($$);
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectOptionalPredicateList:
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /* empty */
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = 0;
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PredicateList
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPredicateList:
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Predicate
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Vector<Predicate*>;
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->append(new Predicate($1));
298c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
299c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerPredicateVector($$);
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PredicateList Predicate
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->append(new Predicate($2));
305c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($2);
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPredicate:
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    '[' Expr ']'
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = $2;
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectDescendantOrSelf:
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    SLASHSLASH
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest));
320c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAbbreviatedStep:
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    '.'
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest));
328c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    DOTDOT
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest));
334c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPrimaryExpr:
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    VARIABLEREFERENCE
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new VariableReference(*$1);
342c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
343c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    '(' Expr ')'
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = $2;
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    LITERAL
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new StringExpression(*$1);
354c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
355c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NUMBER
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Number($1->toDouble());
361c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
362c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FunctionCall
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFunctionCall:
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FUNCTIONNAME '(' ')'
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = createFunction(*$1);
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!$$)
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            YYABORT;
374c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
375c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FUNCTIONNAME '(' ArgumentList ')'
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = createFunction(*$1, *$3);
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!$$)
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            YYABORT;
383c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteString($1);
384c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deleteExpressionVector($3);
385c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectArgumentList:
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Argument
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Vector<Expression*>;
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->append($1);
394c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
395c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerExpressionVector($$);
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ArgumentList ',' Argument
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->append($3);
401c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectArgument:
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Expr
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectUnionExpr:
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PathExpr
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    UnionExpr '|' PathExpr
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Union;
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->addSubExpression($1);
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->addSubExpression($3);
417c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
418c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
419c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPathExpr:
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    LocationPath
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = $1;
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FilterExpr
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FilterExpr '/' RelativeLocationPath
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $3->setAbsolute(true);
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Path(static_cast<Filter*>($1), $3);
435c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
436c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
437c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FilterExpr DescendantOrSelf RelativeLocationPath
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $3->insertFirstStep($2);
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $3->setAbsolute(true);
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Path(static_cast<Filter*>($1), $3);
445c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
446c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($2);
447c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
448c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFilterExpr:
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PrimaryExpr
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PrimaryExpr PredicateList
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Filter($1, *$2);
458c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
459c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->deletePredicateVector($2);
460c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectOrExpr:
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AndExpr
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    OrExpr OR AndExpr
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new LogicalOp(LogicalOp::OP_Or, $1, $3);
470c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
471c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
472c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAndExpr:
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    EqualityExpr
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AndExpr AND EqualityExpr
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new LogicalOp(LogicalOp::OP_And, $1, $3);
482c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
483c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
484c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEqualityExpr:
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RelationalExpr
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    EqualityExpr EQOP RelationalExpr
4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new EqTestOp($2, $1, $3);
494c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
495c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
496c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRelationalExpr:
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AdditiveExpr
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RelationalExpr RELOP AdditiveExpr
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new EqTestOp($2, $1, $3);
506c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
507c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
508c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAdditiveExpr:
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MultiplicativeExpr
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AdditiveExpr PLUS MultiplicativeExpr
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new NumericOp(NumericOp::OP_Add, $1, $3);
518c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
519c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
520c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AdditiveExpr MINUS MultiplicativeExpr
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new NumericOp(NumericOp::OP_Sub, $1, $3);
526c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
527c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
528c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectMultiplicativeExpr:
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    UnaryExpr
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MultiplicativeExpr MULOP UnaryExpr
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new NumericOp($2, $1, $3);
538c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($1);
539c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($3);
540c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectUnaryExpr:
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    UnionExpr
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    |
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MINUS UnaryExpr
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$ = new Negative;
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        $$->addSubExpression($2);
551c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->unregisterParseNode($2);
552c15e83e3313f9adc8c47e19be5d8218738b663d0Wink Saville        parser->registerParseNode($$);
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ;
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%%
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
559