- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lex和yacc课件
LEX 和 YACC;12.1 LEX简介;手动生成编译程序的缺点:工作量太大,维护困难
如:ANSI C的词法规则有近100条,相应的状态NFA有600多,DFA有200多;利用LEX自动生成编译程序;例:一个LEX源程序(统计文本文件行数和字符数) TEST.L
int num_chars=0,num_lines=0;
%%
\n {++num_chars;++num_lines;}//一定要顶行写
. ++num_chars;
%%
main()
{ yylex(); printf(the line is %d,the char is %d,num_lines,num_chars);}
int yywrap()
{return 1;};使用过程;12.2 LEX源文件的格式;12.2.1 模式;模 式;白字符的处理:需用""或[ ]括起来
汉字如何匹配?
[]的使用要注意.如[^]*;12.2.2 定义部分;例:
%{
int num_chars,num_lines;
}%
DIGIT [0-9]
ID [a-z][a-z0-9]*;12.2.3 规则部分;12.2.4 用户代码部分;12.3 LEX的工作原理;12.4 yylex()的匹配原则;缺省规则:无模式可匹配时,原样拷贝至yyout.
最短的lex源程序
%%;12.5 动作部分;| 的用法
%%
world |
water printf(Same action);
一些重要函数、变量和宏
int yywrap();
yyin;yyout;yytext;
REJECT;ECHO;条件模式;不用条件模式的程序
int flag;
%%
^a {flag=a;ECHO;}
^b {flag=b;ECHO;}
\n {flag=0;ECHO}
world {switch(flag)
{case a: printf(first);break;
case b: printf(second);break;
default: ECHO;break;}}
%%;用条件模式的程序
%start AA BB
%%
^a {ECHO;BEGIN AA;}
^b {ECHO;BEGIN BB;}
\n {ECHO;BEGIN 0;}
AA world printf(first);
BB world printf(second);;12.6 LEX部分例题;例二:汉字GB码在文本文件中用两个最高位是1的字节表示,试利用lex设计一程序,统计一个文本文件中的汉字数。
例三:实验一的词法分析器如何用lex来实现?;%{
#include stdio.h
#include stdlib.h
int num_num=0,num_id=0;
%}
INTEGER [-+]?[1-9][0-9]*
ID [a-zA-Z][a-zA-Z_0-9]*
SPACE [ \n\t]
;%%
{INTEGER} {num_num++;ECHO;}
{ID} {num_id++;ECHO;}
SPACE |
. {}
%%
main()
{yylex();printf(num_num=%d,num_id=%d);}
int yywrap()
{return 1;};例二参考答案;不妨设LEX源程序名为b.l,内容如下
%{
#include stdio.h
#include stdlib.h
int count=0;
%}
%%
[\x80-\xff][\x80-\xff] count++;ECHO;
. |
\n;%%
void main()
{ if((yyin=fopen(zp.txt,r))==NULL)
{
printf(\nCant open filezp.txt);exit(0); }
yylex();
printf(\ncount=%d,count);
}
int yywrap()
{ return 1;};上例运行步骤:
在dos提示符下运行 flex b.l,此时可生成一lexyy~1.c的C程序.
在C集成环境下(Bc3.1 或Tb2.0)按F9编译此程序,可得可执行文件lexyy~1.exe
您可能关注的文档
- 16-17版 第1部分 专题2 突破点11 化学基本理论综合应用课件.ppt
- 15纪录片拍摄课件.ppt
- fortran第8章课件.ppt
- FORTRAN语言第5章(共8章)课件.ppt
- 16-17版 第1部分 专题6 机械能守恒定律 功能关系课件.ppt
- 16.一分钟课件.ppt
- 16 情趣盎然设计课件.ppt
- 16数理逻辑复习课件.ppt
- 16-涡流检测方法课件.ppt
- 15今天我很忙鄂教版一年级下册课件.ppt
- 2025届衡阳市第八中学高三一诊考试物理试卷含解析.doc
- 2025届湖南省娄底市双峰一中等五校重点中学高三第二次诊断性检测物理试卷含解析.doc
- 天水市第一中学2025届高三第二次联考物理试卷含解析.doc
- 2025届金华市重点中学高三考前热身物理试卷含解析.doc
- 2025届北京市石景山区第九中学高三第四次模拟考试物理试卷含解析.doc
- 江苏扬州市2025届高三第一次模拟考试物理试卷含解析.doc
- 2025届江苏省南通市高级中学高考物理五模试卷含解析.doc
- 广东省清远市华侨中学2025届高三第一次调研测试物理试卷含解析.doc
- 辽宁省凤城市2025届高三第五次模拟考试物理试卷含解析.doc
- 内蒙古巴彦淖尔市重点中学2025届高考仿真卷物理试卷含解析.doc
文档评论(0)