org.apache.xpath.compiler
Class Compiler

java.lang.Object
  extended by org.apache.xpath.compiler.OpMap
      extended by org.apache.xpath.compiler.Compiler

public class Compiler
extends OpMap

An instance of this class compiles an XPath string expression into a Expression object. This class compiles the string into a sequence of operation codes (op map) and then builds from that into an Expression tree.


Field Summary
private static boolean DEBUG
           
private  int locPathDepth
           
private  PrefixResolver m_currentPrefixResolver
          The current prefixResolver for the execution context.
(package private)  javax.xml.transform.ErrorListener m_errorHandler
          The error listener where errors will be sent.
private  FunctionTable m_functionTable
          The FunctionTable for all xpath build-in functions
(package private)  javax.xml.transform.SourceLocator m_locator
          The source locator for the expression being compiled.
private static long s_nextMethodId
           
 
Fields inherited from class org.apache.xpath.compiler.OpMap
BLOCKTOKENQUEUESIZE, m_currentPattern, m_opMap, m_tokenQueue, MAPINDEX_LENGTH, MAXTOKENQUEUESIZE
 
Constructor Summary
Compiler()
          Construct a Compiler instance that has a null error listener and a null source locator.
Compiler(javax.xml.transform.ErrorListener errorHandler, javax.xml.transform.SourceLocator locator, FunctionTable fTable)
          Construct a Compiler object with a specific ErrorListener and SourceLocator where the expression is located.
 
Method Summary
protected  Expression and(int opPos)
          Compile an 'and' operation.
protected  Expression arg(int opPos)
          Compile a function argument.
 void assertion(boolean b, java.lang.String msg)
          Tell the user of an assertion error, and probably throw an exception.
protected  Expression bool(int opPos)
          Compile a 'boolean(...)' operation.
 Expression compile(int opPos)
          Execute the XPath object from a given opcode position.
private  Expression compileExtension(int opPos)
          Compile an extension function.
(package private)  Expression compileFunction(int opPos)
          Compile a built-in XPath function.
private  Expression compileOperation(Operation operation, int opPos)
          Bottle-neck compilation of an operation with left and right operands.
private  void compilePredicates(int opPos, Expression[] predicates)
          Compiles predicates in the step.
private  Expression compileUnary(UnaryOperation unary, int opPos)
          Bottle-neck compilation of a unary operation.
 int countPredicates(int opPos)
          Count the number of predicates in the step.
protected  Expression div(int opPos)
          Compile a 'div' operation.
protected  Expression equals(int opPos)
          Compile a '=' operation.
 void error(java.lang.String msg, java.lang.Object[] args)
          Tell the user of an error, and probably throw an exception.
 Expression[] getCompiledPredicates(int opPos)
          Compile a zero or more predicates for a given match pattern.
(package private)  FunctionTable getFunctionTable()
          Get the function table
 int getLocationPathDepth()
          Get the level of the location path or union being constructed.
 PrefixResolver getNamespaceContext()
          Get the current namespace context for the xpath.
private  long getNextMethodId()
          Get the next available method id
 int getWhatToShow(int opPos)
          Get a NodeFilter bit set that tells what to show for a given node test.
protected  Expression group(int opPos)
          Compile an expression group.
protected  Expression gt(int opPos)
          Compile a '>' operation.
protected  Expression gte(int opPos)
          Compile a '>=' operation.
protected  Expression literal(int opPos)
          Compile a literal string value.
 Expression locationPath(int opPos)
          Compile a location path.
 Expression locationPathPattern(int opPos)
          Compile a location match pattern unit expression.
protected  Expression lt(int opPos)
          Compile a '<' operation.
protected  Expression lte(int opPos)
          Compile a '<=' operation.
protected  Expression matchPattern(int opPos)
          Compile an entire match pattern expression.
protected  Expression minus(int opPos)
          Compile a '-' operation.
protected  Expression mod(int opPos)
          Compile a 'mod' operation.
protected  Expression mult(int opPos)
          Compile a '*' operation.
protected  Expression neg(int opPos)
          Compile a unary '-' operation.
protected  Expression notequals(int opPos)
          Compile a '!=' operation.
protected  Expression number(int opPos)
          Compile a 'number(...)' operation.
protected  Expression numberlit(int opPos)
          Compile a literal number value.
protected  Expression or(int opPos)
          Compile an 'or' operation.
protected  Expression plus(int opPos)
          Compile a '+' operation.
 Expression predicate(int opPos)
          Compile a location step predicate expression.
 void setNamespaceContext(PrefixResolver pr)
          Set the current namespace context for the xpath.
protected  StepPattern stepPattern(int opPos, int stepCount, StepPattern ancestorPattern)
          Compile a step pattern unit expression, used for both location paths and match patterns.
protected  Expression string(int opPos)
          Compile a 'string(...)' operation.
protected  Expression union(int opPos)
          Compile a location path union.
protected  Expression variable(int opPos)
          Compile a variable reference.
 void warn(java.lang.String msg, java.lang.Object[] args)
          Warn the user of an problem.
 
