2011-01-24 36 views
10

有谁知道最广泛使用的解析算法中最弱的一族是可以解析C代码吗?也就是说,C语法LL(1),LR(0),LALR(1)等?我很好奇,因为作为一个副项目,我有兴趣为其中一个家族编写解析器生成器,并希望最终能够解析另一个项目的C代码。什么是可以解析C代码的最简单的解析算法?

+0

大多数解析器的构建方式可以识别“太多”,并且超出量会被解析器之外的其他检查拒绝。既然如此,正则表达式“[。] *”是解析C的最薄弱的解析器,虽然有很多额外的语义检查。一旦这是显而易见的,应该很清楚你可以使任何解析器生成器进程C模仿额外的黑客行为。 (编写一个分析器接受太少的分析器似乎是完全疯狂的)。 –

+0

我刚刚绊倒了这个问题。显而易见的实际答案是,“手动编码自顶向下递归”。我敢打赌,我的底部美元就是第一个C语言分析器的构建方式(早在YACC之前:)这个有趣的问题是,它有多少hackiness会超越基础? –

回答

2

看来是Bison uses an LALR(1)解析器。 LALR解析器比LL解析器更健壮,但也更复杂。由此我怀疑LALR(1)可能是解析C代码最弱的解析算法。

除非你真的设置了自己的识别器。 ANTLR可能是你最好的选择。 ANTLR使用LL *算法(实际上是LALR)。

相关问题