《Parsing Techniques》

1

作者:董成良
链接:https://www.zhihu.com/question/21515496/answer/22785299
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其实编译原理并不仅仅是用来写编译器的,还可以在许多意想不到的领域进行应用。比如,作为一名律师和玩票的码农,我就用yacc来对法律文本、案例文本这种semi-structured的文本进行自动格式分析和整理,觉得yacc好有用,比hand craft一个解析器强多了。说说我这个纯外行接近编译原理的“心路历程”:1、看到很多法律文本、法院文书虽然是自然语言文本,但是存在一定的结构性,所以想要写程序去分析、整理这种结构。2、根据自己总结的文本中发现的规则hand craft分析程序。3、发现这样写出来的东西又臭又长,而且里面有一些模式经常出现,就是一个state machine,在某种state下对应适用某个规则,而某些输入又能使state发生切换。隐约觉得应该有什么理论已经为这些模式而存在了。4、同时我又觉得这些semi-structured的文本虽然不像计算机程序一样有严整明确的规则,但是也不同于完全散文式的自然语言文本,能不能把它当做一个语法规则不太严格的程序源代码来看待?那么,用编译原理中的东东来修理它?5、在The Art of Unix Programming的一章中读到了介绍lexer和parser的一段,有一些领悟,捡起龙书看了一阵儿,把最重要的前四五章看了。6、在自己喜欢的Python语言中找到了一个lex&yacc式的工具PLY,玩熟了,用它来实现了一个自动解析符合《立法法》第54条格式法律文本的小程序。尽管简单,但是挺有用,可以把许多纯文本的法条转化为一个树状结构,这样可以很精致的展示这些法条文本。有了这个成功经验后,兴趣更大了,努力在现实世界中发现更多这种似乎与实用领域相距甚远的理论工具还能应用的领域。

2

编译原理是用来做什么的?从源语言提取需要的信息;把源语言翻译成目标语言;自动生成满足一定规范的文本…有个东西叫DSL(领域专用语言):从各种格式的数据中提取信息:XML/JSON/CSV/Excel;…各种格式文本的转换:word/markdown…生成到pdf/html/..写爬虫从HTML中抓感兴趣的内容;做网站,实现/修改模板引擎,ORM..自定义描述测试用例规范的脚本,然后自动生成测试用例…心理学实验,按一个简单规范(语法)写描述性句子,就能生成相关的场景图; xx毕业论文答谢词生成模板,这算不算呢。。;发挥想象力,能做的还有很多,如上面 @董成良 就提到用yacc解析法律文本…

作者:rainoftime
链接:https://www.zhihu.com/question/21515496/answer/36283378
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3

https://www.zhihu.com/question/21515496

如何学习 编译原理?

学习 c 语言, 不要求熟悉,至少要明白指针的思想,
学习数据结构, 尤其对 字符串/树/图 的相关基本处理手段要非常熟悉
学习离散数学,对 树,图 的相关理论要比较心中有数
学习汇编语言 , 不要求熟悉这门语言, 单至少要明白汇编指令,数据, 在cpu 和 存储器之间的交互机制
着手学习编译原理 ,推荐先从一本国内高校普遍使用的教材(如 胡元义 的 编译原理,很一般,但适合入门) 入门后(搞明白编译原理到底是要干嘛,解决什么需求) , 马上转 龙书, 此法最佳,
这里讨论的学习 包括了 编译器的前后端,
边学边做。、

编译型语言和解释性语言的区别是什么

编译经历了哪些基本过程? 每个过程主要干了什么事:
详细描述下你最熟悉的语言中,赋值符号的左边可以由哪些部分组成?右边可以由哪些部分组成?
什么是递归,如何终止一个递归?
什么事贪心过程
什么事KMP? 介绍下它的基本思想?
生成树是什么??
你觉得编程语言 和自然语言最重要的区别有哪些?
什么事有限转态自动机? 你知道几种不同的自动机类型? 他们之间的区别和联系?
内存被认为划分为哪几种不同的类型,他们之间的区别和联系?
什么事中断, cpu在响应中断是会做什么事情?
你最熟悉的语言有垃圾回收机制吗? 若有,描述他进行垃圾回收的原理, 若没有则描述你在 编写程序是是如何管理内存的?

编译原理并非随随便便就能入门的, 一定要正视这个问题, 编译原理的学习和实践通常基于对计算机编译过程,计算机基本工作原理,甚至一定的数学知识有一定积累。 这些知识分别分布并应用 在 编译原理的不同阶段,没有这些基本知识的积累,很快就会在某个阶段由于功底不够而无法继续后面的 学习。 适合(完整,前后端)学习编译原理的必要不充分条件条件是能够回答下面的所有问题, 这些问题是在太多简单,如果这都答不上来就真的别学了 。 好好补基础