lex-yacc使用说明.ppt_第1页
lex-yacc使用说明.ppt_第2页
lex-yacc使用说明.ppt_第3页
lex-yacc使用说明.ppt_第4页
lex-yacc使用说明.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

2020 3 14 1 Lex软件的使用 编译原理实践课之一 2020 3 14 2 Lex与Yacc介绍 Lex代表LexicalAnalyzar Yacc代表YetAnotherCompilerCompiler Lex和Yacc是UNIX两个非常重要的 功能强大的工具 事实上 如果你熟练掌握Lex和Yacc的话 它们的强大功能使创建FORTRAN和C的编译器很简单 2020 3 14 3 Lex Lex是一种用来构造词法分析器的工具 它本身也可以称为一个编译器 Lex读入词法分析器的规格说明 根据此说明 生成一个用c语言描述的词法分析器 把描述词法分析器的规格说明的语言称为Lex语言或词法分析器设计语言 用Lex语言书写的词法分析器规格说明称为Lex源文件 实用程序Lex把Lex源程序翻译成用c语言描述的目标程序 所以通常也称为Lex编译器 2020 3 14 4 Lex工作原理 一种匹配的常规表达式可能会包含相关的动作 这一动作可能还包括返回一个标记 当Lex接收到文件或文本形式的输入时 它试图将文本与常规表达式进行匹配 它一次读入一个输入字符 直到找到一个匹配的模式 如果能够找到一个匹配的模式 Lex就执行相关的动作 可能包括返回一个标记 另一方面 如果没有可以匹配的常规表达式 将会停止进一步的处理 Lex将显示一个错误消息 2020 3 14 5 Lex和C的关系 Lex和C是强耦合的 一个 lex文件 Lex文件具有 lex的扩展名 通过lex公用程序来传递 并生成C的输出文件 这些文件被编译为词法分析器的可执行版本 2020 3 14 6 Lex编程 Lex编程可以分为三步 以Lex可以理解的格式指定模式相关的动作 在这一文件上运行Lex 生成扫描器的C代码 编译和链接C代码 生成可执行的扫描器 注意 如果扫描器是用Yacc开发的解析器的一部分 只需要进行第一步和第二步 2020 3 14 7 Lex程序 说明部分 翻译规则 辅助过程课本64 65页 2020 3 14 8 Lex程序 一个Lex程序分为三个段 第一段是C和Lex的全局声明 第二段包括模式 C代码 第三段是补充的C函数 第三段中一般都有main 函数 这些段以 来分界 下面是一个字数统计的程序 2020 3 14 9 程序不同段的构成 C和Lex的全局声明这一段中我们可以增加C变量声明 为字数统计程序声明一个整型变量 来保存程序统计出来的字数 我们还将进行Lex的标记声明 2020 3 14 10 字数统计程序的声明 intwc 0 wordcount 两个百分号标记指出了Lex程序中这一段的结束和三段中第二段的开始 2020 3 14 11 Lex的模式匹配规则让我们看一下Lex描述我们所要匹配的标记的规则 我们将使用C来定义标记匹配后的动作 继续看我们的字数统计程序 下面是标记匹配的规则 2020 3 14 12 字数统计程序中的Lex规则 a zA Z wc n gobbleup 2020 3 14 13 C代码Lex编程的第三段 也就是最后一段覆盖了C的函数声明 有时是主函数 注意这一段必须包括yywrap 函数 Lex有一套可供使用的函数和变量 其中之一就是yywrap 一般来说 yywrap 的定义如下例 字数统计程序的C代码段 2020 3 14 14 intmain void intn yylex returnn intyywrap void printf wordcount d n wc return1 2020 3 14 15 ParserGenerator Version0 60 BetaRelease Copyright C 1997 98P D Stearns 2020 3 14 16 AboutParserGenerator ParserGeneratorisaWindowsbasedYACCandLexIDE ItisaSharewareprogramandcanbefreelydistributedprovidingitisdonesoinitsentirety ItincludestwocustomversionsofYACCandLexcalledAYACCandALexrespectively 2020 3 14 17 Features BelowaresomeofthefeaturesthatareprovidedbyParserGenerator 1 Projectmanagementfacility 2 Projectrebuildmechanism includingOutputwindowanderrormappingtosourcefiles 3 FulleditorincludingYACCandLexsyntaxcolouring 4 YACCcangenerateLALR 1 CLR 1 andSLR 1 parsers 5 CandC codegeneration 6 Lexcandealsuccessfullywiththe 0 character 2020 3 14 18 Features 7 ALibrarynowholdsmostofthetabledrivingcode 8 YACCandLexcangenerateeitherfastorcompactparsers lexicalanalysers 9 YACCandLexcangeneratemultipleparsers lexicalanalysersforinclusioninasingleexecutable 10 Parserscannowperformcleanupduringerrorrecovery Whenanonterminalispoppedoffofthestack anactioncanbecalled Thisisusefulifsayyouarebuildinganodetree 2020 3 14 19 ParserGenerator的使用 DirectorySettingsProjectSettings 2020 3 14 20 DirectorySettings 在MicrosoftVisualC Version6 00 进行设置 只需设置一次 2020 3 14 21 目录设置 2020 3 14 22 目录设置 2020 3 14 23 目录设置 2020 3 14 24 目录设置 2020 3 14 25 DirectorySettings 设置完成后 VisualC 就可以找到需要被包含的yacc h和lex h文件 还有YACC和Lex的库文件 2020 3 14 26 ProjectSettings 创建的每一个工程里 都要进行设置 工程也要包含一个ParserGenerator创建的文件 比如 你正在编译一个YACC文件 myfile y 这个工程里就必须包含 myfile c 或者 myfile cpp 文件 2020 3 14 27 2020 3 14 28 2020 3 14 29 2020 3 14 30 2020 3 14 31 ProjectSettings DebugSingle Threadedyld libConsoleApplicationsDebugMultithreadedylmtd libWindowsapplicationsDebugMultithreadedDLLylmtdlld libMFC yyin yyout yyerr yydout都初始化为NULL 可以用yyi

温馨提示

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

评论

0/150

提交评论