15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright 2005 Frerich Raabe <raabe@kde.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Apple Inc. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%{ 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathFunctions.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathNSResolver.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathParser.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathPath.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathPredicate.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathStep.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathVariableReference.h" 39e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "wtf/FastMalloc.h" 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define YYMALLOC fastMalloc 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define YYFREE fastFree 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define YYENABLE_NLS 0 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define YYLTYPE_IS_TRIVIAL 1 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define YYDEBUG 0 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define YYMAXDEPTH 10000 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace XPath; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%} 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 54aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch%pure-parser 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%parse-param { WebCore::XPath::Parser* parser } 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%union 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::Step::Axis axis; 605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::Step::NodeTest* nodeTest; 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::NumericOp::Opcode numop; 625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::EqTestOp::Opcode eqop; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String* str; 645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::Expression* expr; 655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WillBeHeapVector<OwnPtrWillBeMember<WebCore::XPath::Predicate> >* predList; 665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WillBeHeapVector<OwnPtrWillBeMember<WebCore::XPath::Expression> >* argList; 675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::Step* step; 685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebCore::XPath::LocationPath* locationPath; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%{ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static int xpathyylex(YYSTYPE* yylval) { return Parser::current()->lex(yylval); } 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static void xpathyyerror(void*, const char*) { } 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%} 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%left <numop> MULOP 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%left <eqop> EQOP RELOP 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%left PLUS MINUS 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%left OR AND 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%token <axis> AXISNAME 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%token <str> NODETYPE PI FUNCTIONNAME LITERAL 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%token <str> VARIABLEREFERENCE NUMBER 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%token DOTDOT SLASHSLASH 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%token <str> NAMETEST 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%token XPATH_ERROR 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <locationPath> LocationPath 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <locationPath> AbsoluteLocationPath 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <locationPath> RelativeLocationPath 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <step> Step 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <axis> AxisSpecifier 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <step> DescendantOrSelf 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <nodeTest> NodeTest 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> Predicate 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <predList> OptionalPredicateList 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <predList> PredicateList 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <step> AbbreviatedStep 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> Expr 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> PrimaryExpr 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> FunctionCall 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <argList> ArgumentList 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> Argument 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> UnionExpr 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> PathExpr 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> FilterExpr 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> OrExpr 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> AndExpr 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> EqualityExpr 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> RelationalExpr 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> AdditiveExpr 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> MultiplicativeExpr 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%type <expr> UnaryExpr 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%% 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Expr: 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OrExpr 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->m_topExpr = $1; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)LocationPath: 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RelativeLocationPath 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->setAbsolute(false); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AbsoluteLocationPath 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->setAbsolute(true); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AbsoluteLocationPath: 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) '/' 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new LocationPath; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) '/' RelativeLocationPath 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = $2; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DescendantOrSelf RelativeLocationPath 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = $2; 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->insertFirstStep($1); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RelativeLocationPath: 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Step 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new LocationPath; 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->appendStep($1); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RelativeLocationPath '/' Step 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->appendStep($3); 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RelativeLocationPath DescendantOrSelf Step 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->appendStep($2); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$->appendStep($3); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($2); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Step: 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NodeTest OptionalPredicateList 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ($2) { 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::ChildAxis, *$1, *$2); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deletePredicateVector($2); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::ChildAxis, *$1); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteNodeTest($1); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NAMETEST OptionalPredicateList 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 195a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString localName; 196a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString namespaceURI; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!parser->expandQName(*$1, localName, namespaceURI)) { 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->m_gotNamespaceError = true; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) YYABORT; 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ($2) { 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI), *$2); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deletePredicateVector($2); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI)); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AxisSpecifier NodeTest OptionalPredicateList 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ($3) { 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step($1, *$2, *$3); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deletePredicateVector($3); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step($1, *$2); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteNodeTest($2); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AxisSpecifier NAMETEST OptionalPredicateList 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 224a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString localName; 225a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString namespaceURI; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!parser->expandQName(*$2, localName, namespaceURI)) { 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->m_gotNamespaceError = true; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) YYABORT; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ($3) { 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step($1, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI), *$3); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deletePredicateVector($3); 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step($1, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI)); 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($2); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AbbreviatedStep 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AxisSpecifier: 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AXISNAME 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) '@' 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = Step::AttributeAxis; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NodeTest: 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NODETYPE '(' ')' 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (*$1 == "node") 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step::NodeTest(Step::NodeTest::AnyNodeTest); 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (*$1 == "text") 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step::NodeTest(Step::NodeTest::TextNodeTest); 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (*$1 == "comment") 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step::NodeTest(Step::NodeTest::CommentNodeTest); 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerNodeTest($$); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PI '(' ')' 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest); 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerNodeTest($$); 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PI '(' LITERAL ')' 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, $3->stripWhiteSpace()); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($3); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerNodeTest($$); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)OptionalPredicateList: 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* empty */ 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = 0; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PredicateList 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PredicateList: 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Predicate 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 294d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new WillBeHeapVector<OwnPtrWillBeMember<Predicate> >; 295d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->append(adoptPtrWillBeNoop(new Predicate(adoptPtrWillBeNoop($1)))); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerPredicateVector($$); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PredicateList Predicate 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 302d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->append(adoptPtrWillBeNoop(new Predicate(adoptPtrWillBeNoop($2)))); 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($2); 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Predicate: 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) '[' Expr ']' 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = $2; 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DescendantOrSelf: 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SLASHSLASH 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AbbreviatedStep: 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) '.' 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOTDOT 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PrimaryExpr: 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VARIABLEREFERENCE 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new VariableReference(*$1); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) '(' Expr ')' 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = $2; 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LITERAL 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new StringExpression(*$1); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NUMBER 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Number($1->toDouble()); 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FunctionCall 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FunctionCall: 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FUNCTIONNAME '(' ')' 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = createFunction(*$1); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!$$) 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) YYABORT; 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FUNCTIONNAME '(' ArgumentList ')' 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = createFunction(*$1, *$3); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!$$) 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) YYABORT; 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteString($1); 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deleteExpressionVector($3); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ArgumentList: 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Argument 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 390d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new WillBeHeapVector<OwnPtrWillBeMember<Expression> >; 391d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->append(adoptPtrWillBeNoop($1)); 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerExpressionVector($$); 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ArgumentList ',' Argument 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 398d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->append(adoptPtrWillBeNoop($3)); 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Argument: 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Expr 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)UnionExpr: 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PathExpr 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UnionExpr '|' PathExpr 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Union; 413d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->addSubExpression(adoptPtrWillBeNoop($1)); 414d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->addSubExpression(adoptPtrWillBeNoop($3)); 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PathExpr: 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LocationPath 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = $1; 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FilterExpr 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FilterExpr '/' RelativeLocationPath 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $3->setAbsolute(true); 43209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) $$ = new Path($1, $3); 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FilterExpr DescendantOrSelf RelativeLocationPath 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $3->insertFirstStep($2); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $3->setAbsolute(true); 44209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) $$ = new Path($1, $3); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($2); 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FilterExpr: 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrimaryExpr 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrimaryExpr PredicateList 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 455d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new Filter(adoptPtrWillBeNoop($1), *$2); 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->deletePredicateVector($2); 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)OrExpr: 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AndExpr 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OrExpr OR AndExpr 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 467d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new LogicalOp(LogicalOp::OP_Or, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AndExpr: 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EqualityExpr 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AndExpr AND EqualityExpr 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 479d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new LogicalOp(LogicalOp::OP_And, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)EqualityExpr: 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RelationalExpr 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EqualityExpr EQOP RelationalExpr 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 491d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new EqTestOp($2, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RelationalExpr: 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AdditiveExpr 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RelationalExpr RELOP AdditiveExpr 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 503d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new EqTestOp($2, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AdditiveExpr: 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MultiplicativeExpr 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AdditiveExpr PLUS MultiplicativeExpr 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 515d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new NumericOp(NumericOp::OP_Add, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AdditiveExpr MINUS MultiplicativeExpr 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 523d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new NumericOp(NumericOp::OP_Sub, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)MultiplicativeExpr: 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UnaryExpr 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MultiplicativeExpr MULOP UnaryExpr 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 535d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$ = new NumericOp($2, adoptPtrWillBeNoop($1), adoptPtrWillBeNoop($3)); 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($1); 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($3); 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)UnaryExpr: 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UnionExpr 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) | 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MINUS UnaryExpr 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) $$ = new Negative; 548d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) $$->addSubExpression(adoptPtrWillBeNoop($2)); 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->unregisterParseNode($2); 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parser->registerParseNode($$); 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ; 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)%% 555