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 }