Lex&Yacc软件下载:
参考链接:手把手教你win10下lex与yacc的安装_wang_yr的博客-CSDN博客
总结
词法分析文件
拓展名文件名.l
- 【创建文件,编辑内容】
在解压包的路径的UnxUtils文件夹下创建文件,拓展名为.l,编辑文件,保存
- 【输入命令,得到.c文件】
打开命令提示符(Dos命令)输入
flex 文件名.l
,没有出错提示,UnxUtils文件夹增加一个文件:文件名.c(windows系统下,unix下是文件名.yy.c)3.【得到.exe文件】
使用c语言编辑器(比如devC++,Cfree等)编译
文件名.c
,得到文件名.exe
- 【运行结果】
新建文本文件:test.txt,在命令提示符(Dos命令)输入
文件名<test.txt
,无错,则会运行出文件名.l
实现的功能
代码
https://blog.csdn.net/wang_yr/article/details/106000167?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242
运行截图
语法分析文件
- 【创建.y文件,编辑内容】
在解压包的路径的UnxUtils文件夹下创建文件,拓展名为.y,编辑文件,保存
- 【输入命令,得到.c文件】
打开命令提示符(Dos命令)输入
bison 文件名.y
,没有出错提示,UnxUtils文件夹增加一个文件:文件名.c(windows系统下,unix下是文件名.tab.c)3.【编译运行】
代码
https://blog.csdn.net/NKU_Yang/article/details/109456809?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162169267616780366567338%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162169267616780366567338&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-109456809.first_rank_v2_pc_rank_v29&utm_term=yacc%E5%AE%9E%E7%8E%B0%E4%B8%AD%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BD%AC%E5%90%8E%E7%BC%80&spm=1018.2226.3001.4187
运行截图
词法分析与语法分析联合使用
语法文件(拓展名是.y)联合词法文件(拓展名是.l)编译,顺序是有先后的。
在UnxUtils的文件夹下
【创建.y文件,编写代码】
【编译.y文件】
在cmd(以管理员的身份运行),输入命令 bison -d 文件名.y
(在UnxUtils的文件夹下,会多出一个
文件名.tab.h
和文件名.tab.c
的文件)
【创建.l文件,将.h在头文件引入】
比如多出的文件为test42.tab.h,那么在.l文件里引入,代码为**#include “test42.tab.h”**
【编译.l文件】在cmd里面输入命令
flex 文件名.l
(在UnxUtils的文件夹下,会多出一个
lex.yy.c
文件,无论之前的文件名为什么,编译后的文件名都是lex.yy.c
)
联合编译词法分析文件和语法分析文件
在cmd 里输入
gcc -o 文件名 文件名.tab.c lex.yy.c
,一般c语言编译里是有gcc的,如果不能编译,请检查是否将gcc设置到了环境变量。这里也可以直接使用c语言编译器编译,运行
文件名.tab.c
(第一个文件名,可以自定义。无错误之后,会得到一个以第一个文件名命名的可执行文件(
.exe
)
- 运行程序,检测功能。在cmd里面输入
文件名.exe
测试代码链接
https://riayang.blog.csdn.net/article/details/43014957
运行截图
最后
如果文章内容有问题,欢迎留言评论