⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vhdl.y

📁 这个是一个词法和语法分析器的程序
💻 Y
📖 第 1 页 / 共 2 页
字号:
--  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 + -