词法分析和语法分析中的正则表达式

(英文原文来自rob pike 的博客 https://commandcenter.blogspot.jp/2011/08/regular-expressions-in-lexing-and.html)

从代码审查中提取的注释。我被要求更广泛传播他们。

我应该讲一些关于词法分析和语法分析中的正则表达式。正则表达式很难写,很难写好,而且相对于其他技术来说可能是昂贵的。(即使当它们在N*M时间内被正确实现,它们有显著的开销,特别是如果它们必须捕获输出)。词法分析器,另一方面,很容易地正确写(如果不是紧凑的),并且非常容易测试。考虑找字母数字标识符。写这个正则表达式不太难(像”[a-zA-Z][a-zA-Z_0-9]*”),但是写作一个简单的循环真的不难。然而,循环的性能将会更高,并且涵盖的代码要少得多。正则表达式库是一个大东西。使用一个解析标识符就像使用一辆麦克卡车去商店买牛奶。并且当我们要调整我们的lexer来允许其他字符类型,如Unicode标识符,并规范化出来,等等,手写循环可以很容易地处理,但正则表达式的方法就会有问题。

类似的论点也适用于语法分析。使用正则表达式来探索解析状态以找到前向的方法是昂贵的,过度的,容易出错的。标准的词法分析、语法分析很容易编写,因此一般而言,适应性很强,没有理由使用正则表达式。他们还导致更快、更安全、更紧凑的实现。

以另一种方式来看,词法分析和语法分析是匹配静态定义的模式,但是正则表达式的特长是提供一种动态表达模式的方式。他们在文本编辑器和搜索工具中非常出色,但是,当你在编译时就知道所有要查找的内容时,正则表达式提供了远远比你需要的更多的通用性和灵活性。

最后,关于写好(write well)这一点上。根据我的经验,正则表达式是被广泛误解和滥用的。当我做涉及正则表达式的代码审查时,我修改了大量的在代码中的正则表达式部分,远高于做正常语句的审查。这是一个误用的标志:大多数程序员(没有手指指向这里,只是观察一般性)只是不知道它们是什么或如何正确使用它们。鼓励将正则表达式作为所有文本处理问题的灵丹妙药,不仅是懒惰而且差的工程,而且强化了不应该使用它们的人使用正则表达式。

所以不要用正则表达式来编写词法分析器和语法分析器作为起点。你的代码将更快,更干净,更容易理解和维护。

转载于:https://www.cnblogs.com/majianguo/p/6815232.html

Regular expressions in lexing and parsing(翻译)相关推荐

  1. 《D o C P》学习笔记(3 - 1)Regular Expressions, other languages and interpreters - Lesson 3

    备注1:每个视频的英文字幕,都翻译成中文,太消耗时间了,为了加快学习进度,我将暂停这个工作,仅对英文字幕做少量注释. 备注2:将.flv视频文件与Subtitles文件夹中的.srt字幕文件放到同1个 ...

  2. Coursera课程Python for everyone:Quiz: Regular Expressions

    Quiz: Regular Expressions 10 试题 1. Which of the following best describes "Regular Expressions&q ...

  3. 正则表达式(Regular Expressions)

    正则表达式(Regular Expressions) 正则表达式在其他编程语言中的应用非常广泛,网上资料也非常多,而网上在ABAP语言中应用的资料却很少,尽管各语言中正则表达式语法知识都很类似,但仍然 ...

  4. .NET Regular Expressions

    HTML去空白回车换行 private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s*", RegexOpt ...

  5. 8 Regular Expressions You Should Know

    2019独角兽企业重金招聘Python工程师标准>>> Regular expressions are a language of their own. When you learn ...

  6. Optimizing regular expressions in Java

    2019独角兽企业重金招聘Python工程师标准>>> SRC URL:http://www.javaworld.com/article/2077757/core-java/opti ...

  7. 《D o C P》学习笔记(3 - 0)Regular Expressions, other languages and interpreters - 简介

    Regular Expressions, other languages and interpreters 你可以学到什么: 定义正则表达式的语言:解释这个语言. 定义被1个正则表达式匹配的字符串集合 ...

  8. UltraEdit正则表达式使用(Regular Expressions in UltraEdit)

    正则表达式作为模式匹配,经常用于查找/替换操作的特定字符串.使用正则表达式来简化操作和提高效率的方式有许多.下面列出了一个用于ultra - edit样式和unix样式正则表达式的参考以及一些示例,演 ...

  9. 斯坦福大学Dan Jurafsky主讲NLP笔记 2.1 Regular Expressions

    2.1 regular expressions 正则表达式 2.1.1 问题的提出 在英语中,有大小写和单复数的问题,例如: woodchuck      woodchucks      Woodch ...

最新文章

  1. 被快乐×××的许晴-----平淡的生活中寻找快乐
  2. j-link接口定义及实际使用
  3. Android-Xml绘图
  4. Image Pro Plus测量组织平均厚度
  5. 基于Schema配置的AOP
  6. Centos7 安装mongodb记录
  7. 写代码?程序猿?你不能不懂的八大排序算法的Python实现
  8. Linux内核workqueue
  9. 资源监视工具 Glances
  10. (01)数据库及相关
  11. 磁盘阵列 RAID 技术原理详解
  12. Beta版本展示博客
  13. html预览pdf上的电子印章,移动端pdf预览-水印电子签章问题
  14. 今日头条笔试题 数列
  15. java j2se下载_J2SE基础之下载eclipse并创建项目
  16. 计算机类的言情小说,推荐5本女主占有欲超强的言情小说,多汁多肉,本本都戳动你心!...
  17. 软件开发实训(720科技)――第五课:前端css规范
  18. 【论文】Deep Pyramidal Residual Networks(译)
  19. 计算机改考408的学校,2020考研 河北工业大学计算机改考408
  20. C#中的特性,什么是特性.

热门文章

  1. context:component-scan扫描使用上的容易忽略的use-default-filters
  2. Rock8247 bsp-Tornado-VXWorks Build up
  3. [Aaronyang] 写给自己的WPF4.5 笔记17[Page实现页面导航]
  4. web-attack 1-5视频汇总
  5. vscode php插件_vscode+phpstudy+xdebug无法断点(踩坑记)
  6. gson读取json字符串_Java:JSON(Gson)从JSON字符串获取值
  7. Vue学习之ref属性
  8. CentOS 7本地镜像部署NFS服务
  9. Cisco服务器怎么安装系统,CISCO服务器Linux系统安装步骤
  10. php apache很慢,Apache 服务器 首次访问特别慢的解决过程,php环境