使用YACC或者递归下降解析器难以实现C ++或其他OOPL的哪些特性?

时间:2013-05-17 02:33:44

标签: parsing compiler-construction

据说C ++可以使用递归下降解析器,或使用LL解析器,甚至是一些困难和LALR解析器,但这些任务需要黑客攻击和kludging。好的,那么在这些解析器类型中可以完成的OOP最类似的语法是什么,没有任何需要kludges的主要困难?每种类型的解析器都禁止哪些OOP功能?

2 个答案:

答案 0 :(得分:1)

C ++最大的问题是,在你到达分号之前,通常你无法判断某些东西是声明还是声明/表达式。它需要“无限前瞻”,你可以使用一些LL方法(通常是递归下降)。你肯定需要一个被黑客入侵的LALR方法。 (我曾经为LALR的发明者Frank DeRemer工作;他们雇用我作为一个喜欢LL帮助他们采用混合方法的人,但我最终转而与Terence Parr,PCCTS的创建者Terence Parr一起转向Java培训公司在我们真正进入之前的ANTLR)

大多数其他语言创建LALR语法并不困难; LL可以多花点心思,因为它通常无法处理左递归规则(ANTLR 3现在可以,但如果你需要优先语法,你可以使用它有一些限制)

答案 1 :(得分:0)

LL,SLR,LALR,LR,相继定义更大类的语法,即语法。

一个特征不一定是非LL,非SLR,非LALR,非LR,......

相反,我所知道的OO功能并不能分别在LL,LALR或LR语法中表达。 [这是否实际上已经在几十种语言中完成了另一个问题。]

简而言之,你的问题没有意义。