~ ~
kize_program		PROGRAM IDENTIFIER global_declarations BEGIN procedure_list END

global_declarations	const_declarations type_declarations var_declarations proc_declarations

local_declarations	label_declarations var_declarations

const_declarations	CONSTANTS const_list
const_declarations

const_list		IDENTIFIER : literal ; 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 : declaration_type ; more_type_list

more_type_list		type_list
more_type_list

// initially only atomic types: INT, REAL, and STRING
// later we will discuss structured types using: ARRAYs and RECORDs

	declaration_type array_type
	declaration_type record_type

	array_type	ARRAY [ ub ] OF declared_type

	ub		NUMBER
	ub		IDENTIFIER

	record_type	RECORD fld_list END

	fld_list	IDENTIFIER : declared_type ; more_fld_list

	more_fld_list	fld_list
	more_fld_list

declared_type		atomic_type
	declared_type	IDENTIFIER
	declared_type	^ declared_type

atomic_type             INT
atomic_type             REAL
atomic_type		STRING

var_declarations	VARIABLES var_list
var_declarations

var_list		IDENTIFIER : declared_type ; more_var_list

more_var_list		var_list
more_var_list

label_declarations	LABELS label_list
label_declarations

label_list		label ; 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 ( formal_arguments ) return_type ;

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

call_by			VAL
call_by			VAR
call_by

return_type		: atomic_type
return_type

// initially we are only concerned with declaring a procedure
// later we will discuss its definition and its activation

	actual_arguments actual_argument more_actual_arguments
	actual_arguments

	more_actual_arguments , actual_arguments
	more_actual_arguments

	actual_argument	expression

	procedure_list	procedure more_procedure_list

	more_procedure_list procedure_list
	more_procedure_list

procedure		PROCEDURE IDENTIFIER local_declarations BEGIN statement_list END
