2012-05-08 12 views
3

我有一個文件,其中包含很多行條件字符串,我需要讀取該文件並將邏輯條件字符串轉換爲實際代碼。有幾個參數,條件的每一行檢查一個或多個參數是否符合指定值或包含指定值。例如:如何解析具有自定義邏輯條件的字符串?

$parameterA = "value_1" AND ($parameterB CONTAIN "%value_2%" OR $parameterC = "value_3") 

「=」 號, 「AND」 和 「OR」 有 「==」, 「& &」 和 「||」 的含義。 「%」是通配符。

後,我將其轉換爲一個代碼,它應該看起來像:

if (obj.parameterA == "value_1" && (obj.parameterB.contains("value_2") || obj.parameterC == "value_3")) 
    return true; 
else return false; 

其中「目標文件」是一些類的一個實例。

我在這裏搜索了其他帖子,看來ANTLR可能是一個不錯的選擇。但是,我沒有這方面的經驗,也不確定在Java中使用它有多困難。在我深入瞭解ANTLR的所有細節之前,我只想檢查是否還有其他好的想法。非常感謝您的幫助!

+2

請注意,您可能需要'obj.parameterA.equals(「value_1」)'而不是'=='。 – hmjd

+0

該行必須是原樣或可以在javascript中?我問你,因爲在這種情況下,你可以使用內置的JavaScript引擎。 –

+0

@hmjd:謝謝你指出。我通常使用C++,而且我不擅長Java。我應該在我的帖子中提到這一點。 – EXP0

回答

0

其實我不知道,如果現有的庫這樣做,但要計算一個表達式的經典的方式是使其在兩個步驟:

你必須表達在中間符號,所以你需要將其轉換爲前綴符號,這是刪除括號並將操作符放在操作數的前面。

在第二步中,您將使用一個簡單的遞歸算法評估表達式,該算法反過來也將負責解析變量。

還有一件事,你應該賦予賦值運算符最大優先級。

我寫了一個表達式評估器的開源實現:也許你可以擴展它以適合你的需求。

jDTO Expression evaluator source

希望這有助於。