import edu.neu.ccs.demeter.dj.*;
import java.util.*;
import java.lang.reflect.*;
Main = .
Schema = "" *l Parts_List "" *l.
Parts : Types
| Element .
Types : ComplexType
| SimpleType extends Parts.
ComplexType = " Name] ">" *l Sequence [ Attribute] "" *l extends Types.
Attribute = " Name Type EndPart.
Sequence = "" *l Parts_List "" *l.
Element = " NameRef ElementParts_List ElementEndParts extends Parts.
NameRef : Name
| Ref .
ElementParts : Type
| MinOccurs
| MaxOccurs .
ElementEndParts : SimpleElementEnd
| ComplexElementEnd .
SimpleElementEnd = EndPart extends ElementEndParts.
ComplexElementEnd = ">" *l Types_List "" *l extends ElementEndParts.
SimpleType = " Name] ">" *l Restriction *l "" *l extends Types.
Restriction = " Base ">" *l SimpleParts_List "".
SimpleParts : MinExclusive
| MaxExclusive
| MinInclusive
| MaxInclusive .
Name = "name=" String extends NameRef.
Ref = "ref=" String extends NameRef.
Base = "base=" String.
Type = "type=" String extends ElementParts.
MinOccurs = "minOccurs=" String extends ElementParts.
MaxOccurs = "maxOccurs=" String extends ElementParts.
MinExclusive = " Value EndPart extends SimpleParts.
MaxExclusive = " Value EndPart extends SimpleParts.
MinInclusive = " Value EndPart extends SimpleParts.
MaxInclusive = " Value EndPart extends SimpleParts.
Value = "value=" String.
EndPart = "/>" *l.
notparsed visitor PrintVisitor = int boolean extends UniversalVisitor.
notparsed visitor CopyVisitor = derived Object extends UniversalVisitor.
notparsed visitor SubgraphVisitor = boolean init (@ true @) extends UniversalVisitor.
notparsed visitor EqualVisitor = boolean init (@ true @) extends UniversalVisitor.
notparsed visitor DisplayVisitor = int extends UniversalVisitor.
notparsed visitor TraceVisitor = int extends UniversalVisitor.
notparsed visitor UniversalVisitor : .
Parts_List = [ Nonempty_Parts_List].
ElementParts_List = [ Nonempty_ElementParts_List].
Types_List = [ Nonempty_Types_List].
SimpleParts_List = [ Nonempty_SimpleParts_List].
Nonempty_Parts_List = Parts [ Nonempty_Parts_List].
Nonempty_ElementParts_List = ElementParts [ Nonempty_ElementParts_List].
Nonempty_Types_List = Types [ Nonempty_Types_List].
Nonempty_SimpleParts_List = SimpleParts [ Nonempty_SimpleParts_List].