2016-07-28 109 views
2

我有字符串格式的布爾表達式,例如:字符串中的評估布爾表達式 - 去

name := "Fred" 

type := "Person" 

我要計算該表達式爲true或false。

exp := "(name == Fred) && (type == Person)" 

最後,我想能夠執行的條件語句,如:

​​

然而,從研究這不是去支持開箱即用。我看到了有關使用AST來解析和評估的建議。但是,我相當新,特別是AST,因此不確定如何去做。有人可以提供任何指導我如何去評估一個字符串布爾表達式?我還沒有遇到任何完全支持它的軟件包。

+0

o.õ這很臭,爲什麼你需要字符串 – Plato

+1

我有一個布爾表達式作爲JSON存儲在一個文件中。我通過JSON解析來創建我的字符串布爾表達式。一旦我有了表達,我就需要評估它。 –

+1

你的「布爾表達式」是否保證是正確的Go語法? (這個例子是無效的,所以你不能直接將它解析爲Go) – JimB

回答

1

以下是事實理論上。但既然你使用Go,如果你可以使用Go語法,那麼你可以使用Go的解析器和AST。我沒有看到任何可以在運行時評估Go AST的代碼。但是你可以寫一個支持你想要的部件。然後你會有一個Go口譯員。

下面是你需要做的,以支持任何隨機表達式語法什麼:

你會想lex and parse。在內存中建立一個AST (Abstract Syntax Tree)。然後評估它。

你的樹節點可能是(我的圍棋語法錯誤的方式爲這個):

Scope {Tree { 
    Assignment { Symbol: "name", Symbol: "_literal_1" } 
    Assignment { Symbol: "exp", Value: Tree: { 
    AndOperation { Tree{...}, Tree{...} } 
    } 
} 

等等

那麼你的程序可以直接穿過你的AST也可以將其寫入字節碼的形式,但是如果你希望它稍小且容易緩存,那真的只會有用。