作者: 胡彦 本框架是一个lex/yacc完整的示例,用于学习lex/yacc程序基本的搭建方法,在linux/cygwin下敲入make就可以编译和执行。 本例子虽小却演示了lex/yacc程序最常见和重要的特征: * lex/yacc文件格式、程序结构。 * 如何在lex/yacc中使用C++和STL库,用extern "C"声明那些lex/yacc生成的、要链接的C函数,如yylex(), yywrap(), yyerror()。 * 重定义YYSTYPE/yylval为复杂类型。 * 用%token方式声明yacc记号。 * 用%type方式声明非终结符的类型。 * lex里正则表达式的定义、识别方式。 * lex里用yylval向yacc返回属性值。 * 在yacc嵌入的C代码动作里,对记号属性($1, $2等)、和非终结符属性($$)的正确引用方法。 * 对yyin/yyout重赋值,以改变yacc默认的输入/输出目标。 * 如何开始解析(yyparse函数),结束或继续解析(yywrap函数)。 本例子功能是,对当前目录下的file.txt文件,解析出其中的标识符、数字、其它符号,显示在屏幕上。linux调试环境是Ubuntu 10.04。 总之,大部分框架已经搭好了,你只要稍加扩展就可以成为一个计算器之类的程序,用于《编译原理》的课程设计。 文件列表: lex.l: lex程序文件。 yacc.y: yacc程序文件。 main.hpp: 共同使用的头文件。 Makefile: makefile文件。 file.txt: 给程序解析的文本文件。 使用方法: 1-把lex_yacc_example.rar解压到linux/cygwin下。 2-命令行进入lex_yacc_example目录。 3-敲入make,这时会自动执行以下操作: (1) 自动调用flex编译.l文件,生成lex.yy.c文件。 (2) 自动调用bison编译.y文件,生成yacc.tab.c和yacc.tab.h文件。 (3) 自动调用g++编译、链接出可执行文件main。 (4) 自动执行main,得到如下结果:。 bison -d yacc.y g++ -c lex.yy.c g++ -c yacc.tab.c g++ lex.yy.o yacc.tab.o -o main id: abc id: defghi int: 123 int: 45678 op: ! op: @ op: # op: $ AllId: abc defghi 参考资料:《Lex和Yacc从入门到精通(6)-解析C-C++包含文件》, http://blog.csdn.net/pandaxcl/article/details/1321552 其它文章和代码请留意我的blog: http://blog.csdn.net/huyansoft 2013-4-27
2020-12-10 21:03:45 52KB Lex_Yacc 编译原理 课程设计 代码_例子
1
Lex与Yacc第二版高清版,扫描版,有目录
2020-11-10 21:08:29 20.48MB Lex Flex Yacc
1
压缩包包含两个程序: bison-2.4.1-setup.exe\flex-2.5.4a-1.exe 下载后直接点击安装就可以,接着右键计算机,打开属性->高级系统设置->环境变量,在path变量中添加路径,即到你安装好的程序的bin的路径,如:C:\Program Files (x86)\GnuWin32\bin; 之后你就可以在cmd中通过命令编译你的lex\yacc文件了。 绝对可用,本人亲试,如果编译不成功的可能是你写的lex\yacc文件有问题,用一个好的示例文件进行编译就知道这可以用了(血泪教训啊,当初还以为不能用呢)
2019-12-21 22:14:57 4.79MB LEX YACC FLEX BISON
1
使用lex和yacc 完成simpleC语言简单语句的分析 编译原理课程设计
2019-12-21 21:32:36 650KB 使用lex和yacc 简单语句分析
1
Lex与Yacc》中文第二版,高清扫描版,包含书中例子的代码实现。
2019-12-21 20:17:35 19.67MB lex yacc flex bison
1
在windows下可以使用的lex&yacc编译器,使用超级方便
2019-12-21 20:12:44 86KB lex Windows yacc 编译器
1
Lex_Yacc 编译器设计示例代码及参考文档 1.LexAndYaccTutorial_20130311_041140.tgz代码包 生成 calc3a 解释执行 calc3b 生成基于栈的机器的汇编程序 calc3g 生成程序的语法树 用法: # ./calc3a a.src u = 5 5 120 halt a.src是个计算阶乘的源代码 n = 1; p = 1; read u; print u; while (n <= u) { p = p * n; n = n + 1; } print p; calc3b 生成基于栈的机器的汇编程序 用法: # ./calc3b a.src push 1 pop n push 1 pop p read pop u push u print L000: push n push u cmpLE jFalse L001 push p push n mul pop p push n push 1 add pop n jmp L000 L001: push p print halt 2.lexyacc-simple.tgz,一个简单的simple语言的编译器,可以解释执行,也可编译为栈机器的汇编语言。 3.cc-ansi99-parser_20130313_082654.tgz,一个ansi99标准的C语言的编译器,只进行词法和语法分析,不生成目标代码。 4.同时好有配套的2篇文档:LexAndYaccTutorial.pdf,Compiler Construction using Flex and Bison.pdf 供采用Lex Yacc进行编译器设计者参考
2019-12-21 20:01:04 450KB Lex Yacc 编译器 设计
1
我找了N久,才找到的资源,拿出来和大家一同分享,里面有flex.exe和bison.exe以及相关的文件。觉得好的话,请大家顶一下。
2019-12-21 19:52:31 96KB lex.exe yacc.exe flex.exe bison.exe
1
lex和yacc构建的SQL分析器,lex和yacc构建的SQL分析器
2019-12-21 19:50:07 3KB lex yacc SQL分析器
1
Windows平台下学习Lex与Yacc的必备工具,flex-2.5.4a-1.exe 和 bison-2.4.1-setup.exe 以及 cygwin2.738 的安装文件
2019-12-21 19:45:10 5.32MB cygin flex bison
1