|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.sf.saxon.expr.ExpressionParser
Parser for XPath expressions and XSLT patterns. This code was originally inspired by James Clark's xt but has been totally rewritten (several times)
Nested Class Summary | |
static class |
ExpressionParser.ForClause
|
protected static class |
ExpressionParser.TemporaryContainer
|
Field Summary | |
protected StaticContext |
env
|
protected int |
language
|
protected NameChecker |
nameChecker
|
protected java.util.Stack |
rangeVariables
|
protected boolean |
scanOnly
|
protected static int |
SEQUENCE_TYPE
|
protected Tokenizer |
t
|
protected static int |
XPATH
|
protected static int |
XQUERY
|
protected static int |
XSLT_PATTERN
|
Constructor Summary | |
ExpressionParser()
|
Method Summary | |
protected java.lang.String |
currentTokenDisplay()
Display the current token in an error message |
protected void |
declareRangeVariable(VariableDeclaration declaration)
Declare a range variable (record its existence within the parser). |
protected void |
expect(int token)
Expect a given token; fail if the current token is different. |
protected java.lang.String |
getLanguage()
Get the current language (XPath or XQuery) |
java.util.Stack |
getRangeVariableStack()
Get the range variable stack. |
Tokenizer |
getTokenizer()
|
protected void |
grumble(java.lang.String message)
Report a syntax error (a static error with error code XP0003) |
protected void |
grumble(java.lang.String message,
java.lang.String errorCode)
Report a static error |
protected boolean |
isKeyword(java.lang.String s)
Test whether the current token is a given keyword. |
LocalNameTest |
makeLocalNameTest(short nodeType,
java.lang.String localName)
Make a LocalNameTest (*:name) |
int |
makeNameCode(java.lang.String qname,
boolean useDefault)
Make a NameCode, using this Element as the context for namespace resolution |
NamespaceTest |
makeNamespaceTest(short nodeType,
java.lang.String prefix)
Make a NamespaceTest (name:*) |
NameTest |
makeNameTest(short nodeType,
java.lang.String qname,
boolean useDefault)
Make a NameTest, using the static context for namespace resolution |
protected StringValue |
makeStringLiteral(java.lang.String currentTokenValue)
Method to make a string literal from a token identified as a string literal. |
protected Expression |
makeTracer(int startOffset,
Expression exp,
int construct,
int objectNameCode)
If tracing, wrap an instruction in a trace instruction |
protected void |
nextToken()
Read the next token, catching any exception thrown by the tokenizer |
Expression |
parse(java.lang.String expression,
int start,
int terminator,
int lineNumber,
StaticContext env)
Parse a string representing an expression |
protected Expression |
parseConstructor()
Parse a node constructor. |
protected Expression |
parseExpression()
Parse a top-level Expression: ExprSingle ( ',' ExprSingle )* |
protected Expression |
parseExprSingle()
Parse an ExprSingle |
protected Expression |
parseExtensionExpression()
Parse an Extension Expression This construct is XQuery-only, so the XPath version of this method throws an error unconditionally |
protected Expression |
parseForExpression()
Parse a FOR expression: for $x in expr (',' $y in expr)* 'return' expr |
protected Expression |
parseMappingExpression()
Parse a mapping expression. |
protected NodeTest |
parseNodeTest(short nodeType)
Parse a NodeTest. |
Pattern |
parsePattern(java.lang.String pattern,
StaticContext env)
Parse a string representing an XSLT pattern |
protected Expression |
parseRelativePath()
Parse a relative path (a sequence of steps). |
protected Expression |
parseRemainingPath(Expression start)
Parse the remaining steps of an absolute path expression (one starting in "/" or "//"). |
protected SequenceType |
parseSequenceType()
Parse the sequence type production. |
SequenceType |
parseSequenceType(java.lang.String input,
StaticContext env)
Parse a string representing a sequence type |
protected Expression |
parseStepExpression()
Parse a step (including an optional sequence of predicates) |
protected Expression |
parseTypeswitchExpression()
Parse a Typeswitch Expression. |
protected Expression |
parseValidateExpression()
Parse a Validate Expression. |
protected void |
setLocation(Expression exp)
Set location information on an expression. |
protected void |
setLocation(Expression exp,
int offset)
Set location information on an expression. |
void |
setRangeVariableStack(java.util.Stack stack)
Set the range variable stack. |
void |
setScanOnly(boolean scanOnly)
|
protected void |
undeclareRangeVariable()
Note when the most recently declared range variable has gone out of scope |
protected void |
warning(java.lang.String message)
Output a warning message |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected Tokenizer t
protected StaticContext env
protected java.util.Stack rangeVariables
protected NameChecker nameChecker
protected boolean scanOnly
protected int language
protected static final int XPATH
protected static final int XSLT_PATTERN
protected static final int SEQUENCE_TYPE
protected static final int XQUERY
Constructor Detail |
public ExpressionParser()
Method Detail |
public Tokenizer getTokenizer()
protected void nextToken() throws StaticError
StaticError
protected void expect(int token) throws StaticError
token
- the expected token
StaticError
- if the current token is not the expected
tokenprotected void grumble(java.lang.String message) throws StaticError
message
- the error message
StaticError
- always thrown: an exception containing the
supplied messageprotected void grumble(java.lang.String message, java.lang.String errorCode) throws StaticError
message
- the error messageerrorCode
- the error code
StaticError
- always thrown: an exception containing the
supplied messageprotected void warning(java.lang.String message) throws StaticError
StaticError
protected java.lang.String getLanguage()
protected java.lang.String currentTokenDisplay()
public Expression parse(java.lang.String expression, int start, int terminator, int lineNumber, StaticContext env) throws StaticError
expression
- the expression expressed as a Stringstart
- offset within the string where parsing is to startterminator
- character to treat as terminating the expressionlineNumber
- location of the start of the expression, for diagnosticsenv
- the static context for the expression
StaticError
- if the expression contains a syntax errorpublic Pattern parsePattern(java.lang.String pattern, StaticContext env) throws StaticError
pattern
- the pattern expressed as a Stringenv
- the static context for the pattern
StaticError
- if the pattern contains a syntax errorpublic SequenceType parseSequenceType(java.lang.String input, StaticContext env) throws StaticError
input
- the string, which should conform to the XPath SequenceType
productionenv
- the static context
StaticError
- if any error is encounteredprotected Expression parseExpression() throws StaticError
StaticError
- if the expression contains a syntax errorprotected Expression parseExprSingle() throws StaticError
StaticError
- if any error is encounteredprotected Expression parseTypeswitchExpression() throws StaticError
StaticError
protected Expression parseValidateExpression() throws StaticError
StaticError
protected Expression parseExtensionExpression() throws StaticError
StaticError
protected Expression parseForExpression() throws StaticError
StaticError
- if any error is encounteredprotected Expression parseMappingExpression() throws StaticError
Syntax:
(for|some|every) $x in expr (',' $y in expr)* (return|satisfies) expr
On entry, the current token indicates whether a for, some, or every expression is expected.
StaticError
- if any error is encounteredprotected SequenceType parseSequenceType() throws StaticError
StaticError
- if any error is encounteredprotected Expression parseRelativePath() throws StaticError
StaticError
- if any error is encounteredprotected Expression parseRemainingPath(Expression start) throws StaticError
start
- the initial implicit expression: root() in the case of "/", root()/descendant-or-self::node in
the case of "//"
StaticError
protected Expression parseStepExpression() throws StaticError
StaticError
- if any error is encounteredprotected StringValue makeStringLiteral(java.lang.String currentTokenValue) throws StaticError
currentTokenValue
-
StaticError
protected Expression parseConstructor() throws StaticError
StaticError
protected NodeTest parseNodeTest(short nodeType) throws StaticError
nodeType
- the node type being sought if one is specified
StaticError
- if any error is encounteredprotected void declareRangeVariable(VariableDeclaration declaration) throws StaticError
declaration
- the VariableDeclaration to be added to the stack
StaticError
- if any error is encounteredprotected void undeclareRangeVariable()
public java.util.Stack getRangeVariableStack()
public void setRangeVariableStack(java.util.Stack stack)
public final int makeNameCode(java.lang.String qname, boolean useDefault) throws StaticError
qname
- The name as written, in the form "[prefix:]localname"useDefault
- Defines the action when there is no prefix. If
true, use the default namespace URI for element names. If false,
use no namespace URI (as for attribute names).
StaticError
- if the name is invalid, or the prefix
undeclaredpublic NameTest makeNameTest(short nodeType, java.lang.String qname, boolean useDefault) throws StaticError
nodeType
- the type of node required (identified by a constant in
class Type)qname
- the lexical QName of the required nodeuseDefault
- true if the default namespace should be used when
the QName is unprefixed
StaticError
- if the QName is invalidpublic NamespaceTest makeNamespaceTest(short nodeType, java.lang.String prefix) throws StaticError
nodeType
- integer code identifying the type of node requiredprefix
- the namespace prefix
StaticError
- if the namespace prefix is not declaredpublic LocalNameTest makeLocalNameTest(short nodeType, java.lang.String localName) throws StaticError
nodeType
- the kind of node to be matchedlocalName
- the requred local name
StaticError
- if the local name is invalidprotected void setLocation(Expression exp)
protected void setLocation(Expression exp, int offset)
protected Expression makeTracer(int startOffset, Expression exp, int construct, int objectNameCode)
protected boolean isKeyword(java.lang.String s)
s
- The string to be compared with the current token
public void setScanOnly(boolean scanOnly)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |