2010-11-23 67 views
0

我需要手動編寫解析器。無法選擇LL(*)和LR(可能試試Earley?)。我是否應該使用自下而上的解析方式,因爲LL的語法會比較困難?書寫手動解析器

+2

它很大程度上取決於您嘗試分析哪種語言。沒有關於你的申請的更多信息,就不可能提供任何合理的建議。您可能還想看看「相關」問題(向下滾動並查看右側)。這裏有很多關於解析的問題,還有很多很好的討論。 – 2010-11-23 21:02:52

+0

你爲什麼需要*手動編寫解析器?這通常沒有太多的價值。 – 2010-11-23 21:43:00

+0

我不能使用yacc或其他解析器,我的解析器將在其中工作 – mystdeim 2010-11-24 10:47:08

回答

0

這取決於您嘗試使用的語法。 LL在語法上存在一些不確定性的麻煩(你不得不使所有的東西都是左遞歸)。

如果您不能決定,請使用LR(1)或LALR。甚至可能是GLR。

0

嘗試XText。這是給你的。快速簡單地創建語言,解析器和編輯器

0

手動編寫的最簡單的解析器類型是遞歸下降解析器,該解析器位於LL解析器系列中。大多數其他類型的解析器都很難手工編寫(LALR解析器,它使用大型狀態轉換表),或者用於解析複雜語言(例如用於解析自然語言的Earley解析器)。

wikipedia有關於遞歸下降解析的一些很好的信息。

2

我會用遞歸下降解析器或者可能是尾遞歸下降解析器(即LL)或自頂向下運算符優先解析器。

解析器的LR族,無論是LR,LALR(k),LALR(1),GLR還是別的都太過「怪異」了。如果你試圖編寫其中的一個,你通常最終會實現一個解析器生成器,無論如何,只是爲了保持理智。