red = terminal, green = non-termnial, black = metasymbol.
M ---> { ( S | D ) }
S ---> I | W | A | P | C | G
D ---> '(' id '(' [ id { ',' id } ] ')' { S } ')'
I ---> '[' E '?' { S } ':' { S } ']' | '[' E '?' { S } ']'
W ---> '{' E '?' { S } '}'
A ---> id '=' E ';'
P ---> '<' E ';'
G ---> '>' id ';'
C ---> '<' ( 'B' | 'T' | 'N' ) ';'
E ---> Q [ ('&' | '|') Q ]
Q ---> R [ ('<' | '>' | '<=' | '>=' | '==' | '!=' ) R ]
R ---> T { ('+' | '-') T }
T ---> U { ('*' | '/' | '%') U }
U ---> F '^' U | F
F ---> ['+' | '-' | '!'] ('(' E ')' | id | num |
id '(' [ E { ',' E } ] ')' )
id ---> letter { letter | digit }
num ---> digit { digit }
red = terminal, green = non-termnial, black = metasymbol.
M ---> { ( S | D ) }
S ---> I | W | A | P | C | G
D ---> ( id ( [ id { , id } ] ) { S } )
I ---> [ E ? { S } : { S } ] | [ E ? { S } ]
W ---> { E ? { S } }
A ---> id = E ;
P ---> < E ;
G ---> > id ;
C ---> < ( B | T | N ) ;
E ---> Q [ (& | |) Q ]
Q ---> R [ (< | > | <= | >= | == | != ) R ]
R ---> T { (+ | -) T }
T ---> U { (* | / | %) U }
U ---> F ^ U | F
F ---> [+ | - | !] (( E ) | id | num |
id ( [ E { , E } ] ) )
id ---> letter { letter | digit }
num ---> digit { digit }