com.sun.msv.grammar
Class ExpressionPool

java.lang.Object
  |
  +--com.sun.msv.grammar.ExpressionPool
All Implemented Interfaces:
Serializable

public class ExpressionPool
extends Object
implements Serializable

Creates a new Expression by combining existing expressions. all expressions are memorized and unified so that every subexpression will be shared and reused. Optimization will be also done transparently. For example, createChoice(P,P) will result in P. createSequence(P,nullSet) will result in nullSet. Furthermore, associative operators are grouped to the left. createChoice( (P|Q), (R|S) ) will be ((P|Q)|R)|S.

Although this unification is essential, this is also the performance bottle neck. In particular, createChoice and createSequence are two most commonly called methods.

For example, when validating a DocBook XML (150KB) twice against DocBook.trex(237KB), createChoice is called 63000 times and createSequence called 23000 times. (the third is the createOptional method and only 1560 times.) And they took more than 10% of validation time, which is the worst time-consuming method.

Therefore, please beware that this class includes several ugly code optimization.

Author:
Kohsuke KAWAGUCHI
See Also:
Serialized Form

Inner Class Summary
static class ExpressionPool.ClosedHash
          expression cache by closed hash.
 
Constructor Summary
ExpressionPool()
           
ExpressionPool(ExpressionPool parent)
          creates new expression pool as a child pool of the given parent pool.
 
Method Summary
 Expression createAnyString()
           
 Expression createAttribute(NameClass nameClass)
           
 Expression createAttribute(NameClass nameClass, Expression content)
           
 Expression createChoice(Expression left, Expression right)
           
 Expression createConcur(Expression left, Expression right)
           
 Expression createEpsilon()
           
 Expression createInterleave(Expression left, Expression right)
           
 Expression createKey(Expression body, StringPair name)
           
 Expression createKeyref(Expression body, StringPair name)
           
 Expression createList(Expression exp)
           
 Expression createMixed(Expression body)
           
 Expression createNullSet()
           
 Expression createOneOrMore(Expression child)
           
 Expression createOptional(Expression child)
           
 Expression createSequence(Expression left, Expression right)
           
 Expression createTypedString(Datatype dt, StringPair typeName)
           
 Expression createTypedString(Datatype dt, StringPair typeName, Expression except)
           
 Expression createTypedString(XSDatatype dt)
           
 Expression createZeroOrMore(Expression child)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExpressionPool

public ExpressionPool(ExpressionPool parent)
creates new expression pool as a child pool of the given parent pool.

Every expression memorized in the parent pool can be retrieved, but update operations are only performed upon the child pool. In this way, the parent pool can be shared among the multiple threads without interfering performance.

Furthermore, you can throw away a child pool after a certain time period to prevent it from eating up memory.


ExpressionPool

public ExpressionPool()
Method Detail

createAttribute

public final Expression createAttribute(NameClass nameClass)

createAttribute

public final Expression createAttribute(NameClass nameClass,
                                        Expression content)

createEpsilon

public final Expression createEpsilon()

createNullSet

public final Expression createNullSet()

createAnyString

public final Expression createAnyString()

createChoice

public final Expression createChoice(Expression left,
                                     Expression right)

createOneOrMore

public final Expression createOneOrMore(Expression child)

createZeroOrMore

public final Expression createZeroOrMore(Expression child)

createOptional

public final Expression createOptional(Expression child)

createTypedString

public final Expression createTypedString(XSDatatype dt)

createTypedString

public final Expression createTypedString(Datatype dt,
                                          StringPair typeName)

createTypedString

public final Expression createTypedString(Datatype dt,
                                          StringPair typeName,
                                          Expression except)

createList

public final Expression createList(Expression exp)

createMixed

public final Expression createMixed(Expression body)

createKey

public final Expression createKey(Expression body,
                                  StringPair name)

createKeyref

public final Expression createKeyref(Expression body,
                                     StringPair name)

createSequence

public final Expression createSequence(Expression left,
                                       Expression right)

createConcur

public final Expression createConcur(Expression left,
                                     Expression right)

createInterleave

public final Expression createInterleave(Expression left,
                                         Expression right)