2013-10-04 37 views
2

爲了在.NET中構建一個類似Slim的模板語言(用於ASP)的解析器,哪種語言更適合C#或F#? (對我來說,F#似乎更科學和適合此類任務..)C#或F#解析Slim-like indentation-conscious languages?

除了語言選擇,這兩種技術都適合解析語言,其中有2空間壓痕遞增來形容嵌套/塊(例如Slim,Haml或SCSS):遞歸下降解析遞歸上升解析

OAN,在.NET中是否有對RDP或RAP的OOTB支持?或者像Java的parboiled這樣的通用,優雅的第三方解析庫?

+2

'OAN,有沒有RDP或RAP在.NET中的任何OOTB支持?'這很有趣:) – paqogomez

+0

[RDP代碼示例](http://www.codeproject.com/Articles/19836/Palantir-Remote-桌面管理器) – paqogomez

+0

投票結束 - 非常廣泛的問題。 –

回答

6

F#是編寫解析器的絕佳工具。你有多種選擇:

  • 活動模式讓你定義相當簡單的解析器是非常可讀。我在我的中使用了這種方法,我寫了一篇關於an upcoming F# book的章節,可免費獲得as PDF

  • 解析器組合器是另一種選擇。這個想法是,您可以從基本構建塊構建解析器(例如解析由給定字符分隔的列表等)。有一個F#實現調用FParsec

  • FsLex和FsYacc給你的標準工具書寫解析器。有a new more efficient implementation,也是F# PowerPack中的一個版本,由F#編譯器本身使用。

3

F#是一個壓痕敏感的語言本身和F#編譯器使用fslex/fsyacc解析。如果你看一下F#'s parser,縮進敏感度會給這個過程增加額外的複雜性。

如果你沒有太多的F#經驗,手卷F#解析器可能不是一個好主意。我會建議使用FParsec。它具有手動解析器的靈活性,比fslex/fsyacc更簡單。

您可以在FParsec中找到來自this article的兩種基於縮進的語法的實現。

1

要在C#.NET中構建自制解析器,您可能需要查看適用於Microsoft Reactive Extension(Rx)的Rxx擴展。

此外,簽出此列表創建。 parsers in C#