Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.sun.msv.grammar
Class Expression

    java.lang.Object
      com.sun.msv.grammar.Expression

All Implemented Interfaces:
  java.io.Serializable

Direct Known Subclasses:
  AttributeExp, BinaryExp, DataExp, ElementExp, OtherExp, ReferenceExp, UnaryExp, ValueExp

public abstract class Expression
extends java.lang.Object
implements java.io.Serializable

Primitive of the tree regular expression. most of the derived class is immutable (except ReferenceExp, ElementExp and OtherExp).

By making it immutable, it becomes possible to share subexpressions among expressions. This is very important for regular-expression-derivation based validation algorithm, as well as for smaller memory footprint. This sharing is automatically achieved by ExpressionPool.

ReferebceExp, ElementExp, and OtherExp are also placed in the pool, but these are not unified. Since they are not unified, application can derive classes from these expressions and mix them into AGM. This technique is heavily used to introduce schema language specific primitives into AGM. See various sub-packages of this package for examples.

The equals method must be implemented by the derived type. equals method will be used to unify the expressions. equals method can safely assume that its children are already unified (therefore == can be used to test the equality, rather than equals method).

To achieve unification, we overload the equals method so that `o1.equals(o2)` is true if o1 and o2 are identical. There, those two objects must return the same hash code. For this purpose, the hash code is calculated statically and cached internally.

Author:
  Kohsuke KAWAGUCHI
See Also:
  Serialized Form

Field Summary
`static Expression` | `anyString` special expression object that represents "any string".
`static Expression` | `epsilon` Special expression object that represents epsilon (ε).
`static Expression` | `nullSet` special expression object that represents the empty set (Φ).
`java.lang.Object` | `verifierTag` this field can be used by Verifier implementation to speed up validation.

Method Summary
`abstract boolean` | `equals(java.lang.Object o)`
`Expression` | `getExpandedExp(ExpressionPool pool)` Gets the expression after removing all ReferenceExps, until child AttributeExp or ElementExp.
`int` | `hashCode()`
`boolean` | `isEpsilonReducible()` returns true if this expression accepts empty sequence.
`Expression` | `peelOccurence()` Peels the occurence expressions from this expression.
`abstract java.lang.Object` | `visit(ExpressionVisitor visitor)`
`abstract boolean` | `visit(ExpressionVisitorBoolean visitor)`
`abstract Expression` | `visit(ExpressionVisitorExpression visitor)`
`abstract void` | `visit(ExpressionVisitorVoid visitor)`
`java.lang.Object` | `visit(RELAXExpressionVisitor visitor)`
`boolean` | `visit(RELAXExpressionVisitorBoolean visitor)`
`Expression` | `visit(RELAXExpressionVisitorExpression visitor)`
`void` | `visit(RELAXExpressionVisitorVoid visitor)`

Methods inherited from class java.lang.Object
`getClass, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### verifierTag

    public transient java.lang.Object verifierTag

  this field can be used by Verifier implementation to speed up validation. Due to its nature, this field is not serialized. TODO: revisit this decision of not to serialize this field.

### epsilon

    public static final Expression epsilon

  Special expression object that represents epsilon (ε). This expression matches to "empty". Epsilon can be thought as an empty sequence.

### nullSet

    public static final Expression nullSet

  special expression object that represents the empty set (Φ). This expression doesn't match to anything. NullSet can be thought as an empty choice.

### anyString

    public static final Expression anyString

  special expression object that represents "any string". It is close to xsd:string datatype, but they have different semantics in several things.

  This object is used as <anyString/> pattern of TREX and <text/> pattern of RELAX NG.

Method Detail

### isEpsilonReducible

    public boolean isEpsilonReducible()

  returns true if this expression accepts empty sequence.

  If this method is called while creating Expressions, then this method may return approximated value. When this method is used while validation, this method is guaranteed to return the correct value.

### getExpandedExp

    public Expression getExpandedExp(ExpressionPool pool)

  Gets the expression after removing all ReferenceExps, until child AttributeExp or ElementExp.

### peelOccurence

    public final Expression peelOccurence()

  Peels the occurence expressions from this expression.

  In AGM, 'X?','X+' and 'X*' are represented by using other primitives. This method returns the 'X' part by removing occurence related expressions.

### visit

    public abstract java.lang.Object visit(ExpressionVisitor visitor)

### visit

    public abstract Expression visit(ExpressionVisitorExpression visitor)

### visit

    public abstract boolean visit(ExpressionVisitorBoolean visitor)

### visit

    public abstract void visit(ExpressionVisitorVoid visitor)

### visit

    public java.lang.Object visit(RELAXExpressionVisitor visitor)

### visit

    public Expression visit(RELAXExpressionVisitorExpression visitor)

### visit

    public boolean visit(RELAXExpressionVisitorBoolean visitor)

### visit

    public void visit(RELAXExpressionVisitorVoid visitor)

### hashCode

    public final int hashCode()

### equals

    public abstract boolean equals(java.lang.Object o)

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD