大学学 院实验报告学号:姓名:专业:班级:第周课程名称编译原理课程设计实验课时实验项目基于 YACC的语法分析器实验时间实验目的1.学习基于 YACC的语法分析器的构造方法
2.学习 C-的语法结构
实验环境Parser GeneratorVC++ 实 验 内 容(算法、程序、步骤和方法)基于 YACC构造词法分析器的方法1 YACC文件格式Lex 文件分成三个部分,分别为definitions、rules 以及auxiliary routines,中间用 %%分割开
Definitions包括要加入到生成的C程序的头部的代码, 包括#include语句、#define 语句及一些全局变量的定义
token 也在Definitions部分定义,YACC规定,必须自己定义 token ,他将 token定义为一系列从 258 开始的正整数,如在Definition部分加入了如下定义:%token NUMBER, 则在生成的 C代码中:#define NUMBER 258
当然这个值也可以由用户定义
Definitions中同时还定义了YACC中的返回值类型,由于rules 部分是由固定符号来代替一个Symbol 的返回值,其默认类型为 int ,如果用户希望返回其他类型的值 (如 ParseTree 树结点),则可以在 Definition中定义 Symbol的返回值
首先使用一个%union{⋯} 包含所有需要的返回值类型,定义%type { ⋯} 其中包含所有返回值为t 的 Symbol
Definitions中可以定义语法的结合性来消除二义性,包括两个符号 %left 表示左结合和 %right 表示右结合
rules 部分定义所有语法,以及语法识别出后执行的操作
例如:declaration : var_declaration { $$ = $1; }| fun_de