lex刚刚起步1
来源:互联网 发布:北师大心理测评软件 编辑:程序博客网 时间:2024/05/16 18:57
在清华大学出版的《编译原理》的附录里虽然有关于tex的简介和使用方法,但毕竟是作为附录登出的,在可读性上自然就要大打折扣。不过还好有internet,一切就变得简单多了。google了一大堆文章,一边看,一边写,觉得lex入门还是挺容易的。
例1:
%{
int num_lines=0,num_chars=0, num_words=0;
%}
%%
/n {++num_lines;++num_chars;}
. {++num_chars;}
[a-zA-Z]* {++num_words;}
%%
main()
{
num_lines=0;
num_chars=0;
yylex();
printf("lines: %d/nchars: %d/nwords: %d/n", num_lines, num_chars, num_words);
}
一般地,一个lex文件由三个部分组成,每个部分之间用%%分隔。例1就很清晰地展现出了这一结构。
第一部分:
%{
int num_lines=0,num_chars=0, num_words=0;
%}
的作用是声明三个全局变量,以便在lex和c源程序之间传递数值,%{和%}千万不能忘记,否则lex编译器就不会把它们之间的语句写进转换后的c源代码中。
第二部分:
/n {++num_lines;++num_chars;}
. {++num_chars;}
[a-zA-Z]* {++num_words;}
则是转换规则,功能不用解释,一看就明白。
第三部分:
main()
{
yylex();
printf("lines:%d /tchars:%d/twords:%d/n", num_lines, num_chars, num_words);
}
由于在这里lex是使用的c作为宿主语言,因此,就可以在这里放上c的别的功能的函数。
编译并运行:
lex f1.l
gcc lex.l.c -of1 -ll
./f1 < f1.l
结果就出来了。没费什么力气,一个可以统记行数,字符数和单词数的记数器就被构造出来了。
例1:
%{
int num_lines=0,num_chars=0, num_words=0;
%}
%%
/n {++num_lines;++num_chars;}
. {++num_chars;}
[a-zA-Z]* {++num_words;}
%%
main()
{
num_lines=0;
num_chars=0;
yylex();
printf("lines: %d/nchars: %d/nwords: %d/n", num_lines, num_chars, num_words);
}
一般地,一个lex文件由三个部分组成,每个部分之间用%%分隔。例1就很清晰地展现出了这一结构。
第一部分:
%{
int num_lines=0,num_chars=0, num_words=0;
%}
的作用是声明三个全局变量,以便在lex和c源程序之间传递数值,%{和%}千万不能忘记,否则lex编译器就不会把它们之间的语句写进转换后的c源代码中。
第二部分:
/n {++num_lines;++num_chars;}
. {++num_chars;}
[a-zA-Z]* {++num_words;}
则是转换规则,功能不用解释,一看就明白。
第三部分:
main()
{
yylex();
printf("lines:%d /tchars:%d/twords:%d/n", num_lines, num_chars, num_words);
}
由于在这里lex是使用的c作为宿主语言,因此,就可以在这里放上c的别的功能的函数。
编译并运行:
lex f1.l
gcc lex.l.c -of1 -ll
./f1 < f1.l
结果就出来了。没费什么力气,一个可以统记行数,字符数和单词数的记数器就被构造出来了。
- lex刚刚起步1
- 刚刚起步学java
- 两个刚刚起步的宝贝!
- VDC调查显示:Linux在零售系统领域刚刚起步
- Lex & Yacc (1)
- lex
- lex
- Lex
- lex
- 刚刚
- 刚刚
- 刚刚
- 个人网站 http://www.huyuhan.com/ 上线,刚刚起步,内容正在充实中……
- 现实世界中的 Windows Azure: 刚刚起步的LiquidSpace借助Windows Azure快速发展
- 30岁了,刚刚起步,希望自己的每一个进步都能被印证下来.
- 集团信息化之路 人力资源系统的漫长之路刚刚起步
- [VBA起步]1
- java起步篇(1)
- 第三届中国县域经济基本竞争力百强县(市)
- .Net/C# 实现 中国移动 CMPP v3.0 ISMG SP 收发短信的 SP 客户端 (第2版)(CMPP SP Client)
- 第四届中国县域经济基本竞争力百强县(市)
- 该页无“法”显示
- 欢歌2004·2002围炉音乐晚会
- lex刚刚起步1
- C++中函数重载机制询问
- 不可更新查询的错误
- 抱着尝试的心理申请了一个ID。。。
- OOP和RDBMS不匹配,谁向谁妥协,还是找个和稀泥的?
- 在 ASP.NET 页面中使用 TreeView 控件
- treeview的使用小结
- 如何把VC6的程序编译为汇编程序
- Q: UltraEdit 11.0 注册码