270 lines
4.9 KiB
Plaintext
270 lines
4.9 KiB
Plaintext
%%
|
|
|
|
program
|
|
:statement program
|
|
;
|
|
|
|
scalar
|
|
:number
|
|
|string
|
|
|calculation
|
|
;
|
|
call
|
|
:call_list
|
|
|call_hash
|
|
|call_function
|
|
;
|
|
id_list
|
|
:id ',' id
|
|
|id ',' id_list
|
|
;
|
|
scalar_list
|
|
:scalar ',' scalar
|
|
|scalar ',' call
|
|
|scalar ',' function
|
|
|scalar ',' id_list
|
|
|scalar ',' list
|
|
|scalar ',' hash
|
|
|call ',' scalar
|
|
|call ',' call
|
|
|call ',' function
|
|
|call ',' id_list
|
|
|call ',' list
|
|
|call ',' hash
|
|
|function ',' scalar
|
|
|function ',' call
|
|
|function ',' function
|
|
|function ',' id_list
|
|
|function ',' list
|
|
|function ',' hash
|
|
|scalar ',' scalar_list
|
|
|call ',' scalar_list
|
|
|function ',' scalar_list
|
|
|id ',' scalar_list
|
|
|list ',' scalar_list
|
|
|hash ',' scalar_list
|
|
;
|
|
|
|
subvec
|
|
:'['id':'']'
|
|
|'['id':'id']'
|
|
|'['id':'scalar']'
|
|
|'['id':'call']'
|
|
|'['scalar':'']'
|
|
|'['scalar':'id']'
|
|
|'['scalar':'scalar']'
|
|
|'['scalar':'call']'
|
|
|'['call':'']'
|
|
|'['call':'id']'
|
|
|'['call':'scalar']'
|
|
|'['call':'call']'
|
|
;
|
|
call_list
|
|
:id'['id']'
|
|
|id'['scalar']'
|
|
|id'['call']'
|
|
|id subvec
|
|
|call'['id']'
|
|
|call'['scalar']'
|
|
|call'['call']'
|
|
|call subvec
|
|
;
|
|
call_hash
|
|
:id '.' id
|
|
|id '.' call
|
|
|call '.' id
|
|
|call '.' call
|
|
;
|
|
call_function
|
|
:id '('')'
|
|
|id '(' id ')'
|
|
|id '(' scalar ')'
|
|
|id '(' dynamic_id ')'
|
|
|id '(' call ')'
|
|
|id '(' function ')'
|
|
|id '(' id_list ')'
|
|
|id '(' scalar_list ')'
|
|
;
|
|
list
|
|
:'['']'
|
|
|'['id']'
|
|
|'['scalar']'
|
|
|'['call']'
|
|
|'['list']'
|
|
|'['hash']'
|
|
|'['id_list']'
|
|
|'['scalar_list']'
|
|
;
|
|
hash_member
|
|
:id':'id
|
|
|id':'scalar
|
|
|id':'call
|
|
|id':'function
|
|
|id':'list
|
|
|id':'hash
|
|
;
|
|
hash_members
|
|
:hash_member,hash_member
|
|
|hash_member,hash_members
|
|
;
|
|
hash
|
|
:'{''}'
|
|
|'{'hash_member'}'
|
|
|'{'hash_members'}'
|
|
;
|
|
operator
|
|
:'+'
|
|
|'-'
|
|
|'*'
|
|
|'/'
|
|
|'~'
|
|
|'=='
|
|
|'!='
|
|
|'<'
|
|
|'<='
|
|
|'>'
|
|
|'>='
|
|
|and
|
|
|or
|
|
;
|
|
|
|
calculation
|
|
:id operator id
|
|
|id operator scalar
|
|
|id operator call
|
|
|scalar operator id
|
|
|scalar operator scalar
|
|
|scalar operator call
|
|
|call operator id
|
|
|call operator scalar
|
|
|call operator call
|
|
|'('id')'
|
|
|'('scalar')'
|
|
|'('call')'
|
|
|'!' id
|
|
|'!' scalar
|
|
|'!' call
|
|
|'-' id
|
|
|'-' scalar
|
|
|'-' call
|
|
|'+' id
|
|
|'+' scalar
|
|
|'+' call
|
|
;
|
|
|
|
definition
|
|
:var id '=' id ';'
|
|
|var id '=' scalar ';'
|
|
|var id '=' call ';'
|
|
|var id '=' function
|
|
|var id '=' list ';'
|
|
|var id '=' hash ';'
|
|
;
|
|
|
|
assign_operator
|
|
:'+='
|
|
|'-='
|
|
|'*='
|
|
|'/='
|
|
|'~='
|
|
|'='
|
|
;
|
|
pre_assignment
|
|
:id assign_operator id
|
|
|id assign_operator scalar
|
|
|id assign_operator call
|
|
|call assign_operator id
|
|
|call assign_operator scalar
|
|
|call assign_operator call
|
|
;
|
|
assignment
|
|
:pre_assignment ';'
|
|
|id '=' function
|
|
|call '=' function
|
|
;
|
|
|
|
function
|
|
:func'{''}'
|
|
|func'{'statement'}'
|
|
|func'('')''{''}'
|
|
|func'('')''{'statement'}'
|
|
|func'('id')''{''}'
|
|
|func'('id')''{'statement'}'
|
|
|func'('scalar')''{''}'
|
|
|func'('scalar')''{'statement'}'
|
|
|func'('call')''{''}'
|
|
|func'('call')''{'statement'}'
|
|
|func'('list')''{''}'
|
|
|func'('list')''{'statement}'
|
|
|func'('hash')''{''}'
|
|
|func'('hash')''{'statement'}'
|
|
|func'('function')''{''}'
|
|
|func'('function')''{'statement'}'
|
|
|func'('dynamic_id')''{''}'
|
|
|func'('dynamic_id')''{'statement'}'
|
|
|func'('id_list')''{''}'
|
|
|func'('id_list')''{'statement'}'
|
|
;
|
|
|
|
choose
|
|
:if'('id')''{''}'
|
|
|if'('scalar')''{''}'
|
|
|if'('call')''{'statement'}'
|
|
|if'('id')''{'statement'}'
|
|
|if'('scalar')''{'statement'}'
|
|
|if'('call')''{'statement'}'
|
|
|else if'('id')''{''}'
|
|
|else if'('scalar')''{''}'
|
|
|else if'('call')''{'statement'}'
|
|
|else if'('id')''{'statement'}'
|
|
|else if'('scalar')''{'statement'}'
|
|
|else if'('call')''{'statement'}'
|
|
|elsif'('id')''{''}'
|
|
|elsif'('scalar')''{''}'
|
|
|elsif'('call')''{'statement'}'
|
|
|elsif'('id')''{'statement'}'
|
|
|elsif'('scalar')''{'statement'}'
|
|
|elsif'('call')''{'statement'}'
|
|
|else'{''}'
|
|
|else'{'statement'}'
|
|
;
|
|
|
|
loop
|
|
:while'('id')''{''}'
|
|
|while'('scalar')''{''}'
|
|
|while'('call')''{''}'
|
|
|while'('id')''{'statement'}'
|
|
|while'('scalar')''{'statement'}'
|
|
|while'('call')''{'statement'}'
|
|
|foreach'('statement id')''{''}'
|
|
|foreach'('statement scalar')''{''}'
|
|
|foreach'('statement call')''{''}'
|
|
|foreach'('statement list')''{''}'
|
|
|foreach'('statement id')''{'statement'}'
|
|
|foreach'('statement scalar')''{'statement'}'
|
|
|foreach'('statement call')''{'statement'}'
|
|
|foreach'('statement list')''{'statement'}'
|
|
|forindex'('statement id')''{''}'
|
|
|forindex'('statement scalar')''{''}'
|
|
|forindex'('statement call')''{''}'
|
|
|forindex'('statement list')''{''}'
|
|
|forindex'('statement id')''{'statement'}'
|
|
|forindex'('statement scalar')''{'statement'}'
|
|
|forindex'('statement call')''{'statement'}'
|
|
|forindex'('statement list')''{'statement'}'
|
|
|for'('statement pre_assignment')''{''}'
|
|
|for'('statement pre_assignment')''{'statement'}'
|
|
;
|
|
|
|
statement
|
|
:definition
|
|
|assignment
|
|
|loop
|
|
|choose
|
|
|return_scalar
|
|
|continue ';'
|
|
|break ';'
|
|
|call_function';'
|
|
|';'
|
|
;
|