fiducials: *eof* *start* -> kize_program *eof* 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 literal -> NULL 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 -> declaration_type -> array_type declaration_type -> record_type array_type -> ARRAY [ ub !check_no_elements ] OF declared_type !save_array_info ub -> NUMBER ub -> IDENTIFIER !check_int_constant record_type -> RECORD fld_list END fld_list -> IDENTIFIER !check_duplicate : declared_type ; !insert_field_descriptor more_fld_list more_fld_list -> fld_list more_fld_list -> declared_type -> atomic_type declared_type -> IDENTIFIER !check_declared declared_type -> ^ declared_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 -> actual_arguments -> !check_arg_list_sizes actual_argument more_actual_arguments actual_arguments -> more_actual_arguments -> , actual_arguments more_actual_arguments -> actual_argument -> !determine_caller !determine_call_by expression (if by val) actual_argument -> !determine_caller !determine_call_by named_item (if by_var) procedure_list -> procedure more_procedure_list more_procedure_list -> procedure_list more_procedure_list -> statement_list -> statement statement_list statement_list -> statement -> opt_label executable_statement opt_label -> label !check_label !emit_label opt_label -> executable_statement -> read_statement executable_statement -> write_statement executable_statement -> assignment_statement executable_statement -> goto_statement executable_statement -> empty_statement executable_statement -> compound_statement executable_statement -> if_statement executable_statement -> while_statement executable_statement -> repeat_statement executable_statement -> case_statement executable_statement -> for_statement executable_statement -> next_statement executable_statement -> break_statement executable_statement -> call_statement executable_statement -> return_statement executable_statement -> dispose_request read_statement -> READ ( actual_arguments ) ; read_statement -> READLN ( actual_arguments ) ; write_statement -> WRITE ( actual_arguments ) ; write_statement -> WRITELN ( actual_arguments ) ; assignment_statement -> named_item !save_type !save_address := two_options !save_type !emit_assign; two_options -> expression !return_type two_options -> new_request !return_type expression -> simple_expression !save_type comparison !return_type comparison -> compop !save_op simple_expression !save_type !resolve_types !emit_comparison !return_type comparison -> !return_type simple_expression -> sign !save_sign term !save_type !emit_neg more_terms !save_type !return_type more_terms -> addop !save_op !check_or term !save_type !resolve_types !emit_mulop more_factors more_terms -> addop !save_op !is_or !check_type !emit_or_a term !save_type !check_type !emit_or_b more_terms more_terms -> !return_type term -> factor !save_type more_factors !save_type !return_result more_factors -> mulop !save_op !not_and factor !save_type !resolve_types !emit_mulop more_factors_a more_factors -> mulop !save_op !is_and !check_type !emit_and_a factor !save_type !check_type !emit_and_b more_factors more_factors -> !return_type factor -> named_item !emit_rvalue !return_type factor -> ( expression !save_type ) !return_type factor -> NOT factor !save_type !emit_not !return_type factor -> const !save_type !return_type factor -> & named_item !save_type !return_type named_item -> IDENTIFIER !save_ident !retrieve_info qualifier !result_type addop -> + addop -> - addop -> OR mulop -> * mulop -> / mulop -> % mulop -> AND sign -> + !return_sign sign -> - !return_sign sign -> !return_sign compop -> = compop -> <> compop -> > compop -> >= compop -> < compop -> <= goto_statement -> GOTO label !check_label !emit_goto ; empty_statement -> !emit_empty ; compound_statement -> DO !emit_do_a statement_list END !emit_do_b ; if_statement -> IF !emit_if_a ( expression !check_type ) !emit_test_a then_clause !emit_test_b else_clause !emit_test_c !emit_if_b then_clause -> THEN statement else_clause -> ELSE statement else_clause -> case_statement -> CASE !emit_case_a ( expression !check_type ) OF case_list !emit_case_b case_list -> NUMBER !emit_case_compare : statement !emit_next_case case_list case_list -> DEFAULT !discard_target : statement !exit_next_case while_statement -> WHILE !emit_while_a ( expression !check_type ) !emit_test_a statement !emit_test_b !break !emit_test_c !next !emit_while_b repeat_statement -> REPEAT !emit_repeat_a statement_list UNTIL ( expression !check_type ) !emit_test_a !break !emit_test_b !nop !emit_test_c !top !emit_repeat_b ; for_statement -> FOR !emit_for_a IDENTIFIER !check_type := initial direction final !emit_for_setup !emit_for_test statement !emit_for_increment initial -> expression final -> expression direction -> UPTO direction -> DOWNTO next_statement -> NEXT ; !get_next !go_there break_statement -> BREAK ; !get_break !go_there call_statement -> CALL named_item ; return_statement -> RETURN opt_value ; opt_value -> expression opt_value -> qualifier -> procedure_qualifier !return_result_type qualifier -> structure_qualifier !return_result_type procedure_qualifier -> ( actual_arguments ) structure_qualifier -> array_qualifier !return_data_type structure_qualifier -> record_qualifier !return_data_type structure_qualifier -> pointer_qualifier !return_data_type structure_qualifier -> !return_data_type array_qualifier -> !check_array !save_SAR [ expression !check_index ] !calc_array_offset structure_qualifier !return_type record_qualifier -> !check_record !save_SAR . IDENTIFIER !calc_record_offset structure_qualifier !return_type pointer_qualifier -> ^ structure_qualifier new_request -> NEW defined_type dispose_request -> DISPOSE named_item non-terminals: *start* actual_argument actual_arguments addop array_qualifier array_type assignment_statement break_statement call_by call_statement case_list case_statement comparison compop compound_statement const_declarations const_list declaration_type declared_type direction dispose_request else_clause empty_statement executable_statement expression factor final fld_list for_statement formal_argument formal_arguments global_declarations goto_statement if_statement initial kize_program label label_declarations label_list literal local_declarations more_actual_arguments more_const_list more_factors more_fld_list more_formal_arguments more_label_list more_proc_list more_procedure_list more_terms more_type_list more_var_list mulop named_item new_request next_statement opt_label opt_value pointer_qualifier proc_declarations proc_list proc_signature procedure procedure_list procedure_qualifier qualifier read_statement record_qualifier record_type repeat_statement return_statement return_type sign simple_expression statement statement_list structure_qualifier term then_clause two_options type_declarations type_list ub var_declarations var_list while_statement write_statement terminals: % & ( (if ) * *eof* + , - . / : := ; < <= <> = > >= AND ARRAY ASTRING BEGIN BREAK CALL CASE CONSTANTS DECIMAL DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF LABELS NEW NEXT NOT NULL NUMBER OF OR PROCEDURE PROCEDURES PROGRAM READ READLN RECORD REPEAT RETURN THEN TYPES UNTIL UPTO VAL VAR VARIABLES WHILE WRITE WRITELN [ ] ^ atomic_type by by_var) const defined_type epilogue more_factors_a val) eop-markers: !break !calc_array_offset !calc_record_offset !check_arg_list_sizes !check_array !check_declared !check_duplicate !check_index !check_int_constant !check_label !check_no_elements !check_or !check_record !check_type !determine_call_by !determine_caller !discard_target !emit_and_a !emit_and_b !emit_assign; !emit_case_a !emit_case_b !emit_case_compare !emit_comparison !emit_do_a !emit_do_b !emit_empty !emit_for_a !emit_for_increment !emit_for_setup !emit_for_test !emit_goto !emit_if_a !emit_if_b !emit_label !emit_mulop !emit_neg !emit_next_case !emit_not !emit_or_a !emit_or_b !emit_procedure_epilogue !emit_procedure_prologue !emit_program !emit_program_prologue !emit_repeat_a !emit_repeat_b !emit_rvalue !emit_test_a !emit_test_b !emit_test_c !emit_while_a !emit_while_b !exit_next_case !get_break !get_next !go_there !initialize_global_symbol_table !initialize_local_symbol_table !insert_const_entry !insert_field_descriptor !insert_label_entry !insert_proc_entry !insert_static_memory_entry !insert_type_entry !insert_variable_entry !is_and !is_or !next !nop !not_and !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_sign !return_type !save_SAR !save_address !save_array_info !save_formal_argument !save_ident !save_local_storage !save_op !save_sign !save_type !top null-deriving symbols: actual_arguments call_by comparison const_declarations else_clause formal_arguments global_declarations label_declarations local_declarations more_actual_arguments more_const_list more_factors more_fld_list more_formal_arguments more_label_list more_proc_list more_procedure_list more_terms more_type_list more_var_list opt_label opt_value proc_declarations qualifier return_type sign statement_list structure_qualifier type_declarations var_declarations *start* : PROGRAM kize_program actual_argument : !determine_call_by !determine_caller !return_sign !save_sign & ( + - IDENTIFIER NOT const expression factor named_item sign simple_expression term actual_arguments : !check_arg_list_sizes !determine_call_by !determine_caller !return_sign !save_sign & ( + - IDENTIFIER NOT actual_argument const expression factor named_item sign simple_expression term addop : + - OR array_qualifier : !check_array !save_SAR [ array_type : ARRAY assignment_statement : IDENTIFIER named_item break_statement : BREAK call_by : VAL VAR call_statement : CALL case_list : DEFAULT NUMBER case_statement : CASE comparison : !return_type < <= <> = > >= compop compop : < <= <> = > >= compound_statement : DO const_declarations : CONSTANTS const_list : IDENTIFIER declaration_type : ARRAY RECORD array_type record_type declared_type : IDENTIFIER ^ atomic_type direction : DOWNTO UPTO dispose_request : DISPOSE else_clause : ELSE empty_statement : !emit_empty ; executable_statement : !emit_empty ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT READ READLN REPEAT RETURN WHILE WRITE WRITELN assignment_statement break_statement call_statement case_statement compound_statement dispose_request empty_statement for_statement goto_statement if_statement named_item next_statement read_statement repeat_statement return_statement while_statement write_statement expression : !return_sign !save_sign & ( + - IDENTIFIER NOT const factor named_item sign simple_expression term factor : & ( IDENTIFIER NOT const named_item final : !return_sign !save_sign & ( + - IDENTIFIER NOT const expression factor named_item sign simple_expression term fld_list : IDENTIFIER for_statement : FOR formal_argument : IDENTIFIER VAL VAR call_by formal_arguments : IDENTIFIER VAL VAR call_by formal_argument global_declarations : !initialize_global_symbol_table CONSTANTS PROCEDURES TYPES VARIABLES const_declarations proc_declarations type_declarations var_declarations goto_statement : GOTO if_statement : IF initial : !return_sign !save_sign & ( + - IDENTIFIER NOT const expression factor named_item sign simple_expression term kize_program : PROGRAM label : NUMBER label_declarations : LABELS label_list : NUMBER label literal : ASTRING DECIMAL NULL NUMBER local_declarations : !initialize_local_symbol_table !save_local_storage LABELS VARIABLES label_declarations var_declarations more_actual_arguments : , more_const_list : IDENTIFIER const_list more_factors : !return_type % * / AND mulop more_fld_list : IDENTIFIER fld_list more_formal_arguments : , more_label_list : NUMBER label label_list more_proc_list : IDENTIFIER proc_list proc_signature more_procedure_list : PROCEDURE procedure procedure_list more_terms : !return_type + - OR addop more_type_list : IDENTIFIER type_list more_var_list : IDENTIFIER var_list mulop : % * / AND named_item : IDENTIFIER new_request : NEW next_statement : NEXT opt_label : NUMBER label opt_value : !return_sign !save_sign & ( + - IDENTIFIER NOT const expression factor named_item sign simple_expression term pointer_qualifier : ^ proc_declarations : PROCEDURES proc_list : IDENTIFIER proc_signature proc_signature : IDENTIFIER procedure : PROCEDURE procedure_list : PROCEDURE procedure procedure_qualifier : ( qualifier : !check_array !check_record !return_data_type !return_result_type !save_SAR ( . [ ^ array_qualifier pointer_qualifier procedure_qualifier record_qualifier structure_qualifier read_statement : READ READLN record_qualifier : !check_record !save_SAR . record_type : RECORD repeat_statement : REPEAT return_statement : RETURN return_type : : sign : !return_sign + - simple_expression : !return_sign !save_sign & ( + - IDENTIFIER NOT const factor named_item sign term statement : !emit_empty ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN assignment_statement break_statement call_statement case_statement compound_statement dispose_request empty_statement executable_statement for_statement goto_statement if_statement label named_item next_statement opt_label read_statement repeat_statement return_statement while_statement write_statement statement_list : !emit_empty ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN assignment_statement break_statement call_statement case_statement compound_statement dispose_request empty_statement executable_statement for_statement goto_statement if_statement label named_item next_statement opt_label read_statement repeat_statement return_statement statement while_statement write_statement structure_qualifier : !check_array !check_record !return_data_type !save_SAR . [ ^ array_qualifier pointer_qualifier record_qualifier term : & ( IDENTIFIER NOT const factor named_item then_clause : THEN two_options : !return_sign !save_sign & ( + - IDENTIFIER NEW NOT const expression factor named_item new_request sign simple_expression term type_declarations : TYPES type_list : IDENTIFIER ub : IDENTIFIER NUMBER var_declarations : VARIABLES var_list : IDENTIFIER while_statement : WHILE write_statement : WRITE WRITELN *start* : *eof* actual_argument : by_var) val) actual_arguments : , actual_argument actual_arguments by_var) more_actual_arguments val) addop : + - OR array_qualifier : !calc_array_offset !calc_record_offset !return_data_type !return_type IDENTIFIER ] ^ array_qualifier pointer_qualifier record_qualifier structure_qualifier array_type : !check_declared !save_array_info IDENTIFIER atomic_type declared_type assignment_statement : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier comparison const defined_type expression factor more_factors more_factors_a more_terms named_item new_request pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term two_options break_statement : !get_break !go_there ; call_by : VAL VAR call_statement : ; case_list : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement case_statement : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement comparison : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier const factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term compop : < <= <> = > >= compound_statement : ; const_declarations : !insert_const_entry ; const_list more_const_list const_list : !insert_const_entry ; const_list more_const_list declaration_type : !check_declared !save_array_info END IDENTIFIER array_type atomic_type declared_type record_type declared_type : !check_declared IDENTIFIER atomic_type declared_type direction : DOWNTO UPTO dispose_request : !calc_array_offset !calc_record_offset !result_type !retrieve_info !return_data_type !return_result_type !return_type !save_ident ) IDENTIFIER ] ^ array_qualifier named_item pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier else_clause : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement empty_statement : ; executable_statement : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement expression : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier comparison const factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term factor : !calc_array_offset !calc_record_offset !emit_not !emit_rvalue !result_type !retrieve_info !return_data_type !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier const factor named_item pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier final : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier comparison const expression factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term fld_list : !insert_field_descriptor ; fld_list more_fld_list for_statement : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement formal_argument : !save_formal_argument defined_type formal_arguments : !save_formal_argument , defined_type formal_argument formal_arguments more_formal_arguments global_declarations : !initialize_global_symbol_table !insert_const_entry !insert_proc_entry !insert_static_memory_entry !insert_type_entry !insert_variable_entry ; const_declarations const_list more_const_list more_proc_list more_type_list more_var_list proc_declarations proc_list proc_signature type_declarations type_list var_declarations var_list goto_statement : ; if_statement : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement initial : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier comparison const expression factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term kize_program : epilogue label : NUMBER label_declarations : !insert_label_entry ; label_list more_label_list label_list : !insert_label_entry ; label_list more_label_list literal : ASTRING DECIMAL NULL NUMBER local_declarations : !initialize_local_symbol_table !insert_label_entry !insert_static_memory_entry !insert_variable_entry !save_local_storage ; label_declarations label_list more_label_list more_var_list var_declarations var_list more_actual_arguments : , actual_argument actual_arguments by_var) more_actual_arguments val) more_const_list : !insert_const_entry ; const_list more_const_list more_factors : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_not !emit_rvalue !result_type !retrieve_info !return_data_type !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier const factor more_factors more_factors_a named_item pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier more_fld_list : !insert_field_descriptor ; fld_list more_fld_list more_formal_arguments : !save_formal_argument , defined_type formal_argument formal_arguments more_formal_arguments more_label_list : !insert_label_entry ; label_list more_label_list more_proc_list : !insert_proc_entry ; more_proc_list proc_list proc_signature more_procedure_list : !emit_procedure_epilogue END more_procedure_list procedure procedure_list more_terms : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_mulop !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier const factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier term more_type_list : !insert_type_entry ; more_type_list type_list more_var_list : !insert_static_memory_entry !insert_variable_entry ; more_var_list var_list mulop : % * / AND named_item : !calc_array_offset !calc_record_offset !result_type !retrieve_info !return_data_type !return_result_type !return_type !save_ident ) IDENTIFIER ] ^ array_qualifier pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier new_request : defined_type next_statement : !get_next !go_there ; opt_label : !check_label !emit_label NUMBER label opt_value : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier comparison const expression factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term pointer_qualifier : !calc_array_offset !calc_record_offset !return_data_type !return_type IDENTIFIER ] ^ array_qualifier pointer_qualifier record_qualifier structure_qualifier proc_declarations : !insert_proc_entry ; more_proc_list proc_list proc_signature proc_list : !insert_proc_entry ; more_proc_list proc_list proc_signature proc_signature : !insert_proc_entry ; procedure : !emit_procedure_epilogue END procedure_list : !emit_procedure_epilogue END more_procedure_list procedure procedure_list procedure_qualifier : ) qualifier : !calc_array_offset !calc_record_offset !return_data_type !return_result_type !return_type ) IDENTIFIER ] ^ array_qualifier pointer_qualifier procedure_qualifier record_qualifier structure_qualifier read_statement : ; record_qualifier : !calc_array_offset !calc_record_offset !return_data_type !return_type IDENTIFIER ] ^ array_qualifier pointer_qualifier record_qualifier structure_qualifier record_type : END repeat_statement : ; return_statement : ; return_type : !check_type atomic_type sign : !return_sign + - simple_expression : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier const factor more_factors more_factors_a more_terms named_item pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier term statement : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement statement_list : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement statement_list structure_qualifier term then_clause two_options while_statement write_statement structure_qualifier : !calc_array_offset !calc_record_offset !return_data_type !return_type IDENTIFIER ] ^ array_qualifier pointer_qualifier record_qualifier structure_qualifier term : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_not !emit_rvalue !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier const factor more_factors more_factors_a named_item pointer_qualifier procedure_qualifier qualifier record_qualifier structure_qualifier then_clause : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement two_options : !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_comparison !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) IDENTIFIER ] ^ array_qualifier comparison const defined_type expression factor more_factors more_factors_a more_terms named_item new_request pointer_qualifier procedure_qualifier qualifier record_qualifier simple_expression structure_qualifier term type_declarations : !insert_type_entry ; more_type_list type_list type_list : !insert_type_entry ; more_type_list type_list ub : !check_int_constant IDENTIFIER NUMBER var_declarations : !insert_static_memory_entry !insert_variable_entry ; more_var_list var_list var_list : !insert_static_memory_entry !insert_variable_entry ; more_var_list var_list while_statement : !break !calc_array_offset !calc_record_offset !check_type !emit_and_b !emit_assign; !emit_case_b !emit_comparison !emit_for_increment !emit_if_b !emit_mulop !emit_neg !emit_not !emit_or_b !emit_rvalue !emit_test_b !emit_test_c !emit_while_b !exit_next_case !get_break !get_next !go_there !next !resolve_types !result_type !retrieve_info !return_data_type !return_result !return_result_type !return_type !save_ident !save_type ) ; IDENTIFIER ] ^ array_qualifier assignment_statement break_statement call_statement case_list case_statement comparison compound_statement const defined_type dispose_request else_clause empty_statement executable_statement expression factor for_statement goto_statement if_statement more_factors more_factors_a more_terms named_item new_request next_statement pointer_qualifier procedure_qualifier qualifier read_statement record_qualifier repeat_statement return_statement simple_expression statement structure_qualifier term then_clause two_options while_statement write_statement write_statement : ; actual_argument : ) , actual_arguments : ) addop : & ( IDENTIFIER NOT const array_qualifier : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a array_type : ; assignment_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN break_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN call_by : IDENTIFIER call_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN case_list : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN case_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN comparison : (if ) ; BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] compop : & ( + - IDENTIFIER NOT const compound_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN const_declarations : BEGIN PROCEDURES TYPES VARIABLES const_list : BEGIN PROCEDURES TYPES VARIABLES declaration_type : ; declared_type : ; direction : & ( + - IDENTIFIER NOT const dispose_request : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN else_clause : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN empty_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN executable_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN expression : (if ) ; BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] factor : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a final : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN fld_list : END for_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN formal_argument : ) , formal_arguments : ) global_declarations : BEGIN goto_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN if_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN initial : DOWNTO UPTO kize_program : *eof* label : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT READ READLN REPEAT RETURN WHILE WRITE WRITELN label_declarations : BEGIN VARIABLES label_list : BEGIN VARIABLES literal : ; local_declarations : BEGIN more_actual_arguments : ) more_const_list : BEGIN PROCEDURES TYPES VARIABLES more_factors : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_fld_list : END more_formal_arguments : ) more_label_list : BEGIN VARIABLES more_proc_list : BEGIN more_procedure_list : END more_terms : (if ) ; < <= <> = > >= BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_type_list : BEGIN PROCEDURES VARIABLES more_var_list : BEGIN PROCEDURES mulop : & ( IDENTIFIER NOT const named_item : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a new_request : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN next_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN opt_label : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT READ READLN REPEAT RETURN WHILE WRITE WRITELN opt_value : ; pointer_qualifier : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a proc_declarations : BEGIN proc_list : BEGIN proc_signature : BEGIN IDENTIFIER procedure : END PROCEDURE procedure_list : END procedure_qualifier : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a qualifier : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a read_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN record_qualifier : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a record_type : ; repeat_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN return_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN return_type : ; sign : & ( IDENTIFIER NOT const simple_expression : (if ) ; < <= <> = > >= BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN statement_list : END UNTIL structure_qualifier : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a term : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] then_clause : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN two_options : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN type_declarations : BEGIN PROCEDURES VARIABLES type_list : BEGIN PROCEDURES VARIABLES ub : ] var_declarations : BEGIN PROCEDURES var_list : BEGIN PROCEDURES while_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN write_statement : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !break : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !calc_array_offset : % (if ) * + - . / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN [ ] ^ more_factors_a !calc_record_offset : % (if ) * + - . / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN [ ] ^ more_factors_a !check_arg_list_sizes : & ( + - IDENTIFIER NOT const !check_array : [ !check_declared : ; BEGIN LABELS VARIABLES !check_duplicate : ( : ; !check_index : ] !check_int_constant : ] !check_label : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT READ READLN REPEAT RETURN WHILE WRITE WRITELN !check_no_elements : ] !check_or : & ( IDENTIFIER NOT const !check_record : . !check_type : % & ( (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NOT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] const !determine_call_by : & ( + - IDENTIFIER NOT const !determine_caller : & ( + - IDENTIFIER NOT const !discard_target : : !emit_and_a : & ( IDENTIFIER NOT const !emit_and_b : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] !emit_assign; : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_case_a : ( !emit_case_b : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_case_compare : : !emit_comparison : (if ) ; BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] !emit_do_a : ; BREAK CALL CASE DISPOSE DO END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN !emit_do_b : ; !emit_empty : ; !emit_for_a : IDENTIFIER !emit_for_increment : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_for_setup : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN !emit_for_test : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN !emit_goto : ; !emit_if_a : ( !emit_if_b : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_label : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT READ READLN REPEAT RETURN WHILE WRITE WRITELN !emit_mulop : % (if ) * / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !emit_neg : (if ) + - ; < <= <> = > >= BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] !emit_next_case : DEFAULT NUMBER !emit_not : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !emit_or_a : & ( IDENTIFIER NOT const !emit_or_b : (if ) + - ; < <= <> = > >= BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] !emit_procedure_epilogue : END PROCEDURE !emit_procedure_prologue : ; BREAK CALL CASE DISPOSE DO END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN !emit_program : epilogue !emit_program_prologue : PROCEDURE !emit_repeat_a : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_repeat_b : ; !emit_rvalue : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !emit_test_a : ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN THEN WHILE WRITE WRITELN !emit_test_b : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_test_c : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !emit_while_a : ( !emit_while_b : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !exit_next_case : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !get_break : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !get_next : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !go_there : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !initialize_global_symbol_table : BEGIN CONSTANTS PROCEDURES TYPES VARIABLES !initialize_local_symbol_table : BEGIN LABELS VARIABLES !insert_const_entry : BEGIN IDENTIFIER PROCEDURES TYPES VARIABLES !insert_field_descriptor : END IDENTIFIER !insert_label_entry : BEGIN NUMBER VARIABLES !insert_proc_entry : BEGIN IDENTIFIER !insert_static_memory_entry : BEGIN IDENTIFIER PROCEDURES !insert_type_entry : BEGIN IDENTIFIER PROCEDURES VARIABLES !insert_variable_entry : BEGIN IDENTIFIER PROCEDURES !is_and : & ( IDENTIFIER NOT const !is_or : & ( IDENTIFIER NOT const !next : ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN !nop : ; !not_and : & ( IDENTIFIER NOT const !resolve_types : % (if ) * / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !result_type : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !retrieve_info : % ( (if ) * + - . / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN [ ] ^ more_factors_a !return_data_type : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !return_result : % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] !return_result_type : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !return_sign : & ( IDENTIFIER NOT const !return_type : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !save_SAR : . [ !save_address : := !save_array_info : ; !save_formal_argument : ) , !save_ident : % ( (if ) * + - . / := ; < <= <> = > >= AND BEGIN BREAK CALL CASE CONSTANTS DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF LABELS NEXT NUMBER OR PROCEDURES READ READLN REPEAT RETURN TYPES UNTIL UPTO VARIABLES WHILE WRITE WRITELN [ ] ^ more_factors_a !save_local_storage : BEGIN !save_op : & ( + - IDENTIFIER NOT const !save_sign : & ( IDENTIFIER NOT const !save_type : % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a !top : ; *start* -> kize_program *eof* selected by: PROGRAM actual_argument -> !determine_caller !determine_call_by expression (if by val) selected by: & ( + - IDENTIFIER NOT const actual_argument -> !determine_caller !determine_call_by named_item (if by_var) selected by: IDENTIFIER actual_arguments -> !check_arg_list_sizes actual_argument more_actual_arguments selected by: & ( + - IDENTIFIER NOT const actual_arguments -> selected by: ) addop -> + selected by: + addop -> - selected by: - addop -> OR selected by: OR array_qualifier -> !check_array !save_SAR [ expression !check_index ] !calc_array_offset structure_qualifier !return_type selected by: [ array_type -> ARRAY [ ub !check_no_elements ] OF declared_type !save_array_info selected by: ARRAY assignment_statement -> named_item !save_type !save_address := two_options !save_type !emit_assign; selected by: IDENTIFIER break_statement -> BREAK ; !get_break !go_there selected by: BREAK call_by -> VAL selected by: VAL call_by -> VAR selected by: VAR call_by -> selected by: IDENTIFIER call_statement -> CALL named_item ; selected by: CALL case_list -> NUMBER !emit_case_compare : statement !emit_next_case case_list selected by: NUMBER case_list -> DEFAULT !discard_target : statement !exit_next_case selected by: DEFAULT case_statement -> CASE !emit_case_a ( expression !check_type ) OF case_list !emit_case_b selected by: CASE comparison -> compop !save_op simple_expression !save_type !resolve_types !emit_comparison !return_type selected by: < <= <> = > >= comparison -> !return_type selected by: (if ) ; BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] compop -> = selected by: = compop -> <> selected by: <> compop -> > selected by: > compop -> >= selected by: >= compop -> < selected by: < compop -> <= selected by: <= compound_statement -> DO !emit_do_a statement_list END !emit_do_b ; selected by: DO const_declarations -> CONSTANTS const_list selected by: CONSTANTS const_declarations -> selected by: BEGIN PROCEDURES TYPES VARIABLES const_list -> IDENTIFIER !check_duplicate : literal ; !insert_const_entry more_const_list selected by: IDENTIFIER declaration_type -> array_type selected by: ARRAY declaration_type -> record_type selected by: RECORD declared_type -> atomic_type selected by: atomic_type declared_type -> IDENTIFIER !check_declared selected by: IDENTIFIER declared_type -> ^ declared_type selected by: ^ direction -> UPTO selected by: UPTO direction -> DOWNTO selected by: DOWNTO dispose_request -> DISPOSE named_item selected by: DISPOSE else_clause -> ELSE statement selected by: ELSE else_clause -> selected by: ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN empty_statement -> !emit_empty ; selected by: ; executable_statement -> read_statement selected by: READ READLN executable_statement -> write_statement selected by: WRITE WRITELN executable_statement -> assignment_statement selected by: IDENTIFIER executable_statement -> goto_statement selected by: GOTO executable_statement -> empty_statement selected by: ; executable_statement -> compound_statement selected by: DO executable_statement -> if_statement selected by: IF executable_statement -> while_statement selected by: WHILE executable_statement -> repeat_statement selected by: REPEAT executable_statement -> case_statement selected by: CASE executable_statement -> for_statement selected by: FOR executable_statement -> next_statement selected by: NEXT executable_statement -> break_statement selected by: BREAK executable_statement -> call_statement selected by: CALL executable_statement -> return_statement selected by: RETURN executable_statement -> dispose_request selected by: DISPOSE expression -> simple_expression !save_type comparison !return_type selected by: & ( + - IDENTIFIER NOT const factor -> named_item !emit_rvalue !return_type selected by: IDENTIFIER factor -> ( expression !save_type ) !return_type selected by: ( factor -> NOT factor !save_type !emit_not !return_type selected by: NOT factor -> const !save_type !return_type selected by: const factor -> & named_item !save_type !return_type selected by: & final -> expression selected by: & ( + - IDENTIFIER NOT const fld_list -> IDENTIFIER !check_duplicate : declared_type ; !insert_field_descriptor more_fld_list selected by: IDENTIFIER for_statement -> FOR !emit_for_a IDENTIFIER !check_type := initial direction final !emit_for_setup !emit_for_test statement !emit_for_increment selected by: FOR formal_argument -> call_by IDENTIFIER : defined_type !save_formal_argument selected by: IDENTIFIER VAL VAR formal_arguments -> formal_argument more_formal_arguments selected by: IDENTIFIER VAL VAR formal_arguments -> selected by: ) global_declarations -> !initialize_global_symbol_table const_declarations type_declarations var_declarations proc_declarations selected by: BEGIN CONSTANTS PROCEDURES TYPES VARIABLES goto_statement -> GOTO label !check_label !emit_goto ; selected by: GOTO if_statement -> IF !emit_if_a ( expression !check_type ) !emit_test_a then_clause !emit_test_b else_clause !emit_test_c !emit_if_b selected by: IF initial -> expression selected by: & ( + - IDENTIFIER NOT const kize_program -> PROGRAM IDENTIFIER !save_ident global_declarations BEGIN !emit_program_prologue procedure_list END !emit_program epilogue selected by: PROGRAM label -> NUMBER selected by: NUMBER label_declarations -> LABELS label_list selected by: LABELS label_declarations -> selected by: BEGIN VARIABLES label_list -> label !check_duplicate ; !insert_label_entry more_label_list selected by: NUMBER literal -> NUMBER selected by: NUMBER literal -> DECIMAL selected by: DECIMAL literal -> ASTRING selected by: ASTRING literal -> NULL selected by: NULL local_declarations -> !initialize_local_symbol_table label_declarations var_declarations !save_local_storage selected by: BEGIN LABELS VARIABLES more_actual_arguments -> , actual_arguments selected by: , more_actual_arguments -> selected by: ) more_const_list -> const_list selected by: IDENTIFIER more_const_list -> selected by: BEGIN PROCEDURES TYPES VARIABLES more_factors -> mulop !save_op !not_and factor !save_type !resolve_types !emit_mulop more_factors_a selected by: % * / AND more_factors -> mulop !save_op !is_and !check_type !emit_and_a factor !save_type !check_type !emit_and_b more_factors selected by: % * / AND more_factors -> !return_type selected by: % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_fld_list -> fld_list selected by: IDENTIFIER more_fld_list -> selected by: END more_formal_arguments -> , formal_arguments selected by: , more_formal_arguments -> selected by: ) more_label_list -> label_list selected by: NUMBER more_label_list -> selected by: BEGIN VARIABLES more_proc_list -> proc_list selected by: IDENTIFIER more_proc_list -> selected by: BEGIN more_procedure_list -> procedure_list selected by: PROCEDURE more_procedure_list -> selected by: END more_terms -> addop !save_op !check_or term !save_type !resolve_types !emit_mulop more_factors selected by: + - OR more_terms -> addop !save_op !is_or !check_type !emit_or_a term !save_type !check_type !emit_or_b more_terms selected by: + - OR more_terms -> !return_type selected by: (if ) ; < <= <> = > >= BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_type_list -> type_list selected by: IDENTIFIER more_type_list -> selected by: BEGIN PROCEDURES VARIABLES more_var_list -> var_list selected by: IDENTIFIER more_var_list -> selected by: BEGIN PROCEDURES mulop -> * selected by: * mulop -> / selected by: / mulop -> % selected by: % mulop -> AND selected by: AND named_item -> IDENTIFIER !save_ident !retrieve_info qualifier !result_type selected by: IDENTIFIER new_request -> NEW defined_type selected by: NEW next_statement -> NEXT ; !get_next !go_there selected by: NEXT opt_label -> label !check_label !emit_label selected by: NUMBER opt_label -> selected by: ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT READ READLN REPEAT RETURN WHILE WRITE WRITELN opt_value -> expression selected by: & ( + - IDENTIFIER NOT const opt_value -> selected by: ; pointer_qualifier -> ^ structure_qualifier selected by: ^ proc_declarations -> PROCEDURES proc_list selected by: PROCEDURES proc_declarations -> selected by: BEGIN proc_list -> proc_signature more_proc_list selected by: IDENTIFIER proc_signature -> IDENTIFIER !check_duplicate ( formal_arguments ) return_type ; !insert_proc_entry selected by: IDENTIFIER procedure -> PROCEDURE IDENTIFIER !save_ident !check_declared local_declarations BEGIN !emit_procedure_prologue statement_list END !emit_procedure_epilogue selected by: PROCEDURE procedure_list -> procedure more_procedure_list selected by: PROCEDURE procedure_qualifier -> ( actual_arguments ) selected by: ( qualifier -> procedure_qualifier !return_result_type selected by: ( qualifier -> structure_qualifier !return_result_type selected by: % (if ) * + - . / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN [ ] ^ more_factors_a read_statement -> READ ( actual_arguments ) ; selected by: READ read_statement -> READLN ( actual_arguments ) ; selected by: READLN record_qualifier -> !check_record !save_SAR . IDENTIFIER !calc_record_offset structure_qualifier !return_type selected by: . record_type -> RECORD fld_list END selected by: RECORD repeat_statement -> REPEAT !emit_repeat_a statement_list UNTIL ( expression !check_type ) !emit_test_a !break !emit_test_b !nop !emit_test_c !top !emit_repeat_b ; selected by: REPEAT return_statement -> RETURN opt_value ; selected by: RETURN return_type -> : atomic_type !check_type selected by: : return_type -> selected by: ; sign -> + !return_sign selected by: + sign -> - !return_sign selected by: - sign -> !return_sign selected by: & ( IDENTIFIER NOT const simple_expression -> sign !save_sign term !save_type !emit_neg more_terms !save_type !return_type selected by: & ( + - IDENTIFIER NOT const statement -> opt_label executable_statement selected by: ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN statement_list -> statement statement_list selected by: ; BREAK CALL CASE DISPOSE DO FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN WHILE WRITE WRITELN statement_list -> selected by: END UNTIL structure_qualifier -> array_qualifier !return_data_type selected by: [ structure_qualifier -> record_qualifier !return_data_type selected by: . structure_qualifier -> pointer_qualifier !return_data_type selected by: ^ structure_qualifier -> !return_data_type selected by: % (if ) * + - / := ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] more_factors_a term -> factor !save_type more_factors !save_type !return_result selected by: & ( IDENTIFIER NOT const then_clause -> THEN statement selected by: THEN two_options -> expression !return_type selected by: & ( + - IDENTIFIER NOT const two_options -> new_request !return_type selected by: NEW type_declarations -> TYPES type_list selected by: TYPES type_declarations -> selected by: BEGIN PROCEDURES VARIABLES type_list -> IDENTIFIER !check_duplicate : declaration_type ; !insert_type_entry more_type_list selected by: IDENTIFIER ub -> NUMBER selected by: NUMBER ub -> IDENTIFIER !check_int_constant selected by: IDENTIFIER var_declarations -> VARIABLES var_list selected by: VARIABLES var_declarations -> selected by: BEGIN PROCEDURES var_list -> IDENTIFIER !check_duplicate : declared_type ; !insert_variable_entry !insert_static_memory_entry more_var_list selected by: IDENTIFIER while_statement -> WHILE !emit_while_a ( expression !check_type ) !emit_test_a statement !emit_test_b !break !emit_test_c !next !emit_while_b selected by: WHILE write_statement -> WRITE ( actual_arguments ) ; selected by: WRITE write_statement -> WRITELN ( actual_arguments ) ; selected by: WRITELN choice set conflict for "actual_argument" actual_argument -> !determine_caller !determine_call_by expression (if by val) selected by: & ( + - IDENTIFIER NOT const actual_argument -> !determine_caller !determine_call_by named_item (if by_var) selected by: IDENTIFIER choice set conflict for "else_clause" else_clause -> ELSE statement selected by: ELSE else_clause -> selected by: ; BREAK CALL CASE DEFAULT DISPOSE DO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL WHILE WRITE WRITELN choice set conflict for "more_factors" more_factors -> mulop !save_op !not_and factor !save_type !resolve_types !emit_mulop more_factors_a selected by: % * / AND more_factors -> mulop !save_op !is_and !check_type !emit_and_a factor !save_type !check_type !emit_and_b more_factors selected by: % * / AND more_factors -> !return_type selected by: % (if ) * + - / ; < <= <> = > >= AND BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER OR READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ] choice set conflict for "more_terms" more_terms -> addop !save_op !check_or term !save_type !resolve_types !emit_mulop more_factors selected by: + - OR more_terms -> addop !save_op !is_or !check_type !emit_or_a term !save_type !check_type !emit_or_b more_terms selected by: + - OR more_terms -> !return_type selected by: (if ) ; < <= <> = > >= BREAK CALL CASE DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF NEXT NUMBER READ READLN REPEAT RETURN UNTIL UPTO WHILE WRITE WRITELN ]