Package com.sun.msv.verifier.regexp
Class CombinedChildContentExpCreator
java.lang.Object
com.sun.msv.verifier.regexp.CombinedChildContentExpCreator
- All Implemented Interfaces:
ExpressionVisitorVoid
creates "combined child content expression" and gathers "elements of concern"
and its "attribute-pruned" content model.
Intuitively, "combined child content expression" is a set of
content models of "elements of concern",
which is appropriately combined to express dependency between elements.
"Elements of concern" are ElementExps that are possibly applicable to
the next element. These gathered element declarations are then tested against
next XML element.
"Attribute-pruned" content model is a content model after consuming
AttributeTokens and removing unused AttributeExp nodes.
..(A).. -> ..(A')..
..(B).. -> ..(B')..
..(C).. -> ..(C')..
(A'),(B'), and (C') are attribute-pruned content models of (A),(B), and (C)
respectively.
Note that combined child pattern contains only <choice> and <concur> as
its grue (of course, except ..(A').. , ..(B').. , and ..(C').. ).
This function object also calculates "continuation", which is the residual
expression after eating elements of concern.
For example, say the expression is "(A|(B,C))?,D".
When EoC is B, then the continuation will be C,D.
When EoC is A, then the continuation will be D.
When EoC is D, then the continuation will be epsilon.
When there are multiple EoC, (say A and B), then
the continuation will be meaningless (because it depends on which EoC will
be accepted), and thus won't be used.
However, the implementator must be aware that it is possible for a
binary operator to have EoC on both branch and EoC is still unique.
The following expression is an example.
(A|B)*,C?,(A|B)*
when A is EoC, SequenceExp of (A|B)* and C?,(A|B)* has EoC on both branch.
For example, when the current expression is
then the combined child expression is..(A).. ..(B).. .....(C).. ....
and elements of concern and its attribute-pruned content models are..(A').. ..(B').. ..(C')..
- Author:
- Kohsuke KAWAGUCHI
-
Nested Class Summary
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptioncontinueGet
(Expression combinedPattern, StartTagInfo info, boolean checkTagName) get
(Expression combinedPattern, StartTagInfo info) computes a combined child content pattern and (,if possible,) its continuation.get
(Expression combinedPattern, StartTagInfo info, boolean checkTagName) computes a combined child content pattern and its continuation, with error recovery.final ElementExp[]
obtains matched elements.final boolean
checks if the result of 'get' method is not the union of all elements of concern.final int
gets the number of matched elements.void
void
onAttribute
(AttributeExp exp) void
void
void
void
onElement
(ElementExp exp) void
void
void
void
void
void
onOneOrMore
(OneOrMoreExp exp) void
void
onRef
(ReferenceExp exp) void
onSequence
(SequenceExp exp) void
-
Field Details
-
pool
-
-
Constructor Details
-
CombinedChildContentExpCreator
-
-
Method Details
-
get
public CombinedChildContentExpCreator.ExpressionPair get(Expression combinedPattern, StartTagInfo info, boolean checkTagName) computes a combined child content pattern and its continuation, with error recovery. After calling this method, caller can call getElementsOfConcern to obtain each EoC. If both feedAttributes and checkTagName are false, then StartTagInfo is also unnecessary.- Parameters:
feedAttributes
- if this flag is false, Attribute feeding & pruning are skipped and AttributeExps are fully remained in the resulting expression.checkTagName
- if this flag is false, tag name check is skipped.
-
continueGet
public final CombinedChildContentExpCreator.ExpressionPair continueGet(Expression combinedPattern, StartTagInfo info, boolean checkTagName) -
get
public CombinedChildContentExpCreator.ExpressionPair get(Expression combinedPattern, StartTagInfo info) computes a combined child content pattern and (,if possible,) its continuation. -
getMatchedElements
obtains matched elements. This method should be called after calling the get method. The result is in effect until the next invocation of get method.The extra care should be taken not to hold reference to the result longer than necessary. The contents of the result is valid only until the next invocation. Because OwnerAndContent objects are reused.
Apparently this is a bad design, but this design gives us better performance.
-
numMatchedElements
public final int numMatchedElements()gets the number of matched elements. This method should be called after calling get method. The result is in effect until next invocation of get method. Apparently this is a bad design, but this design gives us better performance. -
onConcur
- Specified by:
onConcur
in interfaceExpressionVisitorVoid
-
onInterleave
- Specified by:
onInterleave
in interfaceExpressionVisitorVoid
-
isComplex
public final boolean isComplex()checks if the result of 'get' method is not the union of all elements of concern. Within this class, combined child content expression is always the union of all elements of concern. However, some derived class does not guarantee this property.- Returns:
- true if the combined child content expression is not the union of all elements of concern. false if otherwise.
-
onElement
- Specified by:
onElement
in interfaceExpressionVisitorVoid
-
onOneOrMore
- Specified by:
onOneOrMore
in interfaceExpressionVisitorVoid
-
onMixed
- Specified by:
onMixed
in interfaceExpressionVisitorVoid
-
onAttribute
- Specified by:
onAttribute
in interfaceExpressionVisitorVoid
-
onEpsilon
public void onEpsilon()- Specified by:
onEpsilon
in interfaceExpressionVisitorVoid
-
onNullSet
public void onNullSet()- Specified by:
onNullSet
in interfaceExpressionVisitorVoid
-
onAnyString
public void onAnyString()- Specified by:
onAnyString
in interfaceExpressionVisitorVoid
-
onData
- Specified by:
onData
in interfaceExpressionVisitorVoid
-
onValue
- Specified by:
onValue
in interfaceExpressionVisitorVoid
-
onList
- Specified by:
onList
in interfaceExpressionVisitorVoid
-
onRef
- Specified by:
onRef
in interfaceExpressionVisitorVoid
-
onOther
- Specified by:
onOther
in interfaceExpressionVisitorVoid
-
onChoice
- Specified by:
onChoice
in interfaceExpressionVisitorVoid
-
onSequence
- Specified by:
onSequence
in interfaceExpressionVisitorVoid
-