BNF for script.jj

NON-TERMINALS

begin ::= ( decl )* ( statements )* <EOF>
statements ::= state ( ";" )?
| <BEGIN> ( state ( ";" )? )* <END>
| "{" ( state ( ";" )? )* "}"
state ::= <CALL> <STRING_LITERAL> ( "(" l_param ")" )?
| <WAIT> exp times
| ( <ID> | <PARAM> ) <EQUAL> exp
| <IODELAY> exp times
| <CLICK> <BUTTON> exp
| <DCLICK> <BUTTON> exp
| <SAY> exp
| <KEYPRESS> exp
| <KEYRELEASE> exp
| <PUSHKEY> exp
| <MOUSEMOVE> exp
| <MOUSEPRESS> <BUTTON>
| <MOUSERELEASE> <BUTTON>
| <DRAG> ( <ALL> | exp ) ( <OBJECTS> )? exp ( <FROM> )? exp
| <IF> exp statements ( <ELSE> statements )?
| <WHILE> exp statements
| <REPEAT> exp ( <TIMES> )? statements
| <BREAK>
| <EXIT>
| <PRINT> exp
| <DATE> "(" ( <ID> | <PARAM> ) "," ( <ID> | <PARAM> ) "," ( <ID> | <PARAM> ) ")"
| <TIME> "(" ( <ID> | <PARAM> ) "," ( <ID> | <PARAM> ) "," ( <ID> | <PARAM> ) ")"
| <BEEP>
times ::= <MILISEC>
| <MIN>
| ( <SEC> )?
decl ::= ( <NUMBER> | <STRING> | <LOCATION> | <MACROKEY> | <COLOR> ) l_id ( ";" )?
l_id ::= <ID> ( <EQUAL> exp )? ( "," l_id )*
cte ::= <STRING_LITERAL>
| <NUMBER_LITERAL>
| <LOCATION_LITERAL>
| <KEY_LITERAL>
| <COLOR_LITERAL>
s_exp ::= exp_m ( ( <OR> | <ADD> | <SUB> ) exp_m )*
exp_m ::= val_exp ( ( <AND> | <MULTIPLY> | <DIV> | <MOD> ) val_exp )*
val_exp ::= ( val | "(" exp ")" )
val ::= cte
| color_din
| <ID>
| <PARAM>
| <ISNATIVEMODE>
exp ::= s_exp ( ( <LESS> | <GREAT> | <NOTEQUAL> | <EQUAL> | <GREATEQUAL> | <LESSEQUAL> ) s_exp )?
color_din ::= <COLOR> val
l_param ::= ( <ID> | <PARAM> | <STRING_LITERAL> | <NUMBER_LITERAL> | <LOCATION_LITERAL> | <KEY_LITERAL> | <COLOR_LITERAL> ) ( "," l_param )*