Methods inherited from class org.apache.xpath.compiler.OpMap
getArgLength, getArgLengthOfStep, getFirstChildPos, getFirstChildPosOfStep, getFirstPredicateOpPos, getNextOpPos, getNextOpPos, getNextStepPos, getOp, getOpMap, getPatternString, getStepLocalName, getStepNS, getStepTestType, getToken, getTokenQueue, getTokenQueueSize, setOp, shrink, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

locPathDepth

private int locPathDepth

DEBUG

private static final boolean DEBUG
See Also:
Constant Field Values

s_nextMethodId

private static long s_nextMethodId

m_currentPrefixResolver

private PrefixResolver m_currentPrefixResolver
The current prefixResolver for the execution context.


m_errorHandler

javax.xml.transform.ErrorListener m_errorHandler
The error listener where errors will be sent. If this is null, errors and warnings will be sent to System.err. May be null.


m_locator

javax.xml.transform.SourceLocator m_locator
The source locator for the expression being compiled. May be null.


m_functionTable

private FunctionTable m_functionTable
The FunctionTable for all xpath build-in functions

Constructor Detail

Compiler

public Compiler(javax.xml.transform.ErrorListener errorHandler,
                javax.xml.transform.SourceLocator locator,
                FunctionTable fTable)
Construct a Compiler object with a specific ErrorListener and SourceLocator where the expression is located.

Parameters:
errorHandler - Error listener where messages will be sent, or null if messages should be sent to System err.
locator - The location object where the expression lives, which may be null, but which, if not null, must be valid over the long haul, in other words, it will not be cloned.
fTable - The FunctionTable object where the xpath build-in functions are stored.

Compiler

public Compiler()
Construct a Compiler instance that has a null error listener and a null source locator.

Method Detail

compile

public Expression compile(int opPos)
                   throws javax.xml.transform.TransformerException
Execute the XPath object from a given opcode position.

Parameters:
opPos - The current position in the xpath.m_opMap array.
Returns:
The result of the XPath.
Throws:
javax.xml.transform.TransformerException - if there is a syntax or other error.

compileOperation

private Expression compileOperation(Operation operation,
                                    int opPos)
                             throws javax.xml.transform.TransformerException
Bottle-neck compilation of an operation with left and right operands.

Parameters:
operation - non-null reference to parent operation.
opPos - The op map position of the parent operation.
Returns:
reference to Operation instance.
Throws:
javax.xml.transform.TransformerException - if there is a syntax or other error.

compileUnary

private Expression compileUnary(UnaryOperation unary,
                                int opPos)
                         throws javax.xml.transform.TransformerException
Bottle-neck compilation of a unary operation.

Parameters:
unary - The parent unary operation.
opPos - The position in the op map of the parent operation.
Returns:
The unary argument.
Throws:
javax.xml.transform.TransformerException - if syntax or other error occurs.

or

protected Expression or(int opPos)
                 throws javax.xml.transform.TransformerException
Compile an 'or' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Or instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

and

protected Expression and(int opPos)
                  throws javax.xml.transform.TransformerException
Compile an 'and' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to And instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

notequals

protected Expression notequals(int opPos)
                        throws javax.xml.transform.TransformerException
Compile a '!=' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to NotEquals instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

equals

protected Expression equals(int opPos)
                     throws javax.xml.transform.TransformerException
Compile a '=' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Equals instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

lte

protected Expression lte(int opPos)
                  throws javax.xml.transform.TransformerException
Compile a '<=' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Lte instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

lt

protected Expression lt(int opPos)
                 throws javax.xml.transform.TransformerException
Compile a '<' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Lt instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

gte

protected Expression gte(int opPos)
                  throws javax.xml.transform.TransformerException
Compile a '>=' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Gte instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

gt

protected Expression gt(int opPos)
                 throws javax.xml.transform.TransformerException
Compile a '>' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Gt instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

plus

protected Expression plus(int opPos)
                   throws javax.xml.transform.TransformerException
Compile a '+' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Plus instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

minus

protected Expression minus(int opPos)
                    throws javax.xml.transform.TransformerException
Compile a '-' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Minus instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

mult

protected Expression mult(int opPos)
                   throws javax.xml.transform.TransformerException
Compile a '*' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Mult instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

div

protected Expression div(int opPos)
                  throws javax.xml.transform.TransformerException
Compile a 'div' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Div instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

mod

protected Expression mod(int opPos)
                  throws javax.xml.transform.TransformerException
Compile a 'mod' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Mod instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

neg

protected Expression neg(int opPos)
                  throws javax.xml.transform.TransformerException
Compile a unary '-' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Neg instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

string

protected Expression string(int opPos)
                     throws javax.xml.transform.TransformerException
Compile a 'string(...)' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to String instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

bool

protected Expression bool(int opPos)
                   throws javax.xml.transform.TransformerException
Compile a 'boolean(...)' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Bool instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

number

protected Expression number(int opPos)
                     throws javax.xml.transform.TransformerException
Compile a 'number(...)' operation.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Number instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

literal

protected Expression literal(int opPos)
Compile a literal string value.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to XString instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

numberlit

protected Expression numberlit(int opPos)
Compile a literal number value.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to XNumber instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

variable

protected Expression variable(int opPos)
                       throws javax.xml.transform.TransformerException
Compile a variable reference.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Variable instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

group

protected Expression group(int opPos)
                    throws javax.xml.transform.TransformerException
Compile an expression group.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to the contained expression.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

arg

protected Expression arg(int opPos)
                  throws javax.xml.transform.TransformerException
Compile a function argument.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to the argument expression.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

union

protected Expression union(int opPos)
                    throws javax.xml.transform.TransformerException
Compile a location path union. The UnionPathIterator itself may create LocPathIterator children.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to LocPathIterator instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

getLocationPathDepth

public int getLocationPathDepth()
Get the level of the location path or union being constructed.

Returns:
0 if it is a top-level path.

getFunctionTable

FunctionTable getFunctionTable()
Get the function table


locationPath

public Expression locationPath(int opPos)
                        throws javax.xml.transform.TransformerException
Compile a location path. The LocPathIterator itself may create AxesWalker children.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to LocPathIterator instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

predicate

public Expression predicate(int opPos)
                     throws javax.xml.transform.TransformerException
Compile a location step predicate expression.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
the contained predicate expression.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

matchPattern

protected Expression matchPattern(int opPos)
                           throws javax.xml.transform.TransformerException
Compile an entire match pattern expression.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to UnionPattern instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

locationPathPattern

public Expression locationPathPattern(int opPos)
                               throws javax.xml.transform.TransformerException
Compile a location match pattern unit expression.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to StepPattern instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

getWhatToShow

public int getWhatToShow(int opPos)
Get a NodeFilter bit set that tells what to show for a given node test.

Parameters:
opPos - the op map position for the location step.
Returns:
NodeFilter bit set that tells what to show for a given node test.

stepPattern

protected StepPattern stepPattern(int opPos,
                                  int stepCount,
                                  StepPattern ancestorPattern)
                           throws javax.xml.transform.TransformerException
Compile a step pattern unit expression, used for both location paths and match patterns.

Parameters:
opPos - The current position in the m_opMap array.
stepCount - The number of steps to expect.
ancestorPattern - The owning StepPattern, which may be null.
Returns:
reference to StepPattern instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

getCompiledPredicates

public Expression[] getCompiledPredicates(int opPos)
                                   throws javax.xml.transform.TransformerException
Compile a zero or more predicates for a given match pattern.

Parameters:
opPos - The position of the first predicate the m_opMap array.
Returns:
reference to array of Expression instances.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

countPredicates

public int countPredicates(int opPos)
                    throws javax.xml.transform.TransformerException
Count the number of predicates in the step.

Parameters:
opPos - The position of the first predicate the m_opMap array.
Returns:
The number of predicates for this step.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

compilePredicates

private void compilePredicates(int opPos,
                               Expression[] predicates)
                        throws javax.xml.transform.TransformerException
Compiles predicates in the step.

Parameters:
opPos - The position of the first predicate the m_opMap array.
predicates - An empty pre-determined array of Expressions, that will be filled in.
Throws:
javax.xml.transform.TransformerException

compileFunction

Expression compileFunction(int opPos)
                     throws javax.xml.transform.TransformerException
Compile a built-in XPath function.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to Function instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

getNextMethodId

private long getNextMethodId()
Get the next available method id


compileExtension

private Expression compileExtension(int opPos)
                             throws javax.xml.transform.TransformerException
Compile an extension function.

Parameters:
opPos - The current position in the m_opMap array.
Returns:
reference to FuncExtFunction instance.
Throws:
javax.xml.transform.TransformerException - if a error occurs creating the Expression.

warn

public void warn(java.lang.String msg,
                 java.lang.Object[] args)
          throws javax.xml.transform.TransformerException
Warn the user of an problem.

Parameters:
msg - An error msgkey that corresponds to one of the constants found in XPATHErrorResources, which is a key for a format string.
args - An array of arguments represented in the format string, which may be null.
Throws:
javax.xml.transform.TransformerException - if the current ErrorListoner determines to throw an exception.

assertion

public void assertion(boolean b,
                      java.lang.String msg)
Tell the user of an assertion error, and probably throw an exception.

Parameters:
b - If false, a runtime exception will be thrown.
msg - The assertion message, which should be informative.
Throws:
java.lang.RuntimeException - if the b argument is false.

error

public void error(java.lang.String msg,
                  java.lang.Object[] args)
           throws javax.xml.transform.TransformerException
Tell the user of an error, and probably throw an exception.

Overrides:
error in class OpMap
Parameters:
msg - An error msgkey that corresponds to one of the constants found in XPATHErrorResources, which is a key for a format string.
args - An array of arguments represented in the format string, which may be null.
Throws:
javax.xml.transform.TransformerException - if the current ErrorListoner determines to throw an exception.

getNamespaceContext

public PrefixResolver getNamespaceContext()
Get the current namespace context for the xpath.

Returns:
The current prefix resolver, *may* be null, though hopefully not.

setNamespaceContext

public void setNamespaceContext(PrefixResolver pr)
Set the current namespace context for the xpath.

Parameters:
pr - The resolver for prefixes in the XPath expression.