Regular expressions in lexing and parsing(翻译)
词法分析和语法分析中的正则表达式
(英文原文来自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(翻译)相关推荐
- 《D o C P》学习笔记(3 - 1)Regular Expressions, other languages and interpreters - Lesson 3
备注1:每个视频的英文字幕,都翻译成中文,太消耗时间了,为了加快学习进度,我将暂停这个工作,仅对英文字幕做少量注释. 备注2:将.flv视频文件与Subtitles文件夹中的.srt字幕文件放到同1个 ...
- Coursera课程Python for everyone:Quiz: Regular Expressions
Quiz: Regular Expressions 10 试题 1. Which of the following best describes "Regular Expressions&q ...
- 正则表达式(Regular Expressions)
正则表达式(Regular Expressions) 正则表达式在其他编程语言中的应用非常广泛,网上资料也非常多,而网上在ABAP语言中应用的资料却很少,尽管各语言中正则表达式语法知识都很类似,但仍然 ...
- .NET Regular Expressions
HTML去空白回车换行 private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s*", RegexOpt ...
- 8 Regular Expressions You Should Know
2019独角兽企业重金招聘Python工程师标准>>> Regular expressions are a language of their own. When you learn ...
- Optimizing regular expressions in Java
2019独角兽企业重金招聘Python工程师标准>>> SRC URL:http://www.javaworld.com/article/2077757/core-java/opti ...
- 《D o C P》学习笔记(3 - 0)Regular Expressions, other languages and interpreters - 简介
Regular Expressions, other languages and interpreters 你可以学到什么: 定义正则表达式的语言:解释这个语言. 定义被1个正则表达式匹配的字符串集合 ...
- UltraEdit正则表达式使用(Regular Expressions in UltraEdit)
正则表达式作为模式匹配,经常用于查找/替换操作的特定字符串.使用正则表达式来简化操作和提高效率的方式有许多.下面列出了一个用于ultra - edit样式和unix样式正则表达式的参考以及一些示例,演 ...
- 斯坦福大学Dan Jurafsky主讲NLP笔记 2.1 Regular Expressions
2.1 regular expressions 正则表达式 2.1.1 问题的提出 在英语中,有大小写和单复数的问题,例如: woodchuck woodchucks Woodch ...
最新文章
- 被快乐×××的许晴-----平淡的生活中寻找快乐
- j-link接口定义及实际使用
- Android-Xml绘图
- Image Pro Plus测量组织平均厚度
- 基于Schema配置的AOP
- Centos7 安装mongodb记录
- 写代码?程序猿?你不能不懂的八大排序算法的Python实现
- Linux内核workqueue
- 资源监视工具 Glances
- (01)数据库及相关
- 磁盘阵列 RAID 技术原理详解
- Beta版本展示博客
- html预览pdf上的电子印章,移动端pdf预览-水印电子签章问题
- 今日头条笔试题 数列
- java j2se下载_J2SE基础之下载eclipse并创建项目
- 计算机类的言情小说,推荐5本女主占有欲超强的言情小说,多汁多肉,本本都戳动你心!...
- 软件开发实训(720科技)――第五课:前端css规范
- 【论文】Deep Pyramidal Residual Networks(译)
- 计算机改考408的学校,2020考研 河北工业大学计算机改考408
- C#中的特性,什么是特性.
热门文章
- context:component-scan扫描使用上的容易忽略的use-default-filters
- Rock8247 bsp-Tornado-VXWorks Build up
- [Aaronyang] 写给自己的WPF4.5 笔记17[Page实现页面导航]
- web-attack 1-5视频汇总
- vscode php插件_vscode+phpstudy+xdebug无法断点(踩坑记)
- gson读取json字符串_Java:JSON(Gson)从JSON字符串获取值
- Vue学习之ref属性
- CentOS 7本地镜像部署NFS服务
- Cisco服务器怎么安装系统,CISCO服务器Linux系统安装步骤
- php apache很慢,Apache 服务器 首次访问特别慢的解决过程,php环境