%token <str> INT VOID CONST IF ELSE WHILE BREAK CONTINUE RETURN ID OCTAL_CONST HEX_CONST DEC_CONST %right <str> ASSIGN %left <str> OR %left <str> AND %left <str> EQNEQ %left <str> CMP %left <str> ADDSUB %left <str> MULDIVSUR %type<node> Number CompUnit Decl FuncDef ConstDecl VarDecl ConstDef ConstDefBlock ConstExpBlock ConstInitVal ConstExp ConstInitFlag ConstValBlock VarDef VarDefFlag InitVal Exp InitValFlag InitValBlock FuncFParams Block FuncFParam FuncFParamBlock ExpBlockFlag ExpBlock BlockItemBlock BlockItem Stmt LVal ExpFlag StmtFlag Cond AddExp LOrExp PrimaryExp UnaryExp FuncFParamsFlag FuncRParams UNARYOP CommaExpBlock MulExp RelExp EqExp LAndExp
时间: 2024-03-29 13:39:18 浏览: 110
这是一个语法定义文件,用于描述编程语言的语法结构。具体来说:
- %token:用于定义词法单元(token),例如 INT、VOID、ID 等。
- %type:用于定义语法规则的返回值类型,例如 Number、CompUnit、Decl、FuncDef 等。
- %left 和 %right:用于定义运算符的结合性和优先级。
- Number:用于描述数字。
- CompUnit:用于描述编译单元,包括一组声明和定义。
- Decl:用于描述声明,包括常量声明和变量声明。
- FuncDef:用于描述函数定义。
- ConstDecl:用于描述常量声明。
- VarDecl:用于描述变量声明。
- ConstDef:用于描述常量定义。
- ConstDefBlock:用于描述常量定义块。
- ConstExpBlock:用于描述常量表达式块。
- ConstInitVal:用于描述常量初始化值。
- ConstExp:用于描述常量表达式。
- ConstInitFlag:用于标记是否有常量初始化。
- ConstValBlock:用于描述常量值块。
- VarDef:用于描述变量定义。
- VarDefFlag:用于标记是否有变量定义。
- InitVal:用于描述初始化值。
- Exp:用于描述表达式。
- InitValFlag:用于标记是否有初始化值。
- InitValBlock:用于描述初始化值块。
- FuncFParams:用于描述函数形参。
- Block:用于描述代码块。
- FuncFParam:用于描述函数形参。
- FuncFParamBlock:用于描述函数形参块。
- ExpBlockFlag:用于标记是否有表达式块。
- ExpBlock:用于描述表达式块。
- BlockItemBlock:用于描述代码块条目块。
- BlockItem:用于描述代码块条目。
- Stmt:用于描述语句。
- LVal:用于描述左值。
- ExpFlag:用于标记是否有表达式。
- StmtFlag:用于标记是否有语句。
- Cond:用于描述条件表达式。
- AddExp:用于描述加法表达式。
- LOrExp:用于描述逻辑或表达式。
- PrimaryExp:用于描述基本表达式。
- UnaryExp:用于描述一元表达式。
- FuncRParams:用于描述函数实参。
- UNARYOP:用于描述一元运算符。
- CommaExpBlock:用于描述逗号表达式块。
- MulExp:用于描述乘法表达式。
- RelExp:用于描述关系表达式。
- EqExp:用于描述相等表达式。
- LAndExp:用于描述逻辑与表达式。
这样的语法定义文件可以被编译器使用,用于从词法单元中识别出语法结构,进而生成相应的中间代码和目标代码。
阅读全文