从自己的程序中使用lex的一个小例子
2013-05-17 12:03
706 查看
网上很多例子,都是yacc和lex结合的。而我想找一个单纯使用 lex的例子。而且可以从我的主程序来调用它。
上程序:
第一步,编写 flex 文件:example.flex
从网上找到的,其功能是对行数和字符数计数。
这里,在flex文件中,我没有声明main方法,即使声明了,也会生成在 flex example.flex 后得到的 lex.yy.c 中。
而我想要从我自己的程序里,来调用,所以命名了这个counter函数。
要特别注意上面的 yy_scan_string函数调用,如果没有对它的调用,yylex会从标准输入来读信息流的。
第二步,编写我的主程序:
第三步,编写头文件:
最后,进行编译和运行:
结束!
上程序:
第一步,编写 flex 文件:example.flex
从网上找到的,其功能是对行数和字符数计数。
[root@cop01 tst]# cat example.flex /* name: example.flex */ %option noyywrap %{ int num_lines =0, num_chars=0; %} %% \n ++num_lines; ++num_chars; . ++num_chars; %% int counter(char *stream,int *nlines,int *nchars) { yy_scan_string("a test string\n\n"); yylex(); *nlines=num_lines; *nchars=num_chars; return 0; } [root@cop01 tst]#
这里,在flex文件中,我没有声明main方法,即使声明了,也会生成在 flex example.flex 后得到的 lex.yy.c 中。
而我想要从我自己的程序里,来调用,所以命名了这个counter函数。
要特别注意上面的 yy_scan_string函数调用,如果没有对它的调用,yylex会从标准输入来读信息流的。
第二步,编写我的主程序:
[root@cop01 tst]# cat test.c #include <stdio.h> #include "test.h" int main() { char cstart[50]="This is an example\n\n"; int plines=0; int pchars=0; counter(cstart,&plines,&pchars); fprintf(stderr,"lines counted: %d \n",plines); fprintf(stderr,"chars counted: %d \n",pchars); return 0; } [root@cop01 tst]#
第三步,编写头文件:
[root@cop01 tst]# cat test.h int counter(char *stream,int *nlines,int *nchars); [root@cop01 tst]#
最后,进行编译和运行:
[root@cop01 tst]# gcc -g -Wall -c lex.yy.c lex.yy.c:974: warning: ‘yyunput’ defined but not used [root@cop01 tst]# gcc -g -Wall -c test.c [root@cop01 tst]# gcc -g -Wall -o test test.o lex.yy.o [root@cop01 tst]# ./test lines counted: 2 chars counted: 15 [root@cop01 tst]#
结束!
相关文章推荐
- 自己写了一个通过smarty与php相互结合的例子,动态生成静态程序,写的很烂
- 使用rpcgen构建分布式程序的一个简单例子
- 共享一个免费文件管理程序,可以嵌入你自己的网站中使用!
- ListView折叠展开demo(使用expendsListView第三方包和网上的一些例子都不好使,自己写了一个)
- 一个使用MRUnit测试mapreduce程序例子
- NET简单的一个画图程序 使用简单 自己可以相关自己的内容进行配置就可以使用了
- 使用多线程方法实现一个死锁程序,用来提醒自己不要犯这样的错误
- 微信小程序例子——使用画布组件绘制一个长200px,宽100px的长方形
- NET简单的一个画图程序 使用简单 自己可以相关自己的内容进行配置就可以使用了
- 词法分析程序 LEX和VC6整合使用的一个简单例子
- 自己写的一个使用游标的小例子
- 使用LEX&YACC设计一个计算器的例子
- 在MFC下使用OpenGL的一个简单的例子(基于单文档程序)
- 使用线程的一个例子程序
- 微信小程序例子——使用画布组件绘制一个会自动缩放的正方体
- 使用gtype构造的一个简单学生管理程序其他属性自己加
- 微信小程序例子——使用画布组件绘制一个会自动旋转的正方体
- 词法分析程序 LEX和VC6整合使用的一个简单例子
- 微信小程序例子——使用画布组件绘制一个带阴影及下划线的文字
- 使用LOG4J记录程序日志的一个例子