2013-01-22 45 views
3

對於我們的CMIS服務器端實現,我正在構建一個解析器,它將解析作爲查詢方法輸入提供的查詢語句。 CMIS爲查詢語句定義BNF語法。我想知道什麼是生成這個BNF解析器的最好方法?基於BNF語法的CMIS查詢解析器

我們的實現是在C#中。 CMIS查詢基於SQL語法和由CMIS定義的一些謂詞。

+0

有一些信息在C#中解析這裏http://stackoverflow.com/questions/7377344/how-do-i-write-a-parser-in-c –

+0

SQL一般來說是一個相當複雜的語言。最直接的答案是「使用SQL的現有語法獲取解析器生成器」,因此您不必複製該語法。但是,最糟糕的解析器生成器也會構建解析器。然而,解析通常是達到目的的手段,而不是目標本身。一個更有趣的問題是解析後打算做什麼?這可能會改變很多答案。 –

+0

@IraBaxter - 我將不得不使用的語法由CMIS定義,它基於SQL和由CMIS標準定義的謂詞。所以查詢就像「SELECT * FROM cmis:document WHERE IN_FOLDER(10230)」。一旦解析器驗證並分類查詢,我就可以根據查詢中的謂詞調用適當的代碼。 – Mandar

回答

2

Apache Chemistry OpenCMIS在服務器端使用Antlr來解析,驗證和解釋cmisql語法。 你可以嘗試重用在Apache化學OpenCMIS實現定義ANTLR的語法生成自己的C# parser with antlr3

OpenCMIS語法文件可here(Apache許可證下)

+0

有關ANTLR 3的最新C#目標文檔集可在此處獲取:http://www.antlr.org/wiki/display/ANTLR3/Antlr3CSharpReleases –