有人说,C++ 可以使用递归下降解析器、LL 解析器,甚至有些困难和 LALR 解析器来完成,但这些任务需要 hacking 和 kludging。好的,那么在没有任何需要拼凑的主要困难的情况下,每种解析器类型都可以完成最类似于 OOP 的语法是什么?每种类型的解析器都禁止哪些 OOP 功能?
问问题
107 次
2 回答
1
C++ 最大的问题是,在到达分号之前,您通常无法判断某事是声明还是语句/表达式。它需要“无限前瞻”,您可以使用一些 LL 方法(通常是递归下降)来做到这一点。你肯定需要一个被黑的 LALR 方法。(我曾经为 LALR 的发明者 Frank DeRemer 工作;他们聘请我作为一个喜欢 LL 来帮助他们采用混合方法的人,但我最终转向了一家 Java 培训公司,与 PCCTS/ 的创建者 Terence Parr 一起工作。 ANTLR 在我们真正开始之前)
大多数其他语言确实并不难创建 LALR 语法。LL 可以多花点心思,因为它通常不能处理左递归规则(ANTLR 3 现在可以,但是如果你需要优先文法,如何使用它有一些限制)
于 2013-05-17T03:17:12.950 回答
0
LL、SLR、LALR、LR,依次定义更大的文法类,即句法。
一个特性不必是面向对象的,也可以是非 LL、非 SLR、非 LALR、非 LR,...
相反,我知道没有 OO 特性不能分别用 LL、LALR 或 LR 语法表达。[这是否实际上已经在相关的几十种语言中完成是另一个问题。]
总之你的问题没有意义。
于 2013-05-17T03:22:15.313 回答