BNF for XMLTransParser.jj

NON-TERMINALS

Grammar ::= Declarations ( RuleSet )+ <EOF>
Declarations ::= ( ( DocType )? Declaration )+
DocType ::= <DOCTYPE> <DOCID> ( <PUBLIC> <PUBLICID> | <SYSTEM> ) <SYSTEMID> <DOCTYPECLOSE>
Declaration ::= <ID> <COLON> SetRef
RuleSet ::= SetId ( Rule )+
SetId ::= <RULESETPREFIX> <ID>
SetRef ::= <RULESETPREFIX> <ID>
Rule ::= Lhs <RIGHTARROW> Rhs
Lhs ::= ( SimplePat | VarId <ASSIGN> SimplePat | VElementPat | AnyPat )
VElementPat ::= ( <NEGATION> )? VarId ElementSpec
ElementSpec ::= AttSpec ( ChildrenSpec )?
| ChildrenSpec
VarId ::= <VARPREFIX> <ID>
AttVarId ::= <VARPREFIX> <ID>
AttSpec ::= <LBRACKET> ( AttPat )* <RBRACKET>
ChildrenSpec ::= <LBRACE> ( DisjPat )* <RBRACE>
AttPat ::= ( AttVarId ( <ASSIGN> <ID> ( Compare ValuePat )? )? | <ID> ( Compare ValuePat )? )
Compare ::= <EQUAL>
| <NOTEQUAL>
| <MATCH>
| <NOTMATCH>
| <SMALLERTHAN>
| <SMALLEROREQUAL>
| <GREATEROREQUAL>
| <GREATERTHAN>
ValuePat ::= <STRING>
| <REGEXP>
VPat ::= SimplePat1
| VarId <ASSIGN> SimplePat1
| VElementPat
| AnyPat
AnyPat ::= VarId
SimplePat1 ::= SimplePat
| <LPAREN> ( DisjPat )+ <RPAREN>
DisjPat ::= RegPat ( <DISJUNCTION> RegPat )*
RegPat ::= VPat ( <ZEROORMORE> | <ONEORMORE> | <ZEROORONE> )?
SimplePat ::= ( <NEGATION> )? ( StringPat | RegExpString | ElementPat )
StringPat ::= <STRING>
RegExpString ::= <REGEXP>
ElementPat ::= <ID> ( ElementSpec )?
Rhs ::= Constructor
| <LPAREN> ( Constructor )* <RPAREN>
Constructor ::= ( CText | CEntityRef | CComment | CElt | SameSetRef <LPAREN> VarRef <RPAREN> | SetRef <LPAREN> VarRef <RPAREN> )
CText ::= <STRING>
CEntityRef ::= <ENTITYREF>
CComment ::= <XMLCOMMENT>
SameSetRef ::= <RULESETPREFIX>
CElt ::= ( <ID> | VarRef ( <DOT> <INDEX> )? ) ( CAtt )? ( CChildren )?
CAtt ::= <LBRACKET> ( CAttVal )+ <RBRACKET>
CChildren ::= <LBRACE> ( Constructor )* <RBRACE>
CAttVal ::= ( AttVarRef ( <DOT> <INDEX> )? | <ID> <ASSIGN> ( <STRING> | AttVarRef ( <DOT> <INDEX> )? ) )
VarRef ::= <VARPREFIX> <ID>
AttVarRef ::= <VARPREFIX> <ID>