Yacc 与 Lex-词法分析器工具
来源:互联网 发布:java线程池使用实例 编辑:程序博客网 时间:2024/05/10 14:52
1.下载词法分析器工具
http://download.csdn.net/download/pikaxuji/4382949
2.解压后如图所示
先安装flex-2.5.4a-1.exe
再安装第一个文件,安装后会在同一个目录
以我的为例:D:\Mysoft\GnuWin32\GnuWin32
打开此文件的bin目录:shift+右键打开命令行
输入flex c.l 得到一个lex.yy.c文件
c.l则是根据Lex和Yacc语法编写的文件
c.l
%{ #include <stdio.h> #include <stdlib.h>%}RESERVED else|if|int|return|void|whileSYMBOLS "+"|"-"|"*"|"/"|"<"|"<="|">"|">="|"=="|"!="|"="|";"|","|"("|")"|"["|"]"|"{"|"}"|"/*"|"*/"ID [a-zA-Z]+NUM [0-9]+SPACE [ \n\t\r]+%%{RESERVED} { printf("%s\t\t\t保留字\n",yytext);}{SYMBOLS} { printf("%s\t\t\t特殊符号\n",yytext);}{NUM} { printf("%d\t\t\t数字\n",atoi(yytext)); }{ID} { printf("%s\t\t\t标识符\n",yytext); }{SPACE} |. { /*什么也不做,滤掉白字符和其它字符*/ }%%int main(){ char* infilename="C:\CLionProject\CLex\gcd.cm"; printf("文件名:%s\n",infilename); yyin= fopen(infilename,"r");//读取文件 return yylex(); }`这里写代码片`int yywrap()//此函数必须由用户提供{ return 1;}
C:\CLionProject\CLex\gcd.cm
int gcd (int u, int v){ if (v == 0) return u ; else return gcd(v,u-u/v*v); /* u-u/v*v == u mod v */}void main(void){ int x; int y; x = input(); y = input(); output(gcd(x,y));}
用CLion运行lex.yy.c
输出:
文件名:gcd.cm
int 保留字
gcd 标识符
( 特殊符号
int 保留字
u 标识符
, 特殊符号
int 保留字
v 标识符
) 特殊符号
{ 特殊符号
if 保留字
( 特殊符号
v 标识符
== 特殊符号
0 数字
) 特殊符号
return 保留字
u 标识符
; 特殊符号
else 保留字
return 保留字
gcd 标识符
( 特殊符号
v 标识符
, 特殊符号
u 标识符
- 特殊符号
u 标识符
/ 特殊符号
v 标识符
* 特殊符号
v 标识符
) 特殊符号
; 特殊符号
/* 特殊符号
u 标识符
- 特殊符号
u 标识符
/ 特殊符号
v 标识符
* 特殊符号
v 标识符
== 特殊符号
u 标识符
mod 标识符
v 标识符
*/ 特殊符号
} 特殊符号
void 保留字
main 标识符
( 特殊符号
void 保留字
) 特殊符号
{ 特殊符号
int 保留字
x 标识符
; 特殊符号
int 保留字
y 标识符
; 特殊符号
x 标识符
= 特殊符号
input 标识符
( 特殊符号
) 特殊符号
; 特殊符号
y 标识符
= 特殊符号
input 标识符
( 特殊符号
) 特殊符号
; 特殊符号
output 标识符
( 特殊符号
gcd 标识符
( 特殊符号
x 标识符
, 特殊符号
y 标识符
) 特殊符号
) 特殊符号
; 特殊符号
} 特殊符号
- Yacc 与 Lex-词法分析器工具
- yacc lex 词法解析与语法解析
- yacc语法分析与lex词法分析相结合
- LEX/FLEX词法分析器
- Lex词法分析器
- Yacc 与 Lex 快速入门(词法分析和语法分析)
- Yacc 与 Lex 快速入门(词法分析和语法分析)
- Yacc 与 Lex 快速入门(词法分析和语法分析)
- Lex&Yacc词法语法分析Yacc(三)
- 编译原理----Lex词法分析器
- 【编译原理】Lex词法分析器
- Lex:词法分析器的生成器
- LEX自动生成词法分析器
- LEX与YACC 词汇表
- yacc与lex入门
- Yacc与Lex
- Lex与Yacc
- LEX与YACC入门
- QT保存设置QSetting
- git commit 出现 changes not staged for commit 错误
- CSS相关重点总结
- CDQ分治——BZOJ3295/Luogu3157 [CQOI2011]动态逆序对
- 运行的时候报 variables may not be available.
- Yacc 与 Lex-词法分析器工具
- Git仓库完整迁移 含历史记录
- L2-024. 部落
- fastjson之serializer.SimplePropertyPreFilter
- Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException
- 8个hybrid app开发工具
- Mac Safari 打不开网页,因为无法连接到服务器
- WebViewClient与WebChromeClient的区别
- kafka数据可靠性深度解读