Note: For browsers that do not properly interpret this page correctly,
the symbol "®" is intended to be a right
arrow and the symbol "e" is intended to be an
epsilon. Nonterminal elements are printed in italic. Terminal
elements are printed in bold. Symbol tokens are quoted.
mainprogram ®program identifier declarations begin stmt_seq end identifier '.'
declarations ®declar
declarations
declarations ®
e
declar ® type id_list ';'
type ® integer
id_list ® identifier
id_list ® identifier ','
id_list
stmt_seq ® stmt
stmt_seq ® stmt ';'
stmt_seq
stmt ® e | if_stmt | loop_stmt
| exit_stmt | assignment_stmt | get_stmt | put_stmt | putln_stmt
if_stmt ® if expression
then
elseifpart elsepart
elseifpart ® e
elseifpart ® elseif expression
then
stmt_seq elseifpart
elsepart ® end if
elsepart ® else stmt_seq
end
if
loop_stmt ® loop stmt_seq
end
loop
exit_stmt ® when expression
exit
assignment_stmt ® identifier ':=' expression
get_stmt ® get identifier
put_stmt ® put expression
put_stmt ® put str_const
putln_stmt ® putln
expression ® expression
bool_op
rel_exp
expression ® not expression
expression ® rel_exp
rel_exp ® rel_exp rel_op
add_exp
rel_exp ® add_exp
add_exp ® add_exp add_op
term
add_exp ® add_op
add_exp
add_exp ® term
term ® term mult_op
factor
term ® factor
factor ® factor exp_op
expfactor
factor ® expfactor
expfactor ® identifier
expfactor ® int_const
expfactor ® '('
expression ')'