- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
词法分析程序设计与自动构造彭德巍2011.10.12主要内容词法分析程序设计词法分析程序自动构造到输入流中读下一字符?Char1.词法分析程序设计词法分析总控程序见图1。 开始初始化Char是什么?结束符“#”字母数字运算符界限符标识符和关键字词法分析子程序无符号数词法分析子程序运算符词法分析子程序界限符词法分析子程序结束图1 词法分析总控程序d.d图2 无符号数的语法图+ed- 若对自动机的每一个状态赋予一定的功能,并把其边上的符号视为转移条件,那么自动机就成为一个程序了。以无符号数为例:给定语法图2,构造自动机见图3。 dotherd701?ed.other.23dother+ededε456-图3 无符号数的自动机最后可得到无符号数分析算法流图见图4。 读字符?char 读字符?char 读字符?char 读字符?char 读字符?char 读字符?char开始是’e’吗?N0?N,P,j;1?eY数字?d;N*10+d?N整数部分是’-’吗?N是’-’吗?NNYY-1?eY是数字?N整型量标记?C1N是’.’吗?N是数字?ERRORYY数字?d;P*10+d?P指数部分N是数字?ERRORY小数部分数字?d;N*10+d?N;j+1?jY是数字?N实型量标记?C1实型量标记?C1NY是数字?N*10e*P-j? t结束图4 无符号数词法分析流程图2.词法分析程序设计自动构造Flex简介Flex源文件分析Flex词法分析程序设计自动构造演示实验任务和要求 2.1 Flex简介?FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。Flex源文件格式?LEX对源文件的格式要求非常严格,所以书写时一定要注意。?LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下:?定义部份?%%?规则部份 ?%%?用户附加C语言部份 定义部分定义部份由C语言代码、模式的宏定义组成。除宏定义外,定义部分的其余代码必须用符号%{ 和 %} 括起来。另外,flex使用的C语言库文件和外部变量以及部分声明的函数,也应分别置于%{ 和 %} 之内。例如下面是一个flex语言的说明部分:%{ #include “stdio.h”int num = 0 %}DIGIT [0-9]ID [A-Za-z][A-Za-z0-9_]*%%注意:这里起标识符作用的%%和%{ 、%}必须要顶行写规则部分规则部份是LEX源文件的核心部份,它包括一组模式和在生成分析器识别相应模式后对相应模式进行处理的C语言动作(Action)。格式如下:?C语言代码?模式1 动作1?模式2 |?模式3 动作3用户附加C语言部份支持规则动作部分所需要的处理过程,是对规则部分中动作的补充。FLEX对此部份不作任何处理,仅仅将其直接拷贝到输出文件lex.yy.c的尾部。Flex中模式的定义digit [0-9]number (-|+)?{digit}+hexnumber 0x({digit}|[a-fA-F])+letter [a-zA-Z]identifier ({letter}|_)({number}|{letter}|_)* newline [\n]whitespace [ \t]+string \[^]*\comment #[^#]*#Flex中模式的定义-PL/0语言digit [0-9]letter [a-zA-Z]number {digit}+identifier {letter}({letter}|{digit})*wrongid ({digit}+){letter}({letter}|{digit})*newline [\n]whitespace [\t]+Lex.yy.c中的全局变量和函数File *yyin?? /* 指向词法分析器要接收的待分析程序的指 针。如果不指定则默认指向标准输入终端( 键盘)。如果我们待分析的程序是文件形式 我们可以将这个指针指向该文件的地址指针*/File *yyout /* 同上,唯一不同是该指针指向输出的文件 。默认指向标准输出终端(屏幕)。我们 可通过重定向该指针改变输出流方向。 */Char *yytext /* 指向识别的单词的地址;用来保存扫描 一次匹配的字符串。*/Int yyleng??? /* 匹配的字符串中字符的个数。*/Lex.yy.c中的全局变量和函数ECHO /* flex的默认动作,一般来说是输出字符串 */yywrap() /* 扫描一次完后要调用的函数,返回
您可能关注的文档
最近下载
- 急诊科患者转运途中突然病情变化应急预案.pptx VIP
- G30连云港至霍尔果斯高速景家口至清水驿段扩容改造报告书.pdf VIP
- 股骨粗隆间骨折护理查房——护理问题及措施与健康指导.ppt VIP
- 零星工程 投标方案(技术方案).docx
- 一种比色法检测金黄色葡萄球菌活菌的Cu-MOF材料及其制备方法和应用.pdf VIP
- 中国农业银行超柜业务及账户管理相关知识考试试卷.docx VIP
- 第三章第一节SOLAS公约 - 青岛远洋船员职业学院-精品课程 ....ppt VIP
- 小学田径教学教案全集.docx VIP
- 屋面防水改造及屋面防水论文.doc VIP
- 宫颈癌术后尿储留的预防性护理课件.pptx VIP
文档评论(0)