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