(lex一个词法分析器的生成器翻译版.docxVIP

(lex一个词法分析器的生成器翻译版.docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(lex一个词法分析器的生成器翻译版

Lex-词法分析器生成器(M.E.Lesk,E.Schmidt著,中文翻译)Lex - 词法分析器生成器 M. E. Lesk 与 E. SchmidtBell LaboratoriesMurray Hill, New Jersey 07974 翻译:寒蝉退士译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担 任何责任和义务。原文:/7thEdMan/vol2/lex摘要 Lex 帮助书写其控制流由在输入流中的正则表达式的实例来导向的程序。它适合于编辑器脚本类型的变换,和为解析例程做准备工作而分解输入。Lex 源码是正则表达式和相应的程序片段的表格。Lex 把这个表格变换成读取输入流、复制它到输出流、并把输入划分到匹配给定表达式的字符串中的一个程序。随着每个这种字符串被识别出来,相应的程序片段就被执 行。表达式通过用 Lex 生成的确定有限自动机来识别。用户书写的程序片段按照对应的正则表达式在输入流中出现的次序来执行。 用 Lex 写成的词法分析程序接受有歧义的规定,并在每个输入点上选择最长的匹配可能。如果需要,在输入上进行实质的超前查看(lookahead),但输入流会被 回退(backup)到当前划分的结束处,所以用户有操纵它的普遍自由。 Lex 可以生成用 C 语言或 Ratfor 语言写的分析器,Ratfor 可以自动的转换成可移植的 Fortran。它可以在 PDP-11 UNIX、 Honeywell GCOS 和 IBM OS 系统上得到。本手册只讨论在 UNIX 系统上的生成 C 语言的分析器,这是在 UNIX 第 7 版中唯一支持的 Lex 形式。设计 Lex 时简化了与编译器的编译系统 Yacc 的交接。 July 21, 1975 目录1.? 介 绍2.? Lex 源码3.? Lex 正则表达式4.? Lex 动作5.? 歧 义源规则6.? Lex 源定义7.? 用 法8.? Lex 与 Yacc9.? 例 子10. 左 上下文敏感11. 字符集12. 源格式总结13. 告诫和缺陷14. 致 谢15. 引 用1. 介绍 Lex 是设计用于字符输入流的词法处理的一个程序生成器。它接受高级的、面向问题的对字符串匹配的规定,并生成识别正则表达式的通用语言写的一个程序。正则表达式在用户给 Lex 的源规定中指定。Lex写出的代码识别在输入流中的这些表达式,并把输入流划分到匹配这些表达式的字符串中。在字符串间的分界上执行用户提供的程序片段。Lex源文件对正则表达式关联上程序片段。随着每个表达式出现在给 Lex 写出的程序的输入中,相应的程序片段就被执行。用户提供超出表达式所需要的额外代码来完成他的任务,可能包括用其他生成器写出的代码。生成的识别表达式的程序采用用户的程序片段所采用的通用编程语言。因此,提供了高级表达式语言来写要被匹配的字符串表达式,而用户写动作的自由不受侵犯。这避 免了强制希望使用字符串操纵语言做输入分析的用户、去使用同样的并且经常不适合字符串处理的语言来书写处理程序。 Lex不是完整的语言,而是体现了可增加到叫做“宿主语言”的不同编程语言中的新语言特征的一个生成器。正如同通用语言可以生成在不同计算机硬件上运行的代 码,Lex可以写出不同宿主语言的代码。宿主语言被用于Lex生成的输出代码和用户增加的程序片段。还为不同的宿主语言提供兼容的运行时间库。这使 Lex 适应不同的环境和不同的用户。每个应用都可以被定向到适合这个任务的硬件和宿主语言、用户背景和本地实现性质的各种组合上。目前唯一支持的宿主语言是 C,尽管过去曾经支持过 Fortran(Ratfor [2]形式)。Lex 自身存在于UNIX、GCOS 和 OS/370;但 Lex 生成的代码可以采用于存在适当的编译器的任何地方。 Lex 把用户的表达式和动作(在本文中叫做源码)转换成宿主通用语言;生成的程序叫做 yylex。yylex 程序将识别在流(在本文中叫做输入)中的表达式,并在检测到的时候执行给每个表达式的动作。参见图 1。 +-------+源码 - | Lex | - yylex +-------+ +-------+输入 - | yylex | - 输出 +-------+Lex 概述图 1作为一个平凡的例子,考虑从输入中删除所有行结束处的空白或 tab 的程序。 %%[ \t]+$ ;就是所需要的。这个程序包含标记规则开始的一个 %% 分界符和一个规则。这个规则包含匹配在行结束处之前的空白或tab(按照 C 语言约定写为 \t)字符的一个或多个实例的一个正则表达式。方括号指示由空白和 tab 构成的字符类;同于 QED,+ 指示“一或多个”;而 $ 指示“行结束”。没有指定动作,所以 Lex 生

文档评论(0)

popo786 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档