编译原理重点1.ppt_第1页
编译原理重点1.ppt_第2页
编译原理重点1.ppt_第3页
编译原理重点1.ppt_第4页
编译原理重点1.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理上机实习实验二LEX 要点 1 了解LEX2 利用LEX构造词法分析程序 编译原理 一LEX简介 LEX是一个词法分析生成工具 LexicalAnalyzerGenerator 输入正规表达式 输出识别该正规表达式的词法分析程序LEX不是一种完整的语言 而是某种高级语言 称为lex的宿主语言 的扩充 借助其宿主语言来描述动作 即识别出某个单词后 应该执行何种操作 LEX源程序 LEX工具 yylex输入符号串 yylex 单词符号串5 LEX的源程序扩展名习惯为 l 宿主语言为C语言时 LEX将生成的词法分析程序输出到lex yy c文件中 LEX例子 1 a z printf c yytext 0 A a 说明 1 是分界符 表示识别规则的开始 2 第二行是识别规则 可分成两部分 用空格隔开 规则左边是正规式 右边是识别出正规式后所采取的动作 3 没有匹配上的正规式 按照原样输出单词 LEX工作原理 LEX的工作原理 是将源程序中的正规式 转换成相应的确定的有限自动机 而相应的动作 则插入到yylex中适当的地方 控制流由该确定有限自动机的解释器掌握 二源程序的格式 辅助定义部分 识别规则部分 用户子程序部分 说明 1 表示不是必须有的部分 2 第一个 是必须的 用户子程序部分没有时 第二个 是可省略的 最简单的合法LEX源程序只有 按照原样输出符号串 3 识别规则是LEX源程序的核心 可以有很多条规则 每条规则的格式为 正规式空格识别出正规式时所执行的动作 LEX例子 2 integerprintf int a z printf s yytext 1 6 7 9 t n 三lex用的正规式 1 一个正规式表示一个字符串的集合 由正文字符和运算符组成 如 ab ab 2 LEX中的正规式运算符有16种 上述运算符需要作为正文字符出现时 借助 或者 如 abc 或者abc 三lex用的正规式 续1 A Z 0 9 a z构成了部分模式的字符和数字 匹配任意字符 除了 n 用来指定范围 例如 A Z指从A到Z之间的所有字符 一个字符集合 匹配括号内的任意字符 如果第一个字符是 那么它表示否定模式 例如 abC 匹配a b 和C中的任何一个 abC 则表示 三lex用的正规式 续2 正规式举例 joke rs 匹配jokes或joker A 1 2 shis 匹配AAshis Ashis AAshi Ashi A b e 匹配在A出现位置后跟随的从b到e的所有字符中的某1个 识别规则的二义性 识别规则中 可能有多条规则与同一个字符串匹配 LEX的处理原则是 能匹配最多字符的规则优先 在能匹配相同数目的字符的规则中 先给出的规则优先 intkeywordaction a z identifieraction 若输入ints若输入int LEX中的yytext yyleng和一些函数 1 系统自定义的外部字符数组yytext 其内容是当前被某规则匹配的字符串 yytext 0 外部变量yyleng表示当前yytext中字符的个数 2 一些函数 如 yymore 下一次匹配的字符串添加在当前yytext的后面 yyless n 将当前yytext中末尾yyleng n个字符退回到输入串中yywrap LEX处理到输入串结尾时 自动调用yywrap 返回值为1 表示对输入的处理完全结束 为0则表示有新的输入串等待处理 LEX自动提供一个yywrap 返回值为1 也可以自定义该函数 完成分析结束后的一些工作 四LEX辅助定义部分 1 第一个 之前 可定义辅助部分 如用一个名字表示一个复杂的正规式 辅助定义必须从第一列开始写 如 D 0 9 IDENT a zA Z a zA Z0 9 则在识别规则中 可以这样使用 D 动作 IDENT 动作 四LEX辅助定义部分 2 辅助定义还可以包含头文件 全局变量的定义 以及宏定义等 辅助定义的内容被照抄到lex yy c中 1 以一个空格或tab起头的行 若不是识别规则的一部分 则被照抄到lex yy c中 若该定义在第一个 前 则该定义是全局的 若紧接在第一个 之后 但是在所有识别规则之前 则是局部的 注意 须符合C语言语法 四LEX辅助定义部分 3 2 介于 和 之间的字符 无论出现在哪里 都照抄到lex yy c中 和 各自占一行 include include defineD0intnumber 0 四LEX辅助定义部分 4 3 第二个 后的任何内容 全部照抄到lex yy c中 包括yywrap 默认的yywrap函数体代码为 return1 五LEX例子 将输入串中所有能被7整除的整数加上3输出 其余部分按照原样输出 注意局部变量k的定义 intk 0 9 sscanf yytext d 六如何在unix中使用LEX 1 写好LEX源程序 源程序扩展名为 l如source l2 执行lex命令 得到lex yy c在命令终端 执行lexsource l3 执行cc命令 得到可执行文件a out在命令终端 执行cclex yy c ll4 运行可执行文件a out 测试你的程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论