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
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)
|
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()
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)