实验3LR语法分析.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验3LR语法分析精要

Zhou, Erqiang 编译技术实验(3) LR 语法分析 周尔强 2015年10月 实验报告提交 Zhou, Erqiang * School of Information and Software Engineering 实验上传网址 用户名:身份证后6位 + 学号后6位 中间没有 + 上传后一定确认无误后再提交 一旦提交,便无法更新 1:8880/experiment/Login/login.xhtml 关于Bison/Yacc Yacc (Yet Another Compiler Compiler) Yacc是生成语法分析器的工具 Bison 是 GNU 版本的 Yacc Bison会自动生成一个语法分析器 Zhou, Erqiang * School of Information and Software Engineering 关于Bison/Yacc Zhou, Erqiang * School of Information and Software Engineering a = b + c * d id = id + id * id 词法分析器 语法分析器 源程序 词法记号序列 抽象语法树 Flex Bison 词法规则 (正则表达式) 语法规则 (文法) 代码生成 = id (a) + id (b) * id (c) id (d) 词法分析器与语法分析器的交互 flex: yylex() Bison: yyparser() 语法分析器yyparser需要下一个新单词时,调用词法分析子程序yylex,yylex从输入串中识别一个单词后返回。 关于Bison/Yacc Zhou, Erqiang * School of Information and Software Engineering 既然yyparser要处理 yylex的返回值 需要对yylex的返回值进行约定 在Bison源文件中定义 %token NUMBER 生成语法分析器时使用 -d 参数生成 xxx.tab.h 即 bison -d xxx.y 得到 xxx.tab.h 和 xxx.tab.c 其中 xxx.tab.h中有 #define NUMBER 258 该头文件需要被包含进 xxx.l 的定义部分 关于Bison/Yacc Zhou, Erqiang * School of Information and Software Engineering 关于Bison/Yacc Zhou, Erqiang * School of Information and Software Engineering y.tab.c (yyparser) lex.yy.c (yylex) 其它源程序 gcc 编译 Bison Flex calc.y calc.l y.tab.h calc.exe bison –d calc.y // 生成 y.tab.h, y.tab.c flex calc.l // 生成 lex.yy.c, calc.l中要include y.tab.h gcc lex.yy.c y.tab.c –o calc.exe // 编译、链接 yylex的返回的是词法记号(单词编号) 而一词法记号有相应的属性:标识符、常数等 词法记号的属性值如何返回? 语法分析器如何访问 token 的属性? 约定使用全局变量 yylval yylval 的类型默认为整数类型,用户可自己定义 一般定义为 union 类型 关于Bison/Yacc Zhou, Erqiang * School of Information and Software Engineering ... 定义 ... %% ... 语法规则(文法及对应的处理) ... %% ... 函数定义 ... 其中: 定义部分的C源代码需要放在 %{ 与 %} 之间 Bison 文件的结构 Zhou, Erqiang * School of Information and Software Engineering LR 分析举例(一) Zhou, Erqiang * School of Information and Software Engineering %{ #include stdio.h int yylex(void); void yyerror(char *); %} %token NUMBER %% 语法部分 %% voi

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档