就像之前的博客文章所说的,(主要还是)因为GacUI的原因,我决定开发一个更好的可配置轻量级语法分析器来代替之前的落后的版本。在说这个文章之前,我还是想在此向大家推荐一本《编程语言实现模式》,这的确是一本好书,让我相见恨晚。 其实说到开发语法分析器,我从2007年就已经开始在思考类似的问题 ...
上一篇博客讲到了构造符号表的事情。构造完符号表之后,就要进入语义分析的后一个阶段了:构造状态机。跟我以前写的如何实现正则表达式引擎的两篇文章讲的一样,自动机先从Epsilon Nondeterministic Automaton开始,然后一步一步构造成Deterministic Automaton。但是语法分析和正则表达式有很大不同,那么这个自动机是什么样子的呢 对学术感兴趣的人可以去wiki一下 ...
2012-12-07 16:44 3 4242 推荐指数:
就像之前的博客文章所说的,(主要还是)因为GacUI的原因,我决定开发一个更好的可配置轻量级语法分析器来代替之前的落后的版本。在说这个文章之前,我还是想在此向大家推荐一本《编程语言实现模式》,这的确是一本好书,让我相见恨晚。 其实说到开发语法分析器,我从2007年就已经开始在思考类似的问题 ...
上一篇博客讲到了构造语法树的问题。有朋友在留言问我,为什么一定要让语法分析器产生语法树,而不是让用户自己决定要怎么办呢?在这里我先解答这个问题。 1、大部分情况下都是真的需要有语法树 2、如果要直接返回计算结果之类的事情的话,只需要写一个visitor运行一下语法树就好了,除去自动生成的代码以外 ...
下推自动机 下推自动机有一个七元组定义: 下面给出一个例子: PDA的状态迁移图 PDA的瞬时描述 一个PDA的瞬时描述对应于一个三元组。 PDA瞬时描述的迁移: PDA瞬时描述迁移的定理: 下推自动机接受的语言 以终结状态 ...
Lex/Yacc 它生于Unix,是最经典的词法\语法分析器,是经典教材中的示例御用工具。现在它也支持在Windows上生成(安装环境),然而其所生成语法分析器的语言仅有C语言。 Flex/Bison 与前者类似,Bison与Yacc ...
项目的完整代码在 C2j-Compiler 通过上一篇对几个构造自动机的基础数据结构的描述,现在就可以正式来构造有限状态自动机 我们先用一个小一点的语法推导式来描述这个过程 初始化 状态0是状态机的初始状态,它包含着语法表达式中的起始表达式,也就是编号为0的表达式 ...
项目的完整代码在 C2j-Compiler 前言 在上一篇,已经成功的构建了有限状态自动机,但是这个自动机还存在两个问题: 无法处理shift/reduce矛盾 状态节点太多,导致自动机过大,效率较低 这一节就要解决这两个问题 shift/reduce矛盾 看上 ...
2型文法的处理装置——下推自动机(PDA) 正则文法处理不了括号对,但是上下文无关文法可以表示出来。上下文无关文法是强于正则文法的。下推自动机的能力是强于有限自动机的 下推自动机相对于有限自动机 它就是多了一个 栈 。其他都一样(输入串,状态) 状态机(PDA)在对输入串做读入操作 ...
编译程序中语法分析器接受以单词为单位的输入,并产生有关信息供以后各阶段使用。算符优先法、LR分析法和递归下降法是几种常见的语法分析技术。LR分析法主要有SLR(1)、LR(0)、LR(1)和LALR(1)等4种,其中LR(1)的分析能力最强,LR(0)的分析能力最弱。 ...