2009-06-28 95 views
0

我試圖做到這一點是使用.NET編寫一個簡單的解析器下面的情況分析和計算給定條件

([PART3]function1() AND [PART4]function7()) OR [PART2]function90() 
  • [PART]表示評價的位置,(假設這是巨大的文本文件,PART將文本文件分成大塊)
  • function() s是我可以通過此查詢調用的記錄函數。返回truefalse
  • 基於此True/False和其他運算符之間,我想結合結果並從整個輸入中返回一個最終的True或False。

什麼是在.NET中實現這樣的事情的最佳方式,是否有任何簡單的庫允許我整合這個,或者我應該只寫一個簡單的解析器,然後自己做?

P.S.我找不到這個問題的好標題。

回答

1

看起來像簡單的條件,所以在我看來你不需要全功能的編譯器生產者。我建議你看看Reverse Polish Notation,用它來解開你的條件成堆棧,然後使用簡單的解釋來評估結果堆棧。

+0

我同意你的看法,這就是爲什麼我要找一個更簡單的解決方案。我會研究RPN。我希望找到準備在.NET中使用庫,但最後的手段是開發它:) – 2009-06-28 10:11:55

1

嘗試Irony,雖然尚未準備好黃金時間(但),但它顯示了一些承諾。

Irony是一個用於在.NET平臺上實現語言的開發工具包。它使用c#語言和.NET Framework 3.5的靈活性和強大功能來實現一種全新的,簡化的編譯器構建技術。 與大多數現有的yacc/lex風格的解決方案不同,Irony沒有采用從專門的元語言編寫的語法規範生成任何掃描器或分析器代碼生成。在反諷中,目標語言語法直接在C#中使用運算符重載進行編碼以表達語法結構。 Irony的掃描器和解析器模塊使用編碼爲c#類的語法來控制解析過程。