2011-01-24 64 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)。

相關問題