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

📄 vhdl.y

📁 这个是一个词法和语法分析器的程序
💻 Y
📖 第 1 页 / 共 2 页
字号:
/************** Syntax for VHDL in YACC format ******************
 *
 * Version 0.2 Wed Aug 11, 1993
 * 
 * The original was a VHDL parser description to be used with GMD Compiler
 * Tool Box
 * written from:
 * Jan den Ouden, Jaap Hofstede
 * Department of Computer Science (INF/SPA)
 * University of Twente
 * PB 217, 7500 AE ENSCHEDE, The Netherlands
 * Tel: +31 53 893788
 * Email: hofstede@cs.utwente.nl
 
 * avail at: ftp.cs.utwente.nl in pub/src/VHDL/Grammar
 *
 * author of YACC transformation:
 * Thomas Dettmer
 * Dortmund University
 * Dept. of Computer Scienc, LS1
 * PB 500 500
 * D-44221 Dortmund (Germany)
 * Phone: +49-231-755-6464
 * e-mail: dettmer@ls1.informatik.uni-dortmund.de
 *
 * Please report discovered bugs, critics, suggestions
 * and changes you make to dettmer@ls1.informatik.uni-dortmund.de
 * 
 * at the end of this file there is a list of users, who discovered bugs,
 * and suggested solutions. additionally there's a list of known problems
 *
 ****************************************************************
 * 
 * This file is intended not to be used for commercial purposes
 * without permission of the University of Twente and permission
 * of the University of Dortmund
 *
 * NOTE THAT THERE IS NO WARRANTY FOR CORRECTNES, COMPLETENESS, SUPPORT
 * OR ANYTHING ELSE.
 *
 ****************************************************************
 *
 * Note that the context-free syntax of VHDL in [LRM] is ambiguous 
 * (and so is not LR(1)) and that the language VHDL makes it impossible to
 * construct a non-ambiguous context-free syntax. Therefore a deterministic
 * parser based on a non-ambiguous context-free syntax has to accept a too
 * large class of inputs. Inputs which are accepted by the parser but are not
 * correct VHDL must be rejected by static semantical checks.
*******************************************************/


%{
#include <stdio.h>


%}
%union{
  struct{
    int pos;
    int len;
    int line;
    char *name;
  } ds_Id;
}

%token
t_ACCESS
t_AFTER
t_ALIAS
t_ALL
t_AND
t_ARCHITECTURE
t_ARRAY
t_ASSERT
t_ATTRIBUTE
t_BEGIN
t_BLOCK
t_BODY
t_BUFFER
t_BUS
t_CASE
t_COMPONENT
t_CONFIGURATION
t_CONSTANT
t_DISCONNECT
t_DOWNTO
t_ELSE
t_ELSIF
t_END
t_ENTITY
t_EXIT
t_FILE
t_FOR
t_FUNCTION
t_GENERATE
t_GENERIC
t_GUARDED
t_IF
t_IN
t_INOUT
t_IS
t_LABEL
t_LIBRARY

t_LINKAGE
t_LOOP
t_MAP
t_NAND
t_NEW
t_NEXT
t_NOR
t_NULL
t_OF
t_ON
t_OPEN
t_OR
t_OTHERS
t_OUT
t_PACKAGE
t_PORT
t_PROCEDURE
t_PROCESS
t_RANGE
t_RECORD
t_REGISTER
t_REPORT
t_RETURN
t_SELECT
t_SEVERITY
t_SIGNAL
t_SUBTYPE
t_THEN
t_TO
t_TRANSPORT
t_TYPE
t_UNITS
t_UNTIL
t_USE
t_VARIABLE
t_WAIT
t_WHEN
t_WHILE
t_WITH
t_XOR

/* VHDL binary operators
  ======================= */

%nonassoc t_EQSym t_NESym t_LTSym t_LESym t_GTSym t_GESym
%left t_Plus t_Minus t_Ampersand
%left MED_PRECEDENCE
%left t_Star t_Slash t_MOD t_REM
%nonassoc t_DoubleStar t_ABS t_NOT MAX_PRECEDENCE

/* misc syms */
/*t_Space */
%token t_Apostrophe
t_LeftParen
t_RightParen
t_Comma
t_VarAsgn
t_Colon
t_Semicolon



t_Arrow
t_Box
t_Bar
t_Dot

%token  < ds_Id > t_Identifier
t_AbstractLit
t_CharacterLit

t_StringLit
t_BitStringLit


%%
start: design_file
;design_file     : design_unit_list
;design_unit_list: design_unit
 | design_unit_list design_unit  

;designator : t_Identifier	
 | t_StringLit  

;literal    : t_AbstractLit  
 | t_CharacterLit  
 | t_BitStringLit
 | physical_literal_no_default  
 | t_NULL  


;enumeration_literal  : t_CharacterLit
 | t_Identifier  

;physical_literal     : physical_literal_1 t_Identifier  
;physical_literal_1   :  
 | t_AbstractLit  
;physical_literal_no_default    : t_AbstractLit t_Identifier  

;idf_list : t_Identifier 
 | idf_list t_Comma t_Identifier 


/*------------------------------------------
--  Desing Unit
--------------------------------------------*/

;design_unit     : context_list lib_unit  
;context_list    :  
 | context_list context_item  

;lib_unit    : entity_decl  
 | config_decl  
 | package_decl  
 | arch_body  
 | package_body  

;context_item    : lib_clause  
 | use_clause  

;lib_clause  : t_LIBRARY idf_list t_Semicolon  

;use_clause : t_USE sel_list t_Semicolon  

;sel_list : sel_name		
 | sel_list t_Comma sel_name	

/*------------------------------------------
--  Library Units
--------------------------------------------*/

;entity_decl : entity_start entity_decl_1 entity_decl_2
entity_decl_3 entity_decl_4 t_END entity_decl_5 t_Semicolon 
;entity_start: t_ENTITY t_Identifier t_IS	
;entity_decl_5 :  
 | t_Identifier	
;entity_decl_4 :  
 | t_BEGIN concurrent_stats  
;entity_decl_3 :  
 | entity_decl_3 entity_decl_6  
;entity_decl_6 : entity_decltve_item  
;entity_decl_2 :
 | t_PORT interf_list t_Semicolon  
;entity_decl_1 :  
 | t_GENERIC interf_list t_Semicolon  

;arch_body : arch_start arch_body_1 t_BEGIN concurrent_stats t_END
arch_body_2 t_Semicolon 
;arch_start : t_ARCHITECTURE t_Identifier t_OF t_Identifier t_IS 
;arch_body_2  :  
;arch_body_2  : t_Identifier  
;arch_body_1  :  
;arch_body_1  : arch_body_1 arch_body_3  
;arch_body_3  : block_decltve_item  

;config_decl : config_start config_decl_1 block_config t_END config_decl_2 t_Semicolon
 /* ;config_start : t_CONFIGURATION t_Identifier t_OF mark t_IS 
    replaced: */
;config_start : t_CONFIGURATION t_Identifier t_OF t_Identifier t_IS 
;config_decl_2    :  
;config_decl_2    : t_Identifier  
;config_decl_1    :  
;config_decl_1    : config_decl_1 config_decl_3  
;config_decl_3    : config_decltve_item  

;package_decl  : package_start package_decl_1 t_END package_decl_2 t_Semicolon  
;package_start : t_PACKAGE t_Identifier t_IS 
;package_decl_2     :  
;package_decl_2     : t_Identifier  
;package_decl_1     :  
;package_decl_1     : package_decl_1 package_decl_3  
;package_decl_3     : package_decltve_item  

;package_body    : pack_body_start package_body_1 t_END package_body_2 t_Semicolon  
;pack_body_start : t_PACKAGE t_BODY t_Identifier t_IS 
;package_body_2  :  
;package_body_2  : t_Identifier  
;package_body_1  :  
;package_body_1  : package_body_1 package_body_3  
;package_body_3  : package_body_decltve_item  

/*------------------------------------------
--  Declarative Item
--------------------------------------------*/
;common_decltve_item   : type_decl  
;common_decltve_item   : subtype_decl  
;common_decltve_item   : constant_decl  
;common_decltve_item   : file_decl  
;common_decltve_item   : alias_decl  
;common_decltve_item   : subprog_decl  
;common_decltve_item   : use_clause  

;entity_decltve_item   : common_decltve_item  
;entity_decltve_item   : subprog_body  
;entity_decltve_item   : attribute_decl  
;entity_decltve_item   : attribute_spec  
;entity_decltve_item   : disconnection_spec  
;entity_decltve_item   : signal_decl  

;block_decltve_item    : common_decltve_item  
;block_decltve_item    : subprog_body  
;block_decltve_item    : comp_decl  
;block_decltve_item    : attribute_decl  
;block_decltve_item    : attribute_spec  
;block_decltve_item    : config_spec  
;block_decltve_item    : disconnection_spec  
;block_decltve_item    : signal_decl  

;package_decltve_item  : common_decltve_item  
;package_decltve_item  : comp_decl  
;package_decltve_item  : attribute_decl  
;package_decltve_item  : attribute_spec  
;package_decltve_item  : disconnection_spec  
;package_decltve_item  : signal_decl  

;package_body_decltve_item  : common_decltve_item  
;package_body_decltve_item  : subprog_body  

;subprog_decltve_item    : common_decltve_item  
;subprog_decltve_item    : subprog_body  
;subprog_decltve_item    : attribute_decl  
;subprog_decltve_item    : attribute_spec  
;subprog_decltve_item    : variable_decl  

;procs_decltve_item  : common_decltve_item  
;procs_decltve_item  : subprog_body  
;procs_decltve_item  : attribute_decl  
;procs_decltve_item  : attribute_spec  
;procs_decltve_item  : variable_decl  

;config_decltve_item : attribute_spec  
;config_decltve_item : use_clause  
/*------------------------------------------
--  Subprograms
--------------------------------------------*/

;subprog_decl    : subprog_spec t_Semicolon  

;subprog_spec  : t_PROCEDURE t_Identifier subprog_spec_1  
;subprog_spec  : t_FUNCTION designator subprog_spec_2 t_RETURN mark  
;subprog_spec_2     :  
;subprog_spec_2     : interf_list  
;subprog_spec_1     :  
;subprog_spec_1     : interf_list  

;subprog_body : subprog_spec t_IS subprog_body_1 t_BEGIN seq_stats t_END subprog_body_2 t_Semicolon  
;subprog_body_2    :  
;subprog_body_2    : designator  
;subprog_body_1    :  
;subprog_body_1    : subprog_body_1 subprog_body_3  
;subprog_body_3    : subprog_decltve_item  

/*--------------------------------------------------
--  Interface Lists and Associaton Lists
----------------------------------------------------*/

;interf_list  : t_LeftParen interf_element interf_list_1 t_RightParen  
;interf_list_1     :  
;interf_list_1     : interf_list_1 interf_list_2  
;interf_list_2     : t_Semicolon interf_element  

;interf_element    : interf_element_1 idf_list t_Colon interf_element_2 subtype_indic interf_element_3 interf_element_4  
;interf_element_4  :  
;interf_element_4  : t_VarAsgn expr  
;interf_element_3  :  
;interf_element_3  : t_BUFFER
;interf_element_2  :  
;interf_element_2  : mode  
;interf_element_1  :  
;interf_element_1  : object_class  

;mode  : t_IN  
;mode  : t_OUT 
;mode  : t_INOUT  
;mode  : t_BUFFER  
;mode  : t_LINKAGE  

;association_list     : t_LeftParen association_element association_list_1 t_RightParen  
;association_list_1   :  
;association_list_1   : association_list_1 association_list_2  
;association_list_2   : t_Comma association_element  


;gen_association_list : t_LeftParen gen_association_element gen_association_list_1 t_RightParen  
;gen_association_list_1    :  
;gen_association_list_1    : gen_association_list_1 gen_association_list_2  
;gen_association_list_2    : t_Comma gen_association_element  

;association_element  : formal_part t_Arrow actual_part  
;association_element  : actual_part  

/* changed ;gen_association_element   : association_element  */
;gen_association_element   : expr
;gen_association_element   : discrete_range1  

;formal_part     : name  

;actual_part     : expr  
;actual_part     : t_OPEN  

/*--------------------------------------------------
--  Names and Expressions
----------------------------------------------------*/

;mark  : t_Identifier	
;mark  : sel_name  

;expr : and_relation  
;expr : or_relation  
;expr : xor_relation  
;expr : relation  
;expr : relation t_NAND relation  
;expr : relation t_NOR relation  

;and_relation    : relation t_AND relation  
;and_relation    : and_relation t_AND relation  

;or_relation     : relation t_OR relation  
;or_relation     : or_relation t_OR relation  

;xor_relation    : relation t_XOR relation  
;xor_relation    : xor_relation t_XOR relation  

/* ;relation   : unary_operator primary   */
;relation   : primary  
;relation   : t_Plus primary  %prec MED_PRECEDENCE
;relation   : t_Minus primary %prec MED_PRECEDENCE
;relation   : t_ABS primary   
;relation   : t_NOT primary   
;relation   : primary t_DoubleStar primary
/* ;    relation : relation binary_operator primary */
;relation   : relation t_MOD relation
;relation   : relation t_REM relation
;relation   : relation t_Ampersand relation
;relation   : relation t_Star relation
;relation   : relation t_Plus relation
;relation   : relation t_Minus relation
;relation   : relation t_LESym relation
;relation   : relation t_GESym relation
;relation   : relation t_LTSym relation
;relation   : relation t_GTSym relation
;relation   : relation t_EQSym relation
;relation   : relation t_NESym relation
;relation   : relation t_Slash relation


;primary    : name  
;primary    : literal  
;primary    : aggregate  
;primary    : qualified_expr  
;primary    : allocator  
;primary    : t_LeftParen expr t_RightParen  

;name  : mark  
;name  : name2  

;name2 : t_StringLit
;name2 : attribute_name  
;name2 : ifts_name  

;sel_name   : name t_Dot suffix  

;suffix     : designator  
;suffix     : t_CharacterLit
;suffix     : t_ALL  

;ifts_name  : mark gen_association_list  
;ifts_name  : name2 gen_association_list  

;attribute_name  : mark t_Apostrophe t_Identifier  
;attribute_name  : name2 t_Apostrophe t_Identifier  
;attribute_name : mark t_Apostrophe t_RANGE
;attribute_name : name2 t_Apostrophe t_RANGE

;aggregate  : element_association_list2 t_RightParen  
;aggregate  : t_LeftParen choices t_Arrow expr t_RightParen  

;element_association_list2 : t_LeftParen element_association t_Comma element_association  
;element_association_list2 : element_association_list2 t_Comma element_association  

;qualified_expr : mark t_Apostrophe t_LeftParen expr t_RightParen  
;qualified_expr : mark t_Apostrophe aggregate  


;allocator  : t_NEW mark mark allocator_1  
;allocator  : t_NEW mark allocator_2  
;allocator  : t_NEW qualified_expr  
;allocator_2     :  
;allocator_2     : gen_association_list  
;allocator_1     :  
;allocator_1     : gen_association_list  


/*--------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -