电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

语法分析器yacc试验报告

语法分析器yacc试验报告_第1页
1/9
语法分析器yacc试验报告_第2页
2/9
语法分析器yacc试验报告_第3页
3/9
大学学 院实验报告学号:姓名:专业:班级:第周课程名称编译原理课程设计实验课时实验项目基于 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_declaration { $$ = $1; };%%表示产生式左边, $n 表示产生式右边第n 个字符的返回值,这条规则表示 var_declaration或 fun_declaration识别出后,将其赋值给 declaration。Auxiliary部分包括 rules部分使用的一些辅助函数,同时,main 函数也在其中定义。 YACC中会自动调用 yylex() 获取 token ,默认 yylex() 返回 int ,代表识别出的 token ,如果文件结束返回0。因此一般会进行如下定义:static Type yylex(void){ return getToken(); }Type 就是 int ,专门代表 token 值。Auxiliary部分还可以定义 YACC的出错处理函数,yyerror(char *s) ,其中 s 是 YACC在遇到错误时产生的错误信息。YACC的入口函数为: yyparse() ,调用这个函数即开始语法分析过程。2 数据结构我们需要再 YACC中构造 Parse Tree, 必须定义树结点,...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

语法分析器yacc试验报告

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部