fiducials: *eof* nonterm: *start* actual_argument actual_arguments addop array_qualifier array_type assignment_statement atomic_type 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 term: % & ( ) * *eof* + , - . / : := ; < <= <> = > >= ARRAY ASTRING BEGIN BREAK CALL CASE CONSTANTS DECIMAL DEFAULT DISPOSE DO DOWNTO ELSE END FOR GOTO IDENTIFIER IF INT LABELS NEW NEXT NOT NULL NUMBER OF OR PROCEDURE PROCEDURES PROGRAM READ READLN REAL RECORD REPEAT RETURN STRING THEN TYPES UNTIL UPTO VAL VAR VARIABLES WHILE WRITE WRITELN [ ] ^ defined_type eop: predicts: grammar: *start* -> kize_program *eof* CS: PROGRAM actual_argument -> expression CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & actual_arguments -> CS: ) | actual_argument more_actual_arguments CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & addop -> + CS: + | - CS: - | OR CS: OR array_qualifier -> [ expression ] structure_qualifier CS: [ array_type -> ARRAY [ ub ] OF declared_type CS: ARRAY assignment_statement -> named_item := two_options ; CS: IDENTIFIER atomic_type -> INT CS: INT | REAL CS: REAL | STRING CS: STRING break_statement -> BREAK ; CS: BREAK call_by -> CS: IDENTIFIER | VAL CS: VAL | VAR CS: VAR call_statement -> CALL named_item ; CS: CALL case_list -> DEFAULT : statement CS: DEFAULT | NUMBER : statement case_list CS: NUMBER case_statement -> CASE ( expression ) OF case_list CS: CASE comparison -> CS: DO IF DOWNTO ] FOR BREAK DISPOSE READ ; CASE UPTO READLN WRITELN WHILE NUMBER CALL WRITE , GOTO IDENTIFIER ) RETURN NEXT REPEAT | compop simple_expression CS: >= = <> > < <= compop -> = CS: = | <> CS: <> | > CS: > | >= CS: >= | < CS: < | <= CS: <= compound_statement -> DO statement_list END ; CS: DO const_declarations -> CS: VARIABLES BEGIN PROCEDURES TYPES | CONSTANTS const_list CS: CONSTANTS const_list -> IDENTIFIER : literal ; more_const_list CS: IDENTIFIER declaration_type -> array_type CS: ARRAY | record_type CS: RECORD declared_type -> IDENTIFIER CS: IDENTIFIER | atomic_type CS: INT REAL STRING | ^ declared_type CS: ^ direction -> UPTO CS: UPTO | DOWNTO CS: DOWNTO dispose_request -> DISPOSE named_item CS: DISPOSE else_clause -> CS: DO IF FOR BREAK DISPOSE READ END ; CASE READLN DEFAULT WRITELN ELSE WHILE NUMBER CALL WRITE GOTO UNTIL IDENTIFIER RETURN NEXT REPEAT | ELSE statement CS: ELSE empty_statement -> ; CS: ; executable_statement -> empty_statement CS: ; | read_statement CS: READ READLN | write_statement CS: WRITELN WRITE | assignment_statement CS: IDENTIFIER | goto_statement CS: GOTO | compound_statement CS: DO | if_statement CS: IF | while_statement CS: WHILE | repeat_statement CS: REPEAT | case_statement CS: CASE | for_statement CS: FOR | next_statement CS: NEXT | break_statement CS: BREAK | call_statement CS: CALL | return_statement CS: RETURN | dispose_request CS: DISPOSE expression -> simple_expression comparison CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & factor -> literal CS: NULL NUMBER ASTRING DECIMAL | named_item CS: IDENTIFIER | ( expression ) CS: ( | NOT factor CS: NOT | & named_item CS: & final -> expression CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & fld_list -> IDENTIFIER : declared_type ; more_fld_list CS: IDENTIFIER for_statement -> FOR IDENTIFIER := initial direction final statement CS: FOR formal_argument -> call_by IDENTIFIER : defined_type CS: VAR VAL IDENTIFIER formal_arguments -> CS: ) | formal_argument more_formal_arguments CS: VAR VAL IDENTIFIER global_declarations -> const_declarations type_declarations var_declarations proc_declarations CS: VARIABLES BEGIN CONSTANTS PROCEDURES TYPES goto_statement -> GOTO label ; CS: GOTO if_statement -> IF ( expression ) then_clause else_clause CS: IF initial -> expression CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & kize_program -> PROGRAM IDENTIFIER global_declarations BEGIN procedure_list END CS: PROGRAM label -> NUMBER CS: NUMBER label_declarations -> CS: VARIABLES BEGIN | LABELS label_list CS: LABELS label_list -> label ; more_label_list CS: NUMBER literal -> NUMBER CS: NUMBER | DECIMAL CS: DECIMAL | ASTRING CS: ASTRING | NULL CS: NULL local_declarations -> label_declarations var_declarations CS: VARIABLES LABELS BEGIN more_actual_arguments -> CS: ) | , actual_arguments CS: , more_const_list -> CS: VARIABLES BEGIN PROCEDURES TYPES | const_list CS: IDENTIFIER more_factors -> CS: >= DO IF DOWNTO - = ] FOR BREAK DISPOSE OR <> READ > + ; CASE UPTO READLN WRITELN WHILE NUMBER CALL WRITE , < GOTO IDENTIFIER ) RETURN <= NEXT REPEAT | mulop factor more_factors CS: * NOT % / more_fld_list -> CS: END | fld_list CS: IDENTIFIER more_formal_arguments -> CS: ) | , formal_arguments CS: , more_label_list -> CS: VARIABLES BEGIN | label_list CS: NUMBER more_proc_list -> CS: BEGIN | proc_list CS: IDENTIFIER more_procedure_list -> CS: END | procedure_list CS: PROCEDURE more_terms -> CS: >= DO IF DOWNTO = ] FOR BREAK DISPOSE <> READ > ; CASE UPTO READLN WRITELN WHILE NUMBER CALL WRITE , < GOTO IDENTIFIER ) RETURN <= NEXT REPEAT | addop term more_terms CS: - OR + more_type_list -> CS: VARIABLES BEGIN PROCEDURES | type_list CS: IDENTIFIER more_var_list -> CS: BEGIN PROCEDURES | var_list CS: IDENTIFIER mulop -> * CS: * | / CS: / | % CS: % | NOT CS: NOT named_item -> IDENTIFIER qualifier CS: IDENTIFIER new_request -> NEW defined_type CS: NEW next_statement -> NEXT ; CS: NEXT opt_label -> CS: DO IF FOR BREAK DISPOSE READ ; CASE READLN WRITELN WHILE CALL WRITE GOTO IDENTIFIER RETURN NEXT REPEAT | label CS: NUMBER opt_value -> CS: ; | expression CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & pointer_qualifier -> ^ structure_qualifier CS: ^ proc_declarations -> CS: BEGIN | PROCEDURES proc_list CS: PROCEDURES proc_list -> proc_signature more_proc_list CS: IDENTIFIER proc_signature -> IDENTIFIER ( formal_arguments ) return_type ; CS: IDENTIFIER procedure -> PROCEDURE IDENTIFIER local_declarations BEGIN statement_list END CS: PROCEDURE procedure_list -> procedure more_procedure_list CS: PROCEDURE procedure_qualifier -> ( actual_arguments ) CS: ( qualifier -> structure_qualifier CS: >= DO IF DOWNTO - = ] FOR BREAK DISPOSE * OR <> NOT READ END . > ^ + ; [ CASE UPTO READLN DEFAULT WRITELN ELSE % WHILE NUMBER / CALL WRITE , < := GOTO UNTIL IDENTIFIER ) RETURN <= NEXT REPEAT | procedure_qualifier CS: ( read_statement -> READ ( actual_arguments ) ; CS: READ | READLN ( actual_arguments ) ; CS: READLN record_qualifier -> . IDENTIFIER structure_qualifier CS: . record_type -> RECORD fld_list END CS: RECORD repeat_statement -> REPEAT statement_list UNTIL ( expression ) ; CS: REPEAT return_statement -> RETURN opt_value ; CS: RETURN return_type -> CS: ; | : atomic_type CS: : sign -> CS: NOT ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & | + CS: + | - CS: - simple_expression -> sign term more_terms CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & statement -> opt_label executable_statement CS: DO IF FOR BREAK DISPOSE READ ; CASE READLN WRITELN WHILE NUMBER CALL WRITE GOTO IDENTIFIER RETURN NEXT REPEAT statement_list -> CS: END UNTIL | statement statement_list CS: DO IF FOR BREAK DISPOSE READ ; CASE READLN WRITELN WHILE NUMBER CALL WRITE GOTO IDENTIFIER RETURN NEXT REPEAT structure_qualifier -> CS: >= DO IF DOWNTO - = ] FOR BREAK DISPOSE * OR <> NOT READ END > + ; CASE UPTO READLN DEFAULT WRITELN ELSE % WHILE NUMBER / CALL WRITE , < := GOTO UNTIL IDENTIFIER ) RETURN <= NEXT REPEAT | array_qualifier CS: [ | record_qualifier CS: . | pointer_qualifier CS: ^ term -> factor more_factors CS: NOT ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & then_clause -> THEN statement CS: THEN two_options -> expression CS: - NOT + ( NULL NUMBER ASTRING IDENTIFIER DECIMAL & | new_request CS: NEW type_declarations -> CS: VARIABLES BEGIN PROCEDURES | TYPES type_list CS: TYPES type_list -> IDENTIFIER : declaration_type ; more_type_list CS: IDENTIFIER ub -> NUMBER CS: NUMBER | IDENTIFIER CS: IDENTIFIER var_declarations -> CS: BEGIN PROCEDURES | VARIABLES var_list CS: VARIABLES var_list -> IDENTIFIER : declared_type ; more_var_list CS: IDENTIFIER while_statement -> WHILE ( expression ) statement CS: WHILE write_statement -> WRITE ( actual_arguments ) ; CS: WRITE | WRITELN ( actual_arguments ) ; CS: WRITELN end: