2 * Copyright 2005 Maksim Orlovich <maksim@kde.org>
3 * Copyright (C) 2006 Apple Computer, Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include "core/xml/XPathPredicate.h"
31 #include "core/xml/XPathStep.h"
32 #include "wtf/Allocator.h"
37 class XPathNSResolver
;
52 NumericOp::Opcode numop
;
53 EqTestOp::Opcode eqop
;
55 Token(int t
) : type(t
) { }
56 Token(int t
, const String
& v
): type(t
), str(v
) { }
57 Token(int t
, Step::Axis v
): type(t
), axis(v
) { }
58 Token(int t
, NumericOp::Opcode v
): type(t
), numop(v
) { }
59 Token(int t
, EqTestOp::Opcode v
): type(t
), eqop(v
) { }
63 WTF_MAKE_NONCOPYABLE(Parser
);
69 XPathNSResolver
* resolver() const { return m_resolver
.get(); }
70 bool expandQName(const String
& qName
, AtomicString
& localName
, AtomicString
& namespaceURI
);
72 Expression
* parseStatement(const String
& statement
, XPathNSResolver
*, ExceptionState
&);
74 static Parser
* current() { return currentParser
; }
76 int lex(void* yylval
);
78 Member
<Expression
> m_topExpr
;
79 bool m_gotNamespaceError
;
81 void registerString(String
*);
82 void deleteString(String
*);
85 bool isBinaryOperatorContext() const;
88 Token
makeTokenAndAdvance(int type
, int advance
= 1);
89 Token
makeTokenAndAdvance(int type
, NumericOp::Opcode
, int advance
= 1);
90 Token
makeTokenAndAdvance(int type
, EqTestOp::Opcode
, int advance
= 1);
91 char peekAheadHelper();
96 bool lexNCName(String
&);
97 bool lexQName(String
&);
100 Token
nextTokenInternal();
102 void reset(const String
& data
);
104 static Parser
* currentParser
;
109 Member
<XPathNSResolver
> m_resolver
;
111 HashSet
<OwnPtr
<String
>> m_strings
;
118 int xpathyyparse(blink::XPath::Parser
*);