home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-10-01 | 32.2 KB | 1,493 lines |
-
- /*---------------------------------------------------------------------------*/
- /* */
- /* A LALR(1) grammar for ANSI Ada* */
- /* */
- /* Adapted for YACC (UNIX) Inputs */
- /* */
- /* */
- /* Herman Fischer */
- /* Litton Data Systems */
- /* 8000 Woodley Ave., ms 44-30 */
- /* Van Nuys, CA */
- /* */
- /* 818/902-5139 */
- /* HFischer@eclb.arpa */
- /* {cepu,trwrb}!litvax!fischer */
- /* */
- /* March 26, 1984 */
- /* */
- /* A Contribution to the Public Domain */
- /* for */
- /* Research, Development, and Training Purposes Only */
- /* */
- /* Any Corrections or Problems are to be Reported to the Author */
- /* */
- /* */
- /* */
- /* adapted from */
- /* the grammar */
- /* by: */
- /* */
- /* Gerry Fisher Philippe Charles */
- /* */
- /* Computer Sciences Corporation & Ada Project */
- /* 4045 Hancock Street New York University */
- /* San Diego, CA 92121 251 Mercer Street */
- /* New York, New York 10012 */
- /* */
- /* */
- /* This grammar is organized in the same order as the syntax summary */
- /* in appendix E of the ANSI Ada Reference Manual. All reserved words */
- /* are written in upper case letters. The lexical categories */
- /* numeric_literal, string_literal, etc, are viewed as terminals. The */
- /* rules for pragmas as stated in chapter 2, section 8, have been */
- /* incorporated in the grammar. Comments are included wherever we had */
- /* to deviate from the syntax given in appendix E. Different symbols */
- /* used here (to comply with yacc requirements) are of note: */
- /* {,something} is denoted ...something.. */
- /* {something} is denoted ..something.. */
- /* [something] is denoted .something. */
- /* Constructs involving */
- /* meta brackets, e.g., ...identifier.. are represented by a nonterminal */
- /* formed by concatenating the construct symbols ( as ...identifier.. */
- /* in the example) for which the rules are given at the end. When */
- /* reading this grammar, it is important to note that all symbols */
- /* appearing in the rules are separated by one or more blanks. A */
- /* string such as 'identifier_type_mark is actually a single */
- /* nonterminal symbol defined at the end of the rules. The '/*' symbol */
- /* is used to indicate that the rest of the line is a comment, just */
- /* as in yacc programs. */
- /* */
- /* This grammar is presented here in a form suitable for input to a */
- /* yacc parser generator. It has been processed by the Bell System */
- /* III lex/yacc combination, and tested against over 400 ACVC tests. */
- /* */
- /* *Ada is a registered trade mark of the Department of Defense (Ada */
- /* Joint Program Office). */
- /* */
- /*---------------------------------------------------------------------------*/
-
-
- /*%terminals ----------------------------------------------------------- */
-
- %token ABORT_ ABS_ ACCEPT_ ACCESS_ ALL_ AND_ ARRAY_
- %token AT_ BEGIN_ BODY_ CASE_ CONSTANT_
- %token DECLARE_ DELAY_ DELTA_ DIGITS_ DO_ ELSE_ ELSIF_
- %token END_ ENTRY_ EXCEPTION_ EXIT_ FOR_
- %token FUNCTION_ GENERIC_ GOTO_ IF_ IN_ IS_ LIMITED_
- %token LOOP_ MOD_ NEW_ NOT_ NULL_ OF_ OR_
- %token OTHERS_ OUT_ PACKAGE_ PRAGMA_ PRIVATE_
- %token PROCEDURE_ RAISE_ RANGE_ RECORD_ REM_
- %token RENAMES_ RETURN_ REVERSE_ SELECT_ SEPARATE_
- %token SUBTYPE_ TASK_ TERMINATE_ THEN_
- %token TYPE_ USE_ WHEN_ WHILE_ WITH_ XOR_
-
- %token identifier numeric_literal string_literal character_literal
- %token ARROW_ DBLDOT_ EXP_ ASSIGN_ NOTEQL_ GTEQL_ LTEQ_ L_LBL_ R_LBL_ BOX_
-
- %start compilation
-
- %%
-
-
- /* 2.8 */
-
- prag :
- PRAGMA_ identifier .arg_ascs ';' ;
-
- arg_asc :
- expr
- | identifier ARROW_ expr ;
-
-
-
- /* 3.1 */
-
- basic_d :
- object_d
- | ty_d | subty_d
- | subprg_d | pkg_d
- | task_d | gen_d
- | excptn_d | gen_inst
- | renaming_d | number_d
- | error ';' ;
-
-
- /* 3.2 */
-
- object_d :
- idents ':' subty_ind ._ASN_expr. ';'
- | idents ':' CONSTANT_ subty_ind ._ASN_expr. ';'
- | idents ':' c_arr_def ._ASN_expr. ';'
- | idents ':' CONSTANT_ c_arr_def ._ASN_expr. ';' ;
-
-
- number_d :
- idents ':' CONSTANT_ ASSIGN_ expr ';' ;
-
-
- idents : identifier ...ident.. ;
-
-
- /* 3.3.1 */
-
- ty_d :
- full_ty_d
- | incomplete_ty_d
- | priv_ty_d ;
-
- full_ty_d :
- TYPE_ identifier IS_ ty_def ';'
- | TYPE_ identifier discr_part IS_ ty_def ';' ;
-
-
- ty_def :
- enum_ty_def | integer_ty_def
- | real_ty_def | array_ty_def
- | rec_ty_def | access_ty_def
- | derived_ty_def ;
-
-
- /* 3.3.2 */
-
- subty_d :
- SUBTYPE_ identifier IS_ subty_ind ';' ;
-
-
- subty_ind : ty_mk .constrt. ;
-
-
- ty_mk : expanded_n ;
-
-
- constrt :
- rng_c
- | fltg_point_c | fixed_point_c
- | aggr ;
-
-
-
- /* 3.4 */
-
- derived_ty_def : NEW_ subty_ind ;
-
-
- /* 3.5 */
-
- rng_c : RANGE_ rng ;
-
- rng :
- name
- | sim_expr DBLDOT_ sim_expr ;
-
-
- /* 3.5.1 */
-
- enum_ty_def :
- '(' enum_lit_spec
- ...enum_lit_spec.. ')' ;
-
-
- enum_lit_spec : enum_lit ;
-
- enum_lit : identifier | character_literal ;
-
-
- /* 3.5.4 */
-
- integer_ty_def : rng_c ;
-
-
- /* 3.5.6 */
-
- real_ty_def :
- fltg_point_c | fixed_point_c ;
-
-
- /* 3.5.7 */
-
- fltg_point_c :
- fltg_accuracy_def .rng_c. ;
-
-
- fltg_accuracy_def :
- DIGITS_ sim_expr ;
-
-
- /* 3.5.9 */
-
- fixed_point_c :
- fixed_accuracy_def .rng_c. ;
-
-
- fixed_accuracy_def :
- DELTA_ sim_expr ;
-
-
- /* 3.6 */
-
- array_ty_def :
- uncnstrnd_array_def | c_arr_def ;
-
-
- uncnstrnd_array_def :
- ARRAY_ '(' idx_subty_def ...idx_subty_def.. ')' OF_
- subty_ind ;
-
-
- c_arr_def :
- ARRAY_ idx_c OF_ subty_ind ;
-
-
- idx_subty_def : name RANGE_ BOX_ ;
-
-
- idx_c : '(' dscr_rng ...dscr_rng.. ')' ;
-
-
- dscr_rng :
- rng
- | name rng_c ;
-
-
-
- /* 3.7 */
-
- rec_ty_def :
- RECORD_
- cmpons
- END_ RECORD_ ;
-
-
- cmpons :
- ..prag.. ..cmpon_d.. cmpon_d ..prag..
- | ..prag.. ..cmpon_d.. variant_part ..prag..
- | ..prag.. NULL_ ';' ..prag.. ;
-
-
- cmpon_d :
- idents ':' cmpon_subty_def ._ASN_expr. ';' ;
-
-
- cmpon_subty_def : subty_ind ;
-
-
-
- /* 3.7.1 */
-
- discr_part :
- '(' discr_spec ...discr_spec.. ')' ;
-
-
- discr_spec :
- idents ':' ty_mk ._ASN_expr. ;
-
-
- /* 3.7.2 */
-
- /*discr_c : */
- /* '(' discr_asc ... discr_asc.. ')' ; */
- /* */
- /*discr_asc : */
- /* .discr_sim_n ..or_discrim_sim_n.. ARROW. expressi */
- /* ; */
- /*"discr_c" is included under "aggr" */
-
-
- /* 3.7.3 */
-
- variant_part :
- CASE_ sim_n IS_
- ..prag.. variant ..variant..
- END_ CASE_ ';' ;
-
-
- variant :
- WHEN_ choice ..or_choice.. ARROW_
- cmpons ;
-
-
- choice :
- sim_expr
- | name rng_c
- | sim_expr DBLDOT_ sim_expr
- | OTHERS_ ;
-
-
-
- /* 3.8 */
-
- access_ty_def : ACCESS_ subty_ind ;
-
-
- /* 3.8.1 */
-
- incomplete_ty_d :
- TYPE_ identifier ';'
- | TYPE_ identifier discr_part ';' ;
-
- /* 3.9 */
-
- decl_part :
- ..basic_decl_item..
- | ..basic_decl_item.. body ..later_decl_item.. ;
-
- basic_decl_item :
- basic_d
- | rep_cl | use_cl ;
-
-
- later_decl_item : body
- | subprg_d | pkg_d
- | task_d | gen_d
- | use_cl | gen_inst ;
-
- body : proper_body | body_stub ;
-
- proper_body :
- subprg_body | pkg_body | task_body ;
-
-
-
- /* 4.1 */
-
- name : sim_n
- | character_literal | op_symbol
- | idxed_cmpon
- | selected_cmpon | attribute ;
-
-
- sim_n : identifier ;
-
-
- prefix : name ;
-
-
-
- /* 4.1.1 */
-
- idxed_cmpon :
- prefix aggr ;
-
-
- /* 4.1.2 */
-
- /* slice : prefix '(' dscr_rng ')' ; */
- /* */
- /* included under "idxed_cmpon". */
-
-
- /* 4.1.3 */
-
- selected_cmpon : prefix '.' selector ;
-
- selector : sim_n
- | character_literal | op_symbol | ALL_ ;
-
-
-
- /* 4.1.4 */
-
- attribute : prefix '\'' attribute_designator ;
-
-
- /* This can be an attribute, idxed cmpon, slice, or subprg call. */
- attribute_designator :
- sim_n
- | DIGITS_
- | DELTA_
- | RANGE_ ;
-
-
-
-
- /* 4.3 */
-
- aggr :
- '(' cmpon_asc ...cmpon_asc.. ')' ;
-
-
- cmpon_asc :
- expr
- | choice ..or_choice.. ARROW_ expr
- | sim_expr DBLDOT_ sim_expr
- | name rng_c ;
-
-
-
- /* 4.4 */
-
- expr :
- rel..AND__rel.. | rel..AND__THEN__rel..
- | rel..OR__rel.. | rel..OR__ELSE__rel..
- | rel..XOR__rel.. ;
-
-
- rel :
- sim_expr .relal_op__sim_expr.
- | sim_expr.NOT.IN__rng_or_sim_expr.NOT.IN__ty_mk ;
-
-
- sim_expr :
- .unary_add_op.term..binary_add_op__term.. ;
-
-
- term : factor..mult_op__factor.. ;
-
-
- factor : pri ._EXP___pri. | ABS_ pri | NOT_ pri ;
-
-
- pri :
- numeric_literal | NULL_
- | allocator | qualified_expr
- | name
- | aggr ;
-
- /* "'(' expr ')'" is included under "aggr". */
-
-
- /* 4.5 */
-
- /* logical_op : AND_ | OR_ | XOR_ ; */
- /* */
- /* This is an unused syntactic class. */
-
-
- relal_op : '=' | NOTEQL_ | '<' | LTEQ_ | '>' | GTEQL_ ;
-
-
- binary_add_op : '+' | '-' | '&' ;
-
-
- unary_add_op : '+' | '-' ;
-
-
- mult_op : '*' | '/' | MOD_ | REM_ ;
-
-
- /* highest_precedence_op : EXP_ | ABS_ | NOT_ ; */
- /* */
- /* This is an unused syntactic class. */
-
-
-
- /* 4.6 */
-
- /* ty_cnvr : ty_mk '(' expr ')' ; */
- /* */
- /* The class "ty_cnvr" is included under "name". */
-
-
- /* 4.7 */
-
- qualified_expr :
- ty_mkaggr_or_ty_mkPexprP_ ;
-
-
-
- /* 4.8 */
-
- allocator :
- NEW_ ty_mk
- | NEW_ ty_mk aggr
- | NEW_ ty_mk '\'' aggr ;
-
-
-
- /* 5.1 */
-
- seq_of_stmts :
- ..prag.. stmt ..stmt.. ;
-
-
- stmt :
- ..label.. sim_stmt | ..label.. compound_stmt
- | error ';' ;
-
- sim_stmt : null_stmt
- | assignment_stmt | exit_stmt
- | return_stmt | goto_stmt
- | delay_stmt | abort_stmt
- | raise_stmt | code_stmt
- | name ';' ;
-
- /* Procedure and ent call stmts are included under "name". */
-
-
- compound_stmt :
- if_stmt | case_stmt
- | loop_stmt | block_stmt
- | accept_stmt | select_stmt ;
-
-
- label : L_LBL_ sim_n R_LBL_ ;
-
-
- null_stmt : NULL_ ';' ;
-
-
- /* 5.2 */
-
- assignment_stmt : name ASSIGN_ expr ';' ;
-
-
- /* 5.3 */
-
- if_stmt :
- IF_ cond THEN_
- seq_of_stmts
- ..ELSIF__cond__THEN__seq_of_stmts..
- .ELSE__seq_of_stmts.
- END_ IF_ ';' ;
-
-
- cond : expr ;
-
-
- /* 5.4 */
-
- case_stmt :
- CASE_ expr IS_
- case_stmt_alt..case_stmt_alt..
- END_ CASE_ ';' ;
-
-
- case_stmt_alt :
- WHEN_ choice ..or_choice.. ARROW_
- seq_of_stmts ;
-
-
- /* 5.5 */
-
- loop_stmt :
- .sim_nC. /*simple name colon */
- .iteration_scheme. LOOP_
- seq_of_stmts
- END_ LOOP_ .sim_n. ';' ;
-
-
-
- iteration_scheme :
- WHILE_ cond
- | FOR_ loop_prm_spec ;
-
-
- loop_prm_spec :
- identifier IN_ .REVERSE. dscr_rng ;
-
-
- /* 5.6 */
-
- block_stmt :
- .sim_nC.
- .DECLARE__decl_part.
- BEGIN_
- seq_of_stmts
- .EXCEPTION__excptn_handler..excptn_handler...
- END_ .sim_n. ';' ;
-
-
- /* 5.7 */
-
- exit_stmt :
- EXIT_ .expanded_n. .WHEN__cond. ';' ;
-
-
- /* 5.8 */
-
- return_stmt : RETURN_ .expr. ';' ;
-
-
- /* 5.9 */
-
- goto_stmt : GOTO_ expanded_n ';' ;
-
-
-
- /* 6.1 */
-
- subprg_d : subprg_spec ';' ;
-
-
- subprg_spec :
- PROCEDURE_ identifier .fml_part.
- | FUNCTION_ designator .fml_part. RETURN_ ty_mk ;
-
-
- designator : identifier | op_symbol ;
-
-
- op_symbol : string_literal ;
-
-
- fml_part :
- '(' prm_spec .._.prm_spec.. ')' ;
-
-
- prm_spec :
- idents ':' mode ty_mk ._ASN_expr. ;
-
-
- mode : .IN. | IN_ OUT_ | OUT_ ;
-
-
-
- /* 6.3 */
-
- subprg_body :
- subprg_spec IS_
- .decl_part.
- BEGIN_
- seq_of_stmts
- .EXCEPTION__excptn_handler..excptn_handler...
- END_ .designator. ';' ;
-
-
- /* 6.4 */
-
- /* procedure_call_stmt : */
- /* procedure_n .act_prm_part. ';' ; */
- /* */
- /* func_call : */
- /* func_n .act_prm. ; */
- /* */
- /* act_prm_part : */
- /* '(' prm_asc ... prm_asc .._paren ; */
- /* */
- /* prm_asc : */
- /* .fml_prm ARROW. act_prm ; */
- /* */
- /* fml_prm : sim_n ; */
- /* */
- /* act_prm : */
- /* expr | name | ty_mk '(' name ')'; */
- /* */
- /* "procedure_call_stmt" and "func_call" are included under "name".*/
-
-
-
- /* 7.1 */
-
- pkg_d : pkg_spec ';' ;
-
- pkg_spec :
- PACKAGE_ identifier IS_
- ..basic_decl_item..
- .PRIVATE..basic_decl_item...
- END_ .sim_n. ;
-
-
- pkg_body :
- PACKAGE_ BODY_ sim_n IS_
- .decl_part.
- .BEGIN__seq_of_stmts.EXCEPTION__excptn_handler..excptn_handler...
- END_ .sim_n. ';' ;
-
-
-
- /* 7.4 */
-
- priv_ty_d :
- TYPE_ identifier IS_ .LIMITED. PRIVATE_ ';'
- | TYPE_ identifier discr_part IS_ .LIMITED. PRIVATE_ ';' ;
-
- /* defer_const_d : */
- /* idents : CONSTANT_ ty_mk ';' ; */
- /* */
- /* Included under "object_d". */
-
-
-
- /* 8.4 */
-
- use_cl : USE_ expanded_n ...expanded_n.. ';' ;
-
-
-
- /* 8.5 */
-
- renaming_d :
- idents ':' ty_mk RENAMES_ name ';'
- | idents ':' EXCEPTION_ RENAMES_ expanded_n ';'
- | PACKAGE_ identifier RENAMES_ expanded_n ';'
- | subprg_spec RENAMES_ name ';' ;
-
- /* idents in the two above rule must contain only one */
- /* identifier. */
-
-
- /* 9.1 */
-
- task_d : task_spec ';' ;
-
- task_spec :
- TASK_ .TYPE. identifier
- .IS..ent_d_..rep_cl_END.sim_n.
- ;
-
- task_body :
- TASK_ BODY_ sim_n IS_
- .decl_part.
- BEGIN_
- seq_of_stmts
- .EXCEPTION__excptn_handler..excptn_handler...
- END_ .sim_n. ';' ;
-
-
- /* 9.5 */
-
- ent_d :
- ENTRY_ identifier .fml_part. ';'
- | ENTRY_ identifier '(' dscr_rng ')' .fml_part. ';' ;
-
-
- ent_call_stmt :
- ..prag.. name ';' ;
-
-
- accept_stmt :
- ACCEPT_ sim_n .Pent_idx_P..fml_part.
- .DO__seq_of_stmts__END.sim_n.. ';' ;
-
-
- ent_idx : expr ;
-
-
- /* 9.6 */
-
- delay_stmt : DELAY_ sim_expr ';' ;
-
-
- /* 9.7 */
-
- select_stmt : selec_wait
- | condal_ent_call | timed_ent_call ;
-
-
- /* 9.7.1 */
-
- selec_wait :
- SELECT_
- select_alt
- ..OR__select_alt..
- .ELSE__seq_of_stmts.
- END_ SELECT_ ';' ;
-
-
- select_alt :
- .WHEN__condARROW.selec_wait_alt ;
-
-
- selec_wait_alt : accept_alt
- | delay_alt | terminate_alt ;
-
-
- accept_alt :
- accept_stmt.seq_of_stmts. ;
-
-
- delay_alt :
- delay_stmt.seq_of_stmts. ;
-
-
- terminate_alt : TERM_stmt ;
-
-
- /* 9.7.2 */
-
- condal_ent_call :
- SELECT_
- ent_call_stmt
- .seq_of_stmts.
- ELSE_
- seq_of_stmts
- END_ SELECT_ ';' ;
-
-
-
- /* 9.7.3 */
-
- timed_ent_call :
- SELECT_
- ent_call_stmt
- .seq_of_stmts.
- OR_
- delay_alt
- END_ SELECT_ ';' ;
-
-
- /* 9.10 */
-
- abort_stmt : ABORT_ name ...name.. ';' ;
-
-
- /* 10.1 */
-
- compilation : ..compilation_unit.. ;
-
-
- compilation_unit :
- context_cl library_unit
- | context_cl secondary_unit ;
-
- library_unit :
- subprg_d | pkg_d
- | gen_d | gen_inst
- | subprg_body ;
-
-
- secondary_unit :
- library_unit_body | subunit ;
-
-
- library_unit_body :
- pkg_body_or_subprg_body ;
-
-
-
- /* 10.1.1 */
-
- context_cl : ..with_cl..use_cl.... ;
-
-
- with_cl : WITH_ sim_n ...sim_n.. ';' ;
-
-
- /* 10.2 */
-
- body_stub :
- subprg_spec IS_ SEPARATE_ ';'
- | PACKAGE_ BODY_ sim_n IS_ SEPARATE_ ';'
- | TASK_ BODY_ sim_n IS_ SEPARATE_ ';' ;
-
-
- subunit : SEPARATE_ '(' expanded_n ')' proper_body ;
-
-
-
- /* 11.1 */
-
- excptn_d : idents ':' EXCEPTION_ ';' ;
-
-
- /* 11.2 */
-
- excptn_handler :
- WHEN_ excptn_choice ..or_excptn_choice.. ARROW_
- seq_of_stmts ;
-
-
- excptn_choice : expanded_n | OTHERS_ ;
-
-
- /* 11.3 */
-
- raise_stmt : RAISE_ .expanded_n. ';' ;
-
-
-
- /* 12.1 */
-
- gen_d : gen_spec ';' ;
-
- gen_spec :
- gen_fml_part subprg_spec
- | gen_fml_part pkg_spec ;
-
-
- gen_fml_part : GENERIC_ ..gen_prm_d.. ;
-
-
- gen_prm_d :
- idents ':' .IN.OUT.. ty_mk ._ASN_expr. ';'
- | TYPE_ identifier IS_ gen_ty_def ';'
- | priv_ty_d
- | WITH_ subprg_spec .IS_BOX_. ';' ;
- /* | WITH_ subprg_spec .IS_ name. ';' */
- /* */
- /* This rule is included in the previous one. */
-
-
- gen_ty_def :
- '(' BOX_ ')' | RANGE_ BOX_ | DIGITS_ BOX_ | DELTA_ BOX_
- | array_ty_def | access_ty_def ;
-
-
- /* 12.3 */
-
- gen_inst :
- PACKAGE_ identifier IS_
- NEW_ expanded_n .gen_act_part. ';'
- | PROCEDURE__ident__IS_
- NEW_ expanded_n .gen_act_part. ';'
- | FUNCTION_ designator IS_
- NEW_ expanded_n .gen_act_part. ';' ;
-
-
- gen_act_part :
- '(' gen_asc ...gen_asc.. ')' ;
-
-
- gen_asc :
- .gen_fml_prmARROW.gen_act_prm ;
-
-
- gen_fml_prm :
- sim_n | op_symbol ;
-
- gen_act_prm :
- expr_or_name_or_subprg_n_or_ent_n_or_ty_mk
- ;
-
-
- /* 13.1 */
-
- rep_cl :
- ty_rep_cl | address_cl ;
-
- ty_rep_cl : length_cl
- | enum_rep_cl
- | rec_rep_cl ;
-
-
- /* 13.2 */
-
- length_cl : FOR_ attribute USE_ sim_expr ';' ;
-
-
-
- /* 13.3 */
-
- enum_rep_cl :
- FOR__ty_sim_n__USE_ aggr ';' ;
-
-
-
- /* 13.4 */
-
- rec_rep_cl :
- FOR__ty_sim_n__USE_
- RECORD_ .algt_cl.
- ..cmpon_cl..
- END_ RECORD_ ';' ;
-
-
- algt_cl : AT_ MOD_ sim_expr ';' ;
-
-
- cmpon_cl :
- name AT_ sim_expr RANGE_ rng ';' ;
-
-
-
- /* 13.5 */
-
- address_cl : FOR_ sim_n USE_ AT_ sim_expr ';' ;
-
-
- /* 13.8 */
-
- code_stmt : ty_mk_rec_aggr ';' ;
-
-
- /*----------------------------------------------------------------------*/
-
- /* The following rules define semantically qualified symbols under more
- /* general categories.
-
- ty_n_or_subty_n : expanded_n ;
- /* */
- /* An "expanded_n" is used for names that can be written using only*/
- /* selectors. */
-
- /* ... these have been replaced logically to reduce the number */
- /* of YACC_ nonterminal "rules" */
-
- /* The following rules expand the concatenated constructs and define the */
- /* specially added syntactical classes. */
-
-
- /* 2.1 */
-
- ..prag.. :
- /* empty */
- | ..prag.. prag ;
-
- .arg_ascs :
- /* empty */
- | '(' arg_ascs ')' ;
-
- arg_ascs :
- arg_asc
- | arg_ascs ',' arg_asc ;
-
- /* */
- /* "name" is included under "expr" */
-
-
- /* 3.1 */
-
- /* */
- /* "defer_const_d" is included under "object_d".*/
-
- ._ASN_expr. :
- /* empty */
- | ASSIGN_ expr ;
-
- ...ident.. :
- /* empty */
- | ...ident.. ',' identifier ;
-
- .constrt. :
- /* empty */
- | constrt ;
-
- /* */
- /* "idx_c" and "discr_c" are included under */
- /* the class "aggr". */
-
- expanded_n :
- identifier
- | expanded_n '.' identifier ;
-
- /* */
- /* This expansion generalizes "rng" so that it may include ty and */
- /* subty names. */
-
- ...enum_lit_spec.. :
- /* empty */
- | ...enum_lit_spec.. ','
- enum_lit_spec ;
-
- .rng_c. :
- /* empty */
- | rng_c ;
-
- ...idx_subty_def.. :
- /* empty */
- | ...idx_subty_def.. ',' idx_subty_def ;
-
- /* */
- /* To avoid conflicts, the more general class "name" is used. */
-
- ...dscr_rng.. :
- /* empty */
- | ...dscr_rng.. ',' dscr_rng ;
-
-
- /* A_ dscr subty ind given as a ty mk is included under rng*/
-
-
- ..cmpon_d.. :
- /* empty */
- | ..cmpon_d.. cmpon_d ..prag.. ;
-
- ...discr_spec.. :
- /* empty */
- | ...discr_spec.. ';' discr_spec ;
-
-
- /* Pragmas that can appear between two consecutive variants are picked */
- /* up in the cmpons part of the variants themselves. */
-
- ..variant.. :
- /* empty */
- | ..variant.. variant ;
-
- ..or_choice.. :
- /* empty */
- | ..or_choice.. '|' choice ;
-
- /* The "sim_expr" by itself may be a "dscr_rng" or a */
- /* "cmpon_sim_n". */
-
- /* A_ body is the only later_decl_item that is not also a */
- /* basic_decl_item. It is therefore used as the dividing */
- /* point between the two lists of decl items. */
-
- ..basic_decl_item.. :
- ..prag..
- | ..basic_decl_item.. basic_decl_item ..prag.. ;
-
- ..later_decl_item.. :
- ..prag..
- | ..later_decl_item.. later_decl_item ..prag.. ;
-
-
- /* 4.1 */
-
-
- /* "slice" is included under "idxed_cmpon". */
-
- /* The def of "name" includes "func_call". */
- /* A_ prmless func call is recognized as a sim name or a */
- /* selected cmpon. A_ func call with prms is recognized */
- /* as an idxed cmpon. */
-
-
- /* Reserved word attribute designators are included in the rules as a */
- /* convenience. Alternativly, since an attribute designator is always preced*/
- /* by an apostrophe, as noted in the RR_ 4.1.4, such usage may be detected */
- /* during lexical analysis thus obviating the need for special rules. */
- /* */
- /* The univ static expr of an attribute designator is reduced */
- /* as an "idxed_cmpon". */
-
- ...cmpon_asc.. :
- /* empty */
- | ...cmpon_asc.. ',' cmpon_asc ;
-
-
-
- /* Component ascs are generalized to include dscr rngs. */
- /* Thus, an "aggr" can be used for slices and idx and discr */
- /* constrts. */
-
- rel..AND__rel.. :
- rel AND_ rel
- | rel..AND__rel.. AND_ rel ;
-
- rel..OR__rel.. :
- rel OR_ rel
- | rel..OR__rel.. OR_ rel ;
-
- rel..XOR__rel.. :
- rel
- | ..XOR__rel.. ;
-
- ..XOR__rel.. :
- rel XOR_ rel
- | ..XOR__rel.. XOR_ rel ;
-
- rel..AND__THEN__rel.. :
- rel AND_ THEN_ rel
- | rel..AND__THEN__rel.. AND_ THEN_ rel ;
-
- rel..OR__ELSE__rel.. :
- rel OR_ ELSE_ rel
- | rel..OR__ELSE__rel.. OR_ ELSE_ rel ;
-
- .relal_op__sim_expr. :
- /* empty */
- | relal_op sim_expr ;
-
- sim_expr.NOT.IN__rng_or_sim_expr.NOT.IN__ty_mk :
- sim_expr .NOT. IN_ rng ;
-
- /* The "ty_mk" is included under "rng" */
-
- .NOT. :
- /* empty */
- | NOT_ ;
-
- .unary_add_op.term..binary_add_op__term.. :
- term
- | unary_add_op term
- | .unary_add_op.term..binary_add_op__term..
- binary_add_op term ;
-
- factor..mult_op__factor.. :
- factor
- | factor..mult_op__factor.. mult_op factor ;
-
- ._EXP___pri. :
- /* empty */
- | EXP_ pri ;
-
- /* "stringsit" is included under "name" as "op_symbol". */
- /* "func_call" is included under "name". */
- /* "ty_cnvr" is included under "name". */
-
-
- ty_mkaggr_or_ty_mkPexprP_ :
- prefix '\'' aggr ;
-
- /* The "prefix must be a "ty_mk". The "PexprP_" is an "aggr". */
-
-
- /* Here the "qualified_expr" can be given exactly */
-
-
- /* We use the fact that the constrt must be an idx or discr */
- /* constrt. */
-
-
- /* 5.1 */
-
-
- ..stmt.. :
- ..prag..
- | ..stmt.. stmt ..prag.. ;
-
-
- ..label.. :
- /* empty */
- | ..label.. label ;
-
-
-
- ..ELSIF__cond__THEN__seq_of_stmts.. :
- /* empty */
- | ..ELSIF__cond__THEN__seq_of_stmts..
- ELSIF_ cond THEN_
- seq_of_stmts ;
-
- .ELSE__seq_of_stmts. :
- /* empty */
- | ELSE_
- seq_of_stmts ;
-
- case_stmt_alt..case_stmt_alt.. :
- ..prag..
- case_stmt_alt
- ..case_stmt_alt.. ;
-
- ..case_stmt_alt.. :
- /* empty */
- | ..case_stmt_alt.. case_stmt_alt ;
-
- .sim_nC. :
- /* empty */
- | sim_n ':' ;
-
- .sim_n. :
- /* empty */
- | sim_n ;
-
- .iteration_scheme. :
- /* empty */
- | iteration_scheme ;
-
- .REVERSE. :
- /* empty */
- | REVERSE_ ;
-
- .DECLARE__decl_part. :
- /* empty */
- | DECLARE_
- decl_part ;
-
- .EXCEPTION__excptn_handler..excptn_handler... :
- /* empty */
- | EXCEPTION_
- ..prag.. excptn_handlers ;
-
- excptn_handlers :
- excptn_handler
- | excptn_handlers excptn_handler ;
-
- .expanded_n. :
- /* empty */
- | expanded_n ;
-
- .WHEN__cond. :
- /* empty */
- | WHEN_ cond ;
-
- .expr. :
- /* empty */
- | expr ;
-
-
- /* 6.1 */
-
- .fml_part. :
- /* empty */
- | fml_part ;
-
- .._.prm_spec.. :
- /* empty */
- | .._.prm_spec.. ';' prm_spec ;
-
- .IN. :
- /* empty */
- | IN_ ;
-
- .decl_part. : decl_part ;
-
- /* A_ "decl_part" may be empty. */
-
- .designator. :
- /* empty */
- | designator ;
-
-
- /* 7.1 */
-
- .PRIVATE..basic_decl_item... :
- /* empty */
- | PRIVATE_
- ..basic_decl_item.. ;
-
- .BEGIN__seq_of_stmts.EXCEPTION__excptn_handler..excptn_handler...
- :
- /* empty */
- | BEGIN_
- seq_of_stmts
- .EXCEPTION__excptn_handler..excptn_handler... ;
-
- .LIMITED. :
- /* empty */
- | LIMITED_ ;
-
- ...expanded_n.. :
- /* empty */
- | ...expanded_n.. ',' expanded_n ;
-
-
- /* 9.1 */
-
- .TYPE. :
- /* empty */
- | TYPE_ ;
-
- .IS..ent_d_..rep_cl_END.sim_n. :
- /* empty */
- | IS_
- ..ent_d..
- ..rep_cl..
- END_ .sim_n. ;
-
-
- ..ent_d.. :
- ..prag..
- | ..ent_d.. ent_d ..prag.. ;
-
- ..rep_cl.. :
- /* empty */
- | ..rep_cl.. rep_cl ..prag.. ;
-
-
- .Pent_idx_P..fml_part. :
- .fml_part.
- | '(' ent_idx ')' .fml_part. ;
-
- .DO__seq_of_stmts__END.sim_n.. :
- /* empty */
- | DO_
- seq_of_stmts
- END_ .sim_n. ;
-
- ..OR__select_alt.. :
- /* empty */
- | ..OR__select_alt.. OR_ select_alt ;
-
- .WHEN__condARROW.selec_wait_alt :
- selec_wait_alt
- | WHEN_ cond ARROW_ selec_wait_alt ;
-
- accept_stmt.seq_of_stmts. :
- ..prag.. accept_stmt .seq_of_stmts. ;
-
- delay_stmt.seq_of_stmts. :
- ..prag.. delay_stmt .seq_of_stmts. ;
-
- TERM_stmt : ..prag.. TERMINATE_ ';' ..prag.. ;
-
- .seq_of_stmts. :
- ..prag..
- | seq_of_stmts ;
-
- ...name.. :
- /* empty */
- | ...name.. ',' name ;
-
-
-
- /* 10.1 */
-
- ..compilation_unit.. :
- ..prag..
- | ..compilation_unit.. compilation_unit ..prag.. ;
-
- pkg_body_or_subprg_body : pkg_body ;
-
- /* "subprg_body" is already contained in the class "library_unit". */
-
- ..with_cl..use_cl.... :
- /* empty */
- | ..with_cl..use_cl.... with_cl use_cls ;
-
-
- use_cls :
- ..prag..
- | use_cls use_cl ..prag.. ;
-
- ...sim_n.. :
- /* empty */
- | ...sim_n.. ',' sim_n ;
-
-
-
- /* 11.1 */
-
- ..or_excptn_choice.. :
- /* empty */
- | ..or_excptn_choice.. '|' excptn_choice ;
-
-
-
- /* 12.1 */
-
- ..gen_prm_d.. :
- /* empty */
- | ..gen_prm_d.. gen_prm_d ;
-
- .IN.OUT.. :
- .IN.
- | IN_ OUT_ ;
-
- .IS_BOX_. :
- /* empty */
- | IS_ name
- | IS_ BOX_ ;
-
- PROCEDURE__ident__IS_ : subprg_spec IS_ ;
-
- /* To avoid conflicts, the more general "subprg_spec" is used. */
-
- .gen_act_part. :
- /* empty */
- | gen_act_part ;
-
- ...gen_asc.. :
- /* empty */
- | ...gen_asc.. ',' gen_asc ;
-
- .gen_fml_prmARROW.gen_act_prm :
- gen_act_prm
- | gen_fml_prm ARROW_ gen_act_prm ;
-
- expr_or_name_or_subprg_n_or_ent_n_or_ty_mk
- : expr ;
-
- /* The above alts are included under "expr". */
-
-
- /* 13.1 */
-
- FOR__ty_sim_n__USE_ :
- FOR_ sim_n USE_ ;
-
- /* The "sim_n" must be a "ty_sim_n". */
-
- .algt_cl. :
- ..prag..
- | ..prag.. algt_cl ..prag.. ;
-
- ..cmpon_cl.. :
- /* empty */
- | ..cmpon_cl.. cmpon_cl ..prag.. ;
-
- ty_mk_rec_aggr : qualified_expr ;
-
- /* The qualified expr must contain a rec aggr. */
-
- %%
-
- #include "lex.yy.c"
- #include "main.h"
-
-