Definition
for the programming language
ICPL


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 ')'