Class 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 Detail

      • locPathDepth

        private int locPathDepth
      • m_currentPrefixResolver

        private PrefixResolver m_currentPrefixResolver
        The current prefixResolver for the execution context.
      • m_errorHandler

        final 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_functionTable

        private final FunctionTable m_functionTable
        The FunctionTable for all xpath build-in functions
    • Constructor Detail

      • Compiler

        public Compiler​(javax.xml.transform.ErrorListener errorHandler,
                        FunctionTable fTable)
        Construct a Compiler object with a specific ErrorListener.
        Parameters:
        errorHandler - Error listener where messages will be sent, or null if messages should be sent to System err.
        fTable - The FunctionTable object where the xpath build-in functions are stored.
    • 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 '&gr;' 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.
      • 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.
      • 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 - if any
      • 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.
      • 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.