ImageVerifierCode 换一换
格式:PDF , 页数:12 ,大小:663.06KB ,
资源ID:10627293      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10627293.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验四 借助FlexBison进行语法分析.pdf)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

实验四 借助FlexBison进行语法分析.pdf

1、实验四 借助 Flex/Bison进行语法分析 一说明: 利用附录提供的 C语言文法的相关参考资料,利用 Yacc/Bison编写一个 C语言分析器。 二具体内容: 利用语法分析器生成工具 Bison编写一个语法分析程序,与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。 三实验要求: 实验资料如下: 3.1 阅读 Flex源文件 input.lex、 Bison源文件 cgrammar-new.y。 3.2 实现 C 语言的语法分析功能,最后上机调试。 3.3 生成 语法分析程序 2_2.exe, 以给定的测试文件作为输入,输出运行结果到输出文件中。 四 实验

2、过程 : ( 1) 执行 以下命令 , 生成 lex.yy.c、 cgrammar-new.tab.h、 cgrammar-new.tab.c。 C:GnuWin32binflex -l input.lex C:GnuWin32binbison -d cgrammar-new.y cgrammar-new.y: conflicts: 1 shift/reduce ( 2) cgrammar-new.y有移近规约冲突。 执行命令 bison -d cgrammar-new.y 后, Bison提示移近规约冲突“ cgrammar-new.y: conflicts: 1 shift/reduce”

3、 。 以 Bison的 “-v“选项生成状态机描述文件 cgrammar-new.output, 即执行 bison -d cgrammar-new.y。 C:GnuWin32binbison -v cgrammar-new.y cgrammar-new.output文件内容如下: 修改以下两处: 2.1 在 yacc的头部加入 %nonassoc LOWER_THAN_ELSE %nonassoc ELSE 2.2 在 355行加入 %prec LOWER_THAN_ELSE ( 3) 编译 使用 cl.exe或 gcc编译器,编译 lex.yy.c cgrammar-new.tab.c m

4、ain.c parser.c。使用 cl.exe编译后,得到以下错误提示: C:GnuWin32bincl lex.yy.c cgrammar-new.tab.c main.c parser.c 用于 80x86 的 Microsoft (R) 32 位 C/C+ 优化编译器 16.00.40219.01 版 版权所有 (C) Microsoft Corporation。保留所有权利。 lex.yy.c cgrammar-new.tab.c main.c parser.c 正在生成代码 . Microsoft (R) Incremental Linker Version 10.00.40219

5、.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:lex.yy.exe lex.yy.obj cgrammar-new.tab.obj main.obj parser.obj lex.yy.obj : error LNK2019: 无法解析的外部符号 _yyinput,该符号在函数 _comment 中被引用 lex.yy.exe : fatal error LNK1120: 1 个无法解析的外部命令 修改 lex.yy.c,使其能顺利编译。 3.1 将 lex.yy.c中的 #ifdef _cplusplus

6、 static int yyinput() #else static int input() #endif 改为 static int yyinput() 修改后重新编译, 错误 提示如下 : C:GnuWin32bincl lex.yy.c cgrammar-new.tab.c main.c parser.c 用于 80x86 的 Microsoft (R) 32 位 C/C+ 优化编译器 16.00.40219.01 版 版权所有 (C) Microsoft Corporation。保留所有权利。 lex.yy.c input.lex(223) : error C2129: 静态函数“ i

7、nt input()”已声明但未定义 lex.yy.c(660) : 参见“ input”的声明 cgrammar-new.tab.c main.c parser.c 正在生成代码 . 2.2 将 lex.yy.c中的 #ifdef _cplusplus return yyinput(); #else return input(); #endif 改为 return yyinput(); ( 3) 生成可执行文件 2_2.exe,并分析源文件 test.c。 使用 cl命令编译时,增加参数 o“2_2.exe“,制定输出的可执行文件名。 C:GnuWin32bincl lex.yy.c cgr

8、ammar-new.tab.c main.c parser.c -o“2_2.exe“ 用于 80x86 的 Microsoft (R) 32 位 C/C+ 优化编译器 16.00.40219.01 版 版权所有 (C) Microsoft Corporation。保留所有权利。 cl: 命令行 warning D9035 :“ o”选项已否决,并将在将来的版本中移除 lex.yy.c cgrammar-new.tab.c main.c parser.c 正在生成代码 . Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyr

9、ight (C) Microsoft Corporation. All rights reserved. /out:lex.yy.exe /out:2_2.exe lex.yy.obj cgrammar-new.tab.obj main.obj parser.obj 执行 C:GnuWin32bin2_2.exe 2_2.exe main 2 1 0 1 i 3 1 0 2 0 4 1 0 1 j 5 2 0 1 t1 6 4 0 4 typedef uint 7 2 0 1 xx 8 2 0 1 yy Abstract Syntax Tree . node prev next parent

10、child line sti 33 0 0 0 32 9 0 0 0 + goal_ 32 0 55 33 31 9 0 0 0 + extdef_ 31 0 0 32 7 9 0 0 0 | + funcdef_ 7 0 30 31 3 5 0 0 0 | + funcdecl_ 3 0 6 7 1 4 0 0 0 | | + decl_spec_ 1 0 0 3 0 4 0 0 0 | | | + void_ 6 3 0 0 5 5 0 0 0 | | + direct_decl_ 5 0 0 6 4 4 0 0 0 | | + funcdecl_ 4 0 0 5 2 4 0 0 0 |

11、| + ident_ 2 0 0 4 0 4 1 0 0 | | + IDENT_ (main) 30 7 0 0 29 9 0 0 0 | + funcbody_ 29 0 0 30 18 9 0 0 0 | + compound_stmt_ 18 0 0 29 17 6 0 0 0 | + declarations_ 17 0 28 18 10 6 0 0 0 | + decl_init_ 10 0 16 17 8 6 0 0 0 | | + decl_spec_ 8 0 0 10 0 6 0 0 0 | | | + int_ 16 10 0 0 15 6 0 0 0 | | + init

12、_declarators_ 15 0 0 16 12 6 0 0 0 | | + declaratorinit_ 12 0 14 15 11 6 0 0 0 | | + direct_decl_ 11 0 0 12 9 6 0 56 157 | | | + ident_ 9 0 0 11 0 6 2 0 0 | | | + IDENT_ (i) 14 12 0 0 13 6 0 0 0 | | + assign_ 13 0 0 14 0 6 3 0 0 | | + CONST_ (0) 28 17 0 0 21 7 0 0 0 | + decl_init_ 21 0 27 28 19 7 0

13、0 0 | + decl_spec_ 19 0 0 21 0 7 0 0 0 | | + int_ 27 21 0 0 26 7 0 0 0 | + init_declarators_ 26 0 0 27 23 7 0 0 0 | + declaratorinit_ 23 0 25 26 22 7 0 0 0 | + direct_decl_ 22 0 0 23 20 7 0 0 0 | | + ident_ 20 0 0 22 0 7 4 0 0 | | + IDENT_ (j) 25 23 0 0 24 7 0 0 0 | + assign_ 24 0 0 25 0 7 3 0 0 | +

14、 CONST_ (0) 55 32 66 0 54 14 0 0 0 + extdef_ 54 0 0 55 40 14 0 0 0 | + funcdef_ 40 0 53 54 36 12 0 0 0 | + funcdecl_ 36 0 39 40 34 11 0 0 0 | | + decl_spec_ 34 0 0 36 0 11 0 0 0 | | | + void_ 39 36 0 0 38 12 0 0 0 | | + direct_decl_ 38 0 0 39 37 11 0 0 0 | | + funcdecl_ 37 0 0 38 35 11 0 0 0 | | + i

15、dent_ 35 0 0 37 0 11 5 0 0 | | + IDENT_ (t1) 53 40 0 0 52 14 0 0 0 | + funcbody_ 52 0 0 53 51 14 0 0 0 | + compound_stmt_ 51 0 0 52 50 13 0 0 0 | + declarations_ 50 0 0 51 43 13 0 0 0 | + decl_init_ 43 0 49 50 41 13 0 0 0 | + decl_spec_ 41 0 0 43 0 13 0 0 0 | | + int_ 49 43 0 0 48 13 0 0 0 | + init_

16、declarators_ 48 0 0 49 45 13 0 0 0 | + declaratorinit_ 45 0 47 48 44 13 0 0 0 | + direct_decl_ 44 0 0 45 42 13 0 0 0 | | + ident_ 42 0 0 44 0 13 2 0 0 | | + IDENT_ (i) 47 45 0 0 46 13 0 0 0 | + assign_ 46 0 0 47 0 13 3 0 0 | + CONST_ (0) 66 55 75 0 65 17 0 0 0 + extdef_ 65 0 0 66 56 17 0 0 0 | + dec

17、l_init_ 56 0 64 65 57 17 0 0 0 | + typedef_ 57 0 0 56 60 17 0 0 0 | | + unsigned_ 60 0 0 57 58 17 0 0 0 | | + decl_spec_ 58 0 0 60 0 17 0 0 0 | | + int_ 64 56 0 0 63 17 0 0 0 | + init_declarators_ 63 0 0 64 62 17 0 0 0 | + declarator_ 62 0 0 63 61 17 0 0 0 | + direct_decl_ 61 0 0 62 59 17 0 0 0 | +

18、ident_ 59 0 0 61 0 17 6 0 0 | + IDENT_ (uint) 75 66 84 0 74 19 0 0 0 + extdef_ 74 0 0 75 69 19 0 0 0 | + decl_init_ 69 0 73 74 67 19 0 0 0 | + decl_spec_ 67 0 0 69 0 19 6 0 0 | | + type_name_ (uint) 73 69 0 0 72 19 0 0 0 | + init_declarators_ 72 0 0 73 71 19 0 0 0 | + declarator_ 71 0 0 72 70 19 0 0

19、 0 | + direct_decl_ 70 0 0 71 68 19 0 0 0 | + ident_ 68 0 0 70 0 19 7 0 0 | + IDENT_ (xx) 84 75 0 0 83 20 0 0 0 + extdef_ 83 0 0 84 78 20 0 0 0 + decl_init_ 78 0 82 83 76 20 0 0 0 + decl_spec_ 76 0 0 78 0 20 6 0 0 | + type_name_ (uint) 82 78 0 0 81 20 0 0 0 + init_declarators_ 81 0 0 82 80 20 0 0 0

20、+ declarator_ 80 0 0 81 79 20 0 0 0 + direct_decl_ 79 0 0 80 77 20 0 0 0 + ident_ 77 0 0 79 0 20 8 0 0 + IDENT_ (yy) End of Output. 【 说明 】 Linux上的 io.h头文件没有包含在标准库 /usr/include中 , 使用命令 find /usr/include name io.h找到 io.h的位置 , 使用参数 -I将其路径加入到头文件中 。 结果及文件如下: 五 实验成果: 5.1 打包 压缩 以下文件 为 ”2_2代码 .rar” , 提交到服务器 。 5.2 提交报告,详细描述实验过程。分析输出结果中符号表和抽象语法树的生成过程。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报