|
|||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object net.sf.saxon.expr.ExpressionParser
public class 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 interface |
ExpressionParser.FLWORClause
|
static class |
ExpressionParser.ForClause
|
protected static class |
ExpressionParser.TemporaryContainer
|
Field Summary | |
---|---|
protected boolean |
compileWithTracing
|
protected ExpressionParser.TemporaryContainer |
defaultContainer
|
protected StaticContext |
env
|
protected int |
language
|
protected NameChecker |
nameChecker
|
protected Stack<Binding> |
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()
Create an expression parser |
Method Summary | |
---|---|
protected String |
currentTokenDisplay()
Display the current token in an error message |
protected void |
declareRangeVariable(Binding 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 Binding |
findRangeVariable(StructuredQName qName)
Locate a range variable with a given name. |
protected String |
getLanguage()
Get the current language (XPath or XQuery) |
Stack<Binding> |
getRangeVariableStack()
Get the range variable stack. |
Tokenizer |
getTokenizer()
Get the tokenizer (the lexical analyzer) |
protected void |
grumble(String message)
Report a syntax error (a static error with error code XP0003) |
protected void |
grumble(String message,
String errorCode)
Report a static error |
protected void |
grumble(String message,
StructuredQName errorCode)
Report a static error |
boolean |
isCompileWithTracing()
Determine whether trace hooks are included in the compiled code. |
protected boolean |
isKeyword(String s)
Test whether the current token is a given keyword. |
protected boolean |
isNamespaceTestAllowed()
Ask whether the syntax namespace-node() is allowed in a node kind test. |
LocalNameTest |
makeLocalNameTest(short nodeType,
String localName)
Make a LocalNameTest (*:name) |
int |
makeNameCode(String qname,
boolean useDefault)
Make a NameCode, using the static context for namespace resolution |
int |
makeNameCodeSilently(String qname,
boolean useDefault)
Make a NameCode, using the static context for namespace resolution. |
NamespaceTest |
makeNamespaceTest(short nodeType,
String prefix)
Make a NamespaceTest (name:*) |
NameTest |
makeNameTest(short nodeType,
String qname,
boolean useDefault)
Make a NameTest, using the static context for namespace resolution |
protected Literal |
makeStringLiteral(String currentTokenValue)
Method to make a string literal from a token identified as a string literal. |
StructuredQName |
makeStructuredQName(String qname,
boolean useDefault)
Make a Structured QName, using the static context for namespace resolution |
protected Expression |
makeTracer(int startOffset,
Expression exp,
int construct,
StructuredQName qName)
If tracing, wrap an expression in a trace instruction |
protected void |
nextToken()
Read the next token, catching any exception thrown by the tokenizer |
Expression |
parse(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 |
parseDynamicFunctionCall(Expression functionItem)
Parse a dynamic function call |
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 |
parseFunctionCall()
Parse a function call. |
protected ItemType |
parseFunctionItemType()
Get the item type used for function items (XQuery 1.1 higher order functions) |
protected Expression |
parseInlineFunction()
Parse an inline function "function" "(" ParamList? ")" ("as" SequenceType)? EnclosedExpr On entry, "function (" has already been read |
protected ItemType |
parseItemType()
Parse an ItemType within a SequenceType |
protected Expression |
parseLiteralFunctionItem()
Parse a literal function item (introduced in XQuery 1.1) Syntax: QName # integer The QName and # have already been read |
protected Expression |
parseMappingExpression()
Parse a mapping expression. |
protected NodeTest |
parseNodeTest(short nodeType)
Parse a NodeTest. |
protected ItemType |
parseParenthesizedItemType()
Parse a parenthesized item type (allowed in XQuery 1.1 only) |
Pattern |
parsePattern(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(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 |
parseTryCatchExpression()
Parse a try/catch Expression This construct is XQuery-1.1 only, so the XPath version of this method throws an error unconditionally |
protected Expression |
parseTypeswitchExpression()
Parse a Typeswitch Expression. |
protected Expression |
parseValidateExpression()
Parse a Validate Expression. |
void |
setCompileWithTracing(boolean trueOrFalse)
Set whether trace hooks are to be included in the compiled code. |
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(Stack<Binding> stack)
Set the range variable stack. |
void |
setScanOnly(boolean scanOnly)
Set that we are parsing in "scan only" |
protected void |
undeclareRangeVariable()
Note when the most recently declared range variable has gone out of scope |
protected void |
warning(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 Stack<Binding> rangeVariables
protected ExpressionParser.TemporaryContainer defaultContainer
protected NameChecker nameChecker
protected boolean scanOnly
protected boolean compileWithTracing
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 void setCompileWithTracing(boolean trueOrFalse)
trueOrFalse
- true if trace code is to be compiled in, false otherwisepublic boolean isCompileWithTracing()
public Tokenizer getTokenizer()
protected void nextToken() throws XPathException
XPathException
protected void expect(int token) throws XPathException
token
- the expected token
XPathException
- if the current token is not the expected
tokenprotected void grumble(String message) throws XPathException
message
- the error message
XPathException
- always thrown: an exception containing the
supplied messageprotected void grumble(String message, String errorCode) throws XPathException
message
- the error message
XPathException
- always thrown: an exception containing the
supplied messageprotected void grumble(String message, StructuredQName errorCode) throws XPathException
message
- the error messageerrorCode
- the error code
XPathException
- always thrown: an exception containing the
supplied messageprotected void warning(String message) throws XPathException
message
- the text of the message
XPathException
protected String getLanguage()
protected String currentTokenDisplay()
public Expression parse(String expression, int start, int terminator, int lineNumber, StaticContext env) throws XPathException
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
XPathException
- if the expression contains a syntax errorpublic Pattern parsePattern(String pattern, StaticContext env) throws XPathException
pattern
- the pattern expressed as a Stringenv
- the static context for the pattern
XPathException
- if the pattern contains a syntax errorpublic SequenceType parseSequenceType(String input, StaticContext env) throws XPathException
input
- the string, which should conform to the XPath SequenceType
productionenv
- the static context
XPathException
- if any error is encounteredprotected Expression parseExpression() throws XPathException
XPathException
- if the expression contains a syntax errorprotected Expression parseExprSingle() throws XPathException
XPathException
- if any error is encounteredprotected Expression parseTypeswitchExpression() throws XPathException
XPathException
protected Expression parseValidateExpression() throws XPathException
XPathException
protected Expression parseExtensionExpression() throws XPathException
XPathException
protected Expression parseTryCatchExpression() throws XPathException
XPathException
protected Expression parseForExpression() throws XPathException
XPathException
- if any error is encounteredprotected Expression parseMappingExpression() throws XPathException
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.
XPathException
- if any error is encounteredprotected SequenceType parseSequenceType() throws XPathException
XPathException
- if any error is encounteredprotected ItemType parseItemType() throws XPathException
XPathException
protected ItemType parseFunctionItemType() throws XPathException
XPathException
protected ItemType parseParenthesizedItemType() throws XPathException
XPathException
protected Expression parseRelativePath() throws XPathException
XPathException
- if any error is encounteredprotected Expression parseRemainingPath(Expression start) throws XPathException
start
- the initial implicit expression: root() in the case of "/", root()/descendant-or-self::node in
the case of "//"
XPathException
protected Expression parseStepExpression() throws XPathException
XPathException
- if any error is encounteredprotected Literal makeStringLiteral(String currentTokenValue) throws XPathException
currentTokenValue
- the token as read (excluding quotation marks)
XPathException
protected Expression parseConstructor() throws XPathException
XPathException
protected Expression parseDynamicFunctionCall(Expression functionItem) throws XPathException
XPathException
protected NodeTest parseNodeTest(short nodeType) throws XPathException
nodeType
- the node type being sought if one is specified
XPathException
- if any error is encounteredprotected boolean isNamespaceTestAllowed()
protected Expression parseFunctionCall() throws XPathException
XPathException
- if any error is encounteredprotected Expression parseLiteralFunctionItem() throws XPathException
XPathException
protected Expression parseInlineFunction() throws XPathException
XPathException
- if a syntax error is foundprotected void declareRangeVariable(Binding declaration) throws XPathException
declaration
- the variable declaration to be added to the stack
XPathException
- if any error is encounteredprotected void undeclareRangeVariable()
protected Binding findRangeVariable(StructuredQName qName)
qName
- identifies the name of the range variable
public Stack<Binding> getRangeVariableStack()
public void setRangeVariableStack(Stack<Binding> stack)
stack
- the stack to be used for local variables declared within the expressionpublic final int makeNameCode(String qname, boolean useDefault) throws XPathException
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).
XPathException
- if the name is invalid, or the prefix
undeclaredpublic final int makeNameCodeSilently(String qname, boolean useDefault) throws XPathException, QNameException
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).
XPathException
- if the name is invalid, or the prefix
undeclared
QNameException
public final StructuredQName makeStructuredQName(String qname, boolean useDefault) throws XPathException
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).
XPathException
- if the name is invalid, or the prefix
undeclaredpublic NameTest makeNameTest(short nodeType, String qname, boolean useDefault) throws XPathException
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
XPathException
- if the QName is invalidpublic NamespaceTest makeNamespaceTest(short nodeType, String prefix) throws XPathException
nodeType
- integer code identifying the type of node requiredprefix
- the namespace prefix
XPathException
- if the namespace prefix is not declaredpublic LocalNameTest makeLocalNameTest(short nodeType, String localName) throws XPathException
nodeType
- the kind of node to be matchedlocalName
- the requred local name
XPathException
- if the local name is invalidprotected void setLocation(Expression exp)
exp
- the expression whose location information is to be setprotected void setLocation(Expression exp, int offset)
exp
- the expression whose location information is to be setoffset
- the character position within the expression (ignoring newlines)protected Expression makeTracer(int startOffset, Expression exp, int construct, StructuredQName qName)
startOffset
- the position of the expression in the soruceexp
- the expression to be wrappedconstruct
- integer constant identifying the kind of constructqName
- the name of the construct (if applicable)
protected boolean isKeyword(String s)
s
- The string to be compared with the current token
public void setScanOnly(boolean scanOnly)
scanOnly
- true if parsing is to proceed in scan-only mode. In this mode
namespace bindings are not yet known, so no attempt is made to look up namespace
prefixes.
|
|||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |