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