📄 vhdl.y
字号:
-- Element Association and Choices
----------------------------------------------------*/
;element_association : choices t_Arrow expr
;element_association : expr
;choices : choice choices_1
;choices_1 :
;choices_1 : choices_1 choices_2
;choices_2 : t_Bar choice
;choice : expr
;choice : discrete_range1
;choice : t_OTHERS
/*--------------------------------------------------
-- Type Declarations
----------------------------------------------------*/
;type_decl : t_TYPE t_Identifier type_decl_1 t_Semicolon
;type_decl_1 :
;type_decl_1 : t_IS type_definition
;type_definition : enumeration_type_definition
;type_definition : range_constraint
;type_definition : physical_type_definition
;type_definition : unconstrained_array_definition
;type_definition : constrained_array_definition
;type_definition : record_type_definition
;type_definition : access_type_definition
;type_definition : file_type_definition
;enumeration_type_definition : t_LeftParen enumeration_literal enumeration_type_definition_1 t_RightParen
;enumeration_type_definition_1 :
;enumeration_type_definition_1 : enumeration_type_definition_1 enumeration_type_definition_2
;enumeration_type_definition_2 : t_Comma enumeration_literal
;physical_type_definition : range_constraint t_UNITS base_unit_decl
physical_type_definition_1 t_END t_UNITS
;physical_type_definition_1 :
;physical_type_definition_1 : physical_type_definition_1 physical_type_definition_2
;physical_type_definition_2 : secondary_unit_decl
;base_unit_decl : t_Identifier t_Semicolon
;secondary_unit_decl : t_Identifier t_EQSym physical_literal t_Semicolon
;unconstrained_array_definition : t_ARRAY t_LeftParen
index_subtype_definition unconstrained_array_definition_1 t_RightParen t_OF
subtype_indic
;unconstrained_array_definition_1 :
;unconstrained_array_definition_1 : unconstrained_array_definition_1 unconstrained_array_definition_2
;unconstrained_array_definition_2 : t_Comma index_subtype_definition
;index_subtype_definition : mark t_RANGE t_Box
;constrained_array_definition : t_ARRAY index_constraint t_OF subtype_indic
;record_type_definition : t_RECORD element_decl record_type_definition_1 t_END
t_RECORD
;record_type_definition_1 :
;record_type_definition_1 : record_type_definition_1 record_type_definition_2
;record_type_definition_2 : element_decl
;element_decl : idf_list t_Colon subtype_indic t_Semicolon
;access_type_definition : t_ACCESS subtype_indic
;file_type_definition : t_FILE t_OF mark
/*--------------------------------------------------
-- Subtypes and Constraints
----------------------------------------------------*/
;subtype_decl : t_SUBTYPE t_Identifier t_IS subtype_indic t_Semicolon
;subtype_indic : mark subtype_indic_1
;subtype_indic : subtype_indic1
;subtype_indic_1 :
;subtype_indic_1 : gen_association_list
;subtype_indic1 : mark mark range_constraint
;subtype_indic1 : mark range_constraint
;subtype_indic1 : mark mark subtype_indic1_1
;subtype_indic1_1 :
;subtype_indic1_1 : gen_association_list
;range_constraint : t_RANGE range_spec
;index_constraint : t_LeftParen discrete_range index_constraint_1 t_RightParen
;index_constraint_1 :
;index_constraint_1 : index_constraint_1 index_constraint_2
;index_constraint_2 : t_Comma discrete_range
;discrete_range : subtype_indic
;discrete_range : range_spec
;discrete_range1 : subtype_indic1
;discrete_range1 : expr direction expr
;range_spec : attribute_name
;range_spec : expr direction expr
;direction : t_TO
;direction : t_DOWNTO
/*--------------------------------------------------
-- Objects, Aliases, Files, Disconnections
----------------------------------------------------*/
;constant_decl : t_CONSTANT idf_list t_Colon subtype_indic constant_decl_1 t_Semicolon
;constant_decl_1 :
;constant_decl_1 : t_VarAsgn expr
;signal_decl : t_SIGNAL idf_list t_Colon subtype_indic signal_decl_1 signal_decl_2 t_Semicolon
;signal_decl_2 :
;signal_decl_2 : t_VarAsgn expr
;signal_decl_1 :
;signal_decl_1 : signal_kind
;variable_decl : t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
;variable_decl_1 :
;variable_decl_1 : t_VarAsgn expr
;object_class : t_CONSTANT
;object_class : t_SIGNAL
;object_class : t_VARIABLE
;signal_kind : t_BUS
;signal_kind : t_REGISTER
;alias_decl : t_ALIAS t_Identifier t_Colon subtype_indic t_IS name t_Semicolon
;file_decl : t_FILE t_Identifier t_Colon subtype_indic t_IS file_decl_1 expr t_Semicolon
;file_decl_1 :
;file_decl_1 : mode
;disconnection_spec : t_DISCONNECT signal_list t_Colon mark t_AFTER expr t_Semicolon
;signal_list : name signal_list_1
;signal_list : t_OTHERS
;signal_list : t_ALL
;signal_list_1 :
;signal_list_1 : signal_list_1 signal_list_2
;signal_list_2 : t_Comma name
/*--------------------------------------------------
-- Attribute Declarations and Specifications
----------------------------------------------------*/
;attribute_decl : t_ATTRIBUTE t_Identifier t_Colon mark t_Semicolon
;attribute_spec : t_ATTRIBUTE t_Identifier t_OF entity_spec t_IS expr t_Semicolon
;entity_spec : entity_name_list t_Colon entity_class
;entity_name_list : designator entity_name_list_1
;entity_name_list : t_OTHERS
;entity_name_list : t_ALL
;entity_name_list_1 :
;entity_name_list_1 : entity_name_list_1 entity_name_list_2
;entity_name_list_2 : t_Comma designator
;entity_class : t_ENTITY
;entity_class : t_ARCHITECTURE
;entity_class : t_PACKAGE
;entity_class : t_CONFIGURATION
;entity_class : t_COMPONENT
;entity_class : t_LABEL
;entity_class : t_TYPE
;entity_class : t_SUBTYPE
;entity_class : t_PROCEDURE
;entity_class : t_FUNCTION
;entity_class : t_SIGNAL
;entity_class : t_VARIABLE
;entity_class : t_CONSTANT
/*--------------------------------------------------
-- Schemes
----------------------------------------------------*/
;generation_scheme : if_scheme
;generation_scheme : for_scheme
;iteration_scheme : for_scheme
;iteration_scheme : while_scheme
;if_scheme : t_IF expr
;for_scheme : t_FOR t_Identifier t_IN discrete_range
;while_scheme : t_WHILE expr
/*--------------------------------------------------
-- Concurrent Statements
----------------------------------------------------*/
;concurrent_stats : concurrent_stats_1
;concurrent_stats_1 :
;concurrent_stats_1 : concurrent_stats_1 concurrent_stats_2
;concurrent_stats_2 : concurrent_stat
;concurrent_stat : block_stat
| concurrent_assertion_stat
| concurrent_procedure_call
| concurrent_signal_assign_stat
| comp_inst_stat
| generate_stat
| procs_stat
;block_stat : t_Identifier t_Colon t_BLOCK block_stat_1 block_stat_2
block_stat_3 block_stat_4 t_BEGIN concurrent_stats t_END t_BLOCK block_stat_5
t_Semicolon
;block_stat_5 :
;block_stat_5 : t_Identifier
;block_stat_4 :
;block_stat_4 : block_stat_4 block_stat_6
;block_stat_6 : block_decltve_item
;block_stat_3 :
;block_stat_3 : t_PORT interf_list t_Semicolon block_stat_7
;block_stat_7 :
;block_stat_7 : t_PORT t_MAP association_list t_Semicolon
;block_stat_2 :
;block_stat_2 : t_GENERIC interf_list t_Semicolon block_stat_8
;block_stat_8 :
;block_stat_8 : t_GENERIC t_MAP association_list t_Semicolon
;block_stat_1 :
;block_stat_1 : t_LeftParen expr t_RightParen
;comp_inst_stat : t_Identifier t_Colon mark t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
;comp_inst_stat : t_Identifier t_Colon mark t_PORT t_MAP association_list t_Semicolon
;comp_inst_stat_1 :
;comp_inst_stat_1 : t_PORT t_MAP association_list
;concurrent_assertion_stat : t_Identifier t_Colon assertion_stat
;concurrent_assertion_stat : assertion_stat
;concurrent_procedure_call : t_Identifier t_Colon procedure_call_stat
;concurrent_procedure_call : procedure_call_stat
;concurrent_signal_assign_stat : t_Identifier t_Colon condal_signal_assign
;concurrent_signal_assign_stat : condal_signal_assign
;concurrent_signal_assign_stat : t_Identifier t_Colon sel_signal_assign
;concurrent_signal_assign_stat : sel_signal_assign
;condal_signal_assign : target t_LESym opts condal_wavefrms t_Semicolon
;condal_wavefrms : condal_wavefrms_1 wavefrm
;condal_wavefrms_1 :
;condal_wavefrms_1 : condal_wavefrms_1 condal_wavefrms_2
;condal_wavefrms_2 : wavefrm t_WHEN expr t_ELSE
;wavefrm : wavefrm_element wavefrm_1
;wavefrm_1 :
;wavefrm_1 : wavefrm_1 wavefrm_2
;wavefrm_2 : t_Comma wavefrm_element
;wavefrm_element : expr wavefrm_element_1
;wavefrm_element_1 :
;wavefrm_element_1 : t_AFTER expr
;target : name
;target : aggregate
;opts : opts_1 opts_2
;opts_2 :
;opts_2 : t_TRANSPORT
;opts_1 :
;opts_1 : t_GUARDED
;sel_signal_assign : t_WITH expr t_SELECT target t_LESym opts sel_wavefrms t_Semicolon
;sel_wavefrms : sel_wavefrms_1 wavefrm t_WHEN choices
;sel_wavefrms_1 :
;sel_wavefrms_1 : sel_wavefrms_1 sel_wavefrms_2
;sel_wavefrms_2 : wavefrm t_WHEN choices t_Comma
;generate_stat : t_Identifier t_Colon generation_scheme t_GENERATE
concurrent_stats t_END t_GENERATE generate_stat_1 t_Semicolon
;generate_stat_1 :
;generate_stat_1 : t_Identifier
;procs_stat : t_Identifier t_Colon procs_stat1
;procs_stat : procs_stat1
;procs_stat1 : t_PROCESS procs_stat1_1 procs_stat1_2 t_BEGIN seq_stats t_END
t_PROCESS procs_stat1_3 t_Semicolon
;procs_stat1_3 :
;procs_stat1_3 : t_Identifier
;procs_stat1_2 :
;procs_stat1_2 : procs_stat1_2 procs_stat1_4
;procs_stat1_4 : procs_decltve_item
;procs_stat1_1 :
;procs_stat1_1 : t_LeftParen sensitivity_list t_RightParen
;sensitivity_list : name sensitivity_list_1
;sensitivity_list_1 :
;sensitivity_list_1 : sensitivity_list_1 sensitivity_list_2
;sensitivity_list_2 : t_Comma name
/*--------------------------------------------------
-- Sequential Statements
----------------------------------------------------*/
;seq_stats : seq_stats_1
;seq_stats_1 :
;seq_stats_1 : seq_stats_1 seq_stats_2
;seq_stats_2 : seq_stat
;seq_stat : assertion_stat
;seq_stat : case_stat
;seq_stat : exit_stat
;seq_stat : if_stat
;seq_stat : loop_stat
;seq_stat : next_stat
;seq_stat : null_stat
;seq_stat : procedure_call_stat
;seq_stat : return_stat
;seq_stat : signal_assign_stat
;seq_stat : variable_assign_stat
;seq_stat : wait_stat
;assertion_stat : t_ASSERT expr assertion_stat_1 assertion_stat_2 t_Semicolon
;assertion_stat_2 :
;assertion_stat_2 : t_SEVERITY expr
;assertion_stat_1 :
;assertion_stat_1 : t_REPORT expr
;case_stat : t_CASE expr t_IS case_stat_alternative case_stat_1 t_END t_CASE t_Semicolon
;case_stat_1 :
;case_stat_1 : case_stat_1 case_stat_2
;case_stat_2 : case_stat_alternative
;case_stat_alternative : t_WHEN choices t_Arrow seq_stats
;exit_stat : t_EXIT exit_stat_1 exit_stat_2 t_Semicolon
;exit_stat_2 :
;exit_stat_2 : t_WHEN expr
;exit_stat_1 :
;exit_stat_1 : t_Identifier
;if_stat : t_IF expr t_THEN seq_stats if_stat_1 if_stat_2 t_END t_IF t_Semicolon
;if_stat_2 :
;if_stat_2 : t_ELSE seq_stats
;if_stat_1 :
;if_stat_1 : if_stat_1 if_stat_3
;if_stat_3 : t_ELSIF expr t_THEN seq_stats
;loop_stat : loop_stat_1 loop_stat_2 t_LOOP seq_stats t_END t_LOOP loop_stat_3 t_Semicolon
;loop_stat_3 :
;loop_stat_3 : t_Identifier
;loop_stat_2 :
;loop_stat_2 : iteration_scheme
;loop_stat_1 :
;loop_stat_1 : t_Identifier t_Colon
;next_stat : t_NEXT next_stat_1 next_stat_2 t_Semicolon
;next_stat_2 :
;next_stat_2 : t_WHEN expr
;next_stat_1 :
;next_stat_1 : t_Identifier
;null_stat : t_NULL t_Semicolon
;procedure_call_stat : name t_Semicolon
;return_stat : t_RETURN return_stat_1 t_Semicolon
;return_stat_1 :
;return_stat_1 : expr
;signal_assign_stat : target t_LESym signal_assign_stat_1 wavefrm t_Semicolon
;signal_assign_stat_1 :
;signal_assign_stat_1 : t_TRANSPORT
;variable_assign_stat : target t_VarAsgn expr t_Semicolon
;wait_stat : t_WAIT wait_stat_1 wait_stat_2 wait_stat_3 t_Semicolon
;wait_stat_3 :
;wait_stat_3 : t_FOR expr
;wait_stat_2 :
;wait_stat_2 : t_UNTIL expr
;wait_stat_1 :
;wait_stat_1 : t_ON sensitivity_list
/*--------------------------------------------------
-- Components and Configurations
----------------------------------------------------*/
;comp_decl : t_COMPONENT t_Identifier comp_decl_1 comp_decl_2 t_END t_COMPONENT t_Semicolon
;comp_decl_2 :
;comp_decl_2 : t_PORT interf_list t_Semicolon
;comp_decl_1 :
;comp_decl_1 : t_GENERIC interf_list t_Semicolon
;block_config : t_FOR block_spec block_config_1 block_config_2 t_END t_FOR t_Semicolon
;block_config_2 :
;block_config_2 : block_config_2 block_config_3
;block_config_3 : config_item
;block_config_1 :
;block_config_1 : block_config_1 block_config_4
;block_config_4 : use_clause
;block_spec : name
;config_item : block_config
;config_item : comp_config
;comp_config : t_FOR comp_spec comp_config_1 comp_config_2 t_END t_FOR t_Semicolon
;comp_config_2 :
;comp_config_2 : block_config
;comp_config_1 :
;comp_config_1 : t_USE binding_indic t_Semicolon
;config_spec : t_FOR comp_spec t_USE
binding_indic t_Semicolon
;comp_spec : inst_list t_Colon mark
;inst_list : idf_list
;inst_list : t_ALL
;inst_list : t_OTHERS
;binding_indic : entity_aspect binding_indic_1 binding_indic_2
;binding_indic_2 :
;binding_indic_2 : t_PORT t_MAP association_list
;binding_indic_1 :
;binding_indic_1 : t_GENERIC t_MAP association_list
;entity_aspect : t_ENTITY name
;entity_aspect : t_CONFIGURATION mark
;entity_aspect : t_OPEN
;
%%
extern FILE* yyout;
extern int yydebug;
extern FILE *yyin, *yyout;
extern int MVL_LINNUM;
main(argc, argv)
int argc;
char** argv;
{
char* infilename;
/* missing parameter check */
/* yydebug=1; */
/* open files */
/* input file */
if (argc>1){
infilename=(char*)malloc(sizeof(char)*strlen(argv[1])+1);
strcpy(infilename, argv[1]);
if ((yyin=fopen(argv[1],"r"))==NULL){
yyerror("unable to open inputfile");
}
argc--;
argv++;
}else{
infilename=" ";
}
/* output file */
if (argc>1){
if ((yyout=fopen(argv[1],"w"))==NULL){
yyerror("could not open outputfile\n");
}
}
yyparse();
exit(0);
}
void yyerror(str)
char* str;
{
fprintf( yyout, "ERROR: %s\n", str );
}
/************************************************************
* RESOLVED BUGS
* J.Gaisler reported:
* Range attributes in FOR loops are not supported
* Unary minus not supported in second argument to relational exp.
* Thorsten Groetker
* precedence and associtivity of operators
* (formal=>actual) was permitted in gen_associatin_list
* and thus in subtype_indic e.g.
*************************************************************
* OTHER KNOWN PROBLEMS:
* the grammar allows expressions: 3*-5 thats pretty nice but illegal
* in VHDL - only 3*(-5) is permitted from LRM.
*************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -