~ ~ kize_program PROGRAM IDENTIFIER !save_ident global_declarations BEGIN !emit_program_prologue procedure_list END !emit_program epilogue procedure PROCEDURE IDENTIFIER !save_ident !check_declared local_declarations BEGIN !emit_procedure_prologue statement_list END !emit_procedure_epilogue global_declarations !initialize_global_symbol_table const_declarations type_declarations var_declarations proc_declarations local_declarations !initialize_local_symbol_table label_declarations var_declarations !save_local_storage const_declarations CONSTANTS const_list const_declarations const_list IDENTIFIER !check_duplicate : literal ; !insert_const_entry more_const_list more_const_list const_list more_const_list literal NUMBER literal DECIMAL literal ASTRING type_declarations TYPES type_list type_declarations type_list IDENTIFIER !check_duplicate : declaration_type ; !insert_type_entry more_type_list more_type_list type_list more_type_list declared_type atomic_type var_declarations VARIABLES var_list var_declarations var_list IDENTIFIER !check_duplicate : declared_type ; !insert_variable_entry !insert_static_memory_entry more_var_list more_var_list var_list more_var_list label_declarations LABELS label_list label_declarations label_list label !check_duplicate ; !insert_label_entry more_label_list more_label_list label_list more_label_list label NUMBER proc_declarations PROCEDURES proc_list proc_declarations proc_list proc_signature more_proc_list proc_signature IDENTIFIER !check_duplicate ( formal_arguments ) return_type ; !insert_proc_entry more_proc_list proc_list more_proc_list formal_arguments formal_argument more_formal_arguments formal_arguments more_formal_arguments , formal_arguments more_formal_arguments formal_argument call_by IDENTIFIER : defined_type !save_formal_argument call_by VAL call_by VAR call_by return_type : atomic_type !check_type return_type