词法分析程序设计与自动构造.ppt

词法分析程序设计与自动构造.ppt

ID:49666851

大小:232.50 KB

页数:24页

时间:2020-02-26

词法分析程序设计与自动构造.ppt_第1页
词法分析程序设计与自动构造.ppt_第2页
词法分析程序设计与自动构造.ppt_第3页
词法分析程序设计与自动构造.ppt_第4页
词法分析程序设计与自动构造.ppt_第5页
资源描述:

《词法分析程序设计与自动构造.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、词法分析程序设计与自动构造彭德巍2011.10.12主要内容词法分析程序设计词法分析程序自动构造1.词法分析程序设计词法分析总控程序见图1。界限符运算符字母数字结束符“#”开始到输入流中读下一字符CharChar是什么?初始化标识符和关键字词法分析子程序无符号数词法分析子程序运算符词法分析子程序界限符词法分析子程序结束图1词法分析总控程序若对自动机的每一个状态赋予一定的功能,并把其边上的符号视为转移条件,那么自动机就成为一个程序了。以无符号数为例:给定语法图2,构造自动机见图3。d.de+-d图2无符号数的语法图图3无符号数

2、的自动机1234560dd+ε-.ed.otherotherddothered7e开始0N,P,j;1e数字d;N*10+dN是数字?Y读字符charNYN整型量标记C1是’-’吗?读字符char是’e’吗?是’-’吗?-1e读字符charYNYN读字符char是数字?Y数字d;N*10+dN;j+1j是数字?Y读字符charERRORNN实型量标记C1是数字?Y数字d;P*10+dPY读字符charERRORNN实型量标记C1N*10e*P-jt结束YN整数部分小数部分是’.’吗?是

3、数字?指数部分N图4无符号数词法分析流程图最后可得到无符号数分析算法流图见图4。2.词法分析程序设计自动构造Flex简介Flex源文件分析Flex词法分析程序设计自动构造演示实验任务和要求2.1Flex简介FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。输入文件扩展名为.lFlex输出文件Lex.yy.cFlex源文件格式LEX对源文件的格式要求非常严格,所以书写时一定要注意。LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下:定义部份%%规则部份%%用户附加C语言部份定义部分

4、定义部份由C语言代码、模式的宏定义组成。除宏定义外,定义部分的其余代码必须用符号%{和%}括起来。另外,flex使用的C语言库文件和外部变量以及部分声明的函数,也应分别置于%{和%}之内。例如下面是一个flex语言的说明部分:%{#include“stdio.h”intnum=0%}DIGIT[0-9]ID[A-Za-z][A-Za-z0-9_]*%%注意:这里起标识符作用的%%和%{、%}必须要顶行写规则部分规则部份是LEX源文件的核心部份,它包括一组模式和在生成分析器识别相应模式后对相应模式进行处理的C语言动作(Actio

5、n)。格式如下:C语言代码模式1动作1模式2

6、模式3动作3用户附加C语言部份支持规则动作部分所需要的处理过程,是对规则部分中动作的补充。FLEX对此部份不作任何处理,仅仅将其直接拷贝到输出文件lex.yy.c的尾部。Flex中模式的定义digit[0-9]number("-"

7、"+")?{digit}+hexnumber"0x"({digit}

8、[a-fA-F])+letter[a-zA-Z]identifier({letter}

9、_)({number}

10、{letter}

11、_)*newline[]whitespace[t

12、]+string"[^"]*"comment"#"[^#]*"#"Flex中模式的定义-PL/0语言digit[0-9]letter[a-zA-Z]number{digit}+identifier{letter}({letter}

13、{digit})*wrongid({digit}+){letter}({letter}

14、{digit})*newline[]whitespace[t]+Lex.yy.c中的全局变量和函数File*yyin  /*指向词法分析器要接收的待分析程序的指针。如果不指定则默认指向标准输入终端(键盘

15、)。如果我们待分析的程序是文件形式我们可以将这个指针指向该文件的地址指针*/File*yyout/*同上,唯一不同是该指针指向输出的文件。默认指向标准输出终端(屏幕)。我们可通过重定向该指针改变输出流方向。*/Char*yytext/*指向识别的单词的地址;用来保存扫描一次匹配的字符串。*/Intyyleng   /*匹配的字符串中字符的个数。*/Lex.yy.c中的全局变量和函数ECHO/*flex的默认动作,一般来说是输出字符串*/yywrap()/*扫描一次完后要调用的函数,返回一个值,当这个值为1的时候分flex就不再

16、继续扫描。*/yyrestart()/*重新定向flex的输入*/Flex源文件分析(test.l)%{intwc=0;/*wordcount*/%}%%[a-zA-Z]+{wc++;}%%intmain(void){intn=yylex();returnn;}intyywr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。