2012-12-13 51 views
3

我需要解析一種類似於Java最小化版本的語言。由於效率是我選擇手寫解析器而不是像GOLD,bison和yacc這樣的LRAR解析器生成器的最重要因素。C++解析代碼(手寫)

但我無法找到好的手寫解析器背後的理論。似乎只有那些生成器的教程和它背後的機制。

是否必須使用正則表達式刪除?因爲我可以進行成像,與手寫的東西相比,它們很慢。

有沒有人知道一個好的類或手寫解析教程?

+0

*編譯*正則表達式(例如,並行FSM)通常比手寫LL(n)更快。儘管我建議使用無詞法分析來代替。手寫PEG(用於表達式的Pratt解析)可以非常快,您仍然可以使用一些更高級別的模板來生成高效的代碼。閱讀關於PEG的更多信息,可能在Packrat解析和Pratt上,這應該超過理論。 –

+0

P.S.,LLVM的Kaleidoscope教程包含一個簡單的手寫解析器,它反過來反映了更復雜的LLVM和Clang解析方法(這是非常有效的)。 –

+0

老實說,只需簡單的方法,然後進行基準測試。至少你會有一個功能上正確的原型比較,如果你確實需要手動編碼的東西。 _因爲我可以想象它們很慢_並不是從頭開始寫這個複雜東西的好理由。 – Useless

回答

0

如果有幫助,這裏是(不是類或教程,但是)手寫解析器的示例:https://github.com/tabatkins/css-parser(但是它明確地編碼爲正確/簡單對應於規範,而不是爲高優化性能)。

我認爲,更大的問題是開發解析規範。解析器規範的示例包括http://dev.w3.org/csswg/css3-syntax/以及用於解析HTML5的解析器規範。

使用解析器生成器的先決條件是語言語法已由語法(語法格式由解析器生成器支持)定義,而不是由解析算法定義。