lex和yacc和parsergenerator和vs2008.doc_第1页
lex和yacc和parsergenerator和vs2008.doc_第2页
lex和yacc和parsergenerator和vs2008.doc_第3页
全文预览已结束

下载本文档

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

文档简介

lex和yacc和parser generator和vs2008 2010-12-30 10:48先认识一些概念,没办法每块知识领域都有一堆专用名词和麻烦的理论,白话解释如下Lex : 词法分析器 Lexical Analyzar , 简单说就是用正则表达式来识别 Token 的.Yacc : 语法分析器 Yet Another Compiler Compiler , 用来识别语义.形式语法 : 或正规语法 formal grammar , 其实就是很标准的语言,非咱们的口头用语.Token : 包括 keyword/identifier/integer/. 好多类型,简单理解就是单词.lex正则表达式 : lex 用的是有点过时的无回溯的简单正则表达式语法,抄来的规则见下表.BNF : 巴克斯范式 Backus-Naur Form : 是描述语言的形式化的数学方法,是描述法.parser generator :这是一个集成lex&yacc并且提供了好多支持的集成开发环境.首先介绍 lexlex 大约是这么个东西 : 我们写好规则后由lex编译生成词法分析器的源代码(c/c+/java/.都行),然后再把源代码编译成执行程序.这个规则叫lex语言(lex language).lex语言 : 分为三节,分别是声明节(Declarations Section),规则节(Rules Section),代码节(Programs Section)声明节 : 你可以包含头文件,声明函数,定义变量,定义类,声明正则表达式等,好了详细规则太多了规则节 : 主要有正则表达式识别规则(expression rules)和分组规则(group rules)代码节 : 就是代码实现 c/c+/java/. 视情况添加然后是 yaccyacc 大约是这么个东西 : 词法分析完毕后需要识别语义,比如计算一个表达式,当lex用规则解析出好多Tokens后,就把这些 Tokens 送给 yacc , 由 yacc 来确认等价的操作.yacc 语法 : 同样分为 声明节/规则节/代码节 三个节声明节 : (待补)规则节 : (待补)代码节 : (待补)然后是 parser generatorparser generator 集成了 lex yacc 和其它几个小工具,非常简陋,不过提供了c/c+/java支持和一些类库,已经极大地方便了我们的使用,这个东西的安装还有点麻烦1 : 首先到下载它2 : 然后安装,安装好了后工具菜单里有个注册,注册成学术版本(不注册好像不能编译类库)3 : 然后不支持 vs2005/vs2008 我的是 D版的 vs2008 所以就针对它修改了.4 : 打开 Parser Generator 2/Cpp/Script/msvc32.lbs 进行一番修改,详见附件 , 就是添加 vs2008 的编译参数和去掉一些警告附件在这:/5 : 需要把一系列 *.c 的文件名改为 *.cpp , 好像是cl识别文件类型时出错了(网上抄的)6 : 菜单 project/libbuildr 里 就可以找到 visual studio 2008 了,设置好后开始 build,单线程的运行库就不必选了,vs2005开始时就不支持了然后是动手抄一个例子Parser Generator 2/Cpp/Examples/class是一个c+解析表达式的例子,就它了,为了体现出我的参与,把标准输入改为从文件输入,另外还需要进行一些小小改造(见附件)然后写一个makefile作为一个懒惰的程序员,写makefile是必须的最后运行测试之新建一个文件test.txt写入测试的表达式,然后nmake/test,一切正常.lex正则表达式|=|=|字符 | 含义 |-|-|A-Z | |0-9 | 构成了部分模式的字符和数字. |a-z | |-|-|. | 匹配任意字符,除了 n. |-|-|- | 用来指定范围.例如:A-Z 指从 A 到 Z 之间的所有字符. |-|-| | 一个字符集合.匹配括号内的 任意 字符.如果第一个字符是 那么它表示否定模式. | | 例如: abC 匹配 a, b, 和 C中的任何一个. |-|-|* | 匹配 0个或者多个上述的模式 |-|-|+ | 匹配 1个或者多个上述模式 |-|-|? | 匹配 0个或1个上述模式 |-|-|$ | 作为模式的最后一个字符匹配一行的结尾. |-|-| | 指出一个模式可能出现的次数. 例如: A1,3 表示 A 可能出现1次或3次. |-|-| | 用来转义元字符.同样用来覆盖字符在此表中定义的特殊意义,只取字符的本意. |-|-| | 否定. |-|-| | 表达式间的逻辑或. |-|-| 字符的字面含义.元字符具有. |-|-|/

温馨提示

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

评论

0/150

提交评论