2012-01-17 35 views

回答

0

DCG非常適合。但是作爲Prolog的準系統,你必須做出一些選擇來利用這些力量並實施任何實用的東西。例如,如果可能,我將DCG直接應用於文本來源,而無需使用預先標記的標記。如果這是合適的,取決於實際的任務。我們假設這裏沒問題。然後我們的DCG可以在SWI-Prolog中使用可用的幫助程序庫實現:

:- [library(http/dcg_basics)]. 

conditional(if_then_else(Cond, Then, Else)) --> 
    blanks, "if", 
    blanks, bool_expression(Cond), 
    blanks, "then", 
    blanks, statement(Then), 
    blanks, "else", 
    blanks, statement(Else). 

很簡單,不是嗎?

other answer顯示如何解析(和評估)的表達式,佔優先。您可以使用布爾運算符輕鬆擴展它,只需給它們正確的優先級即可。聲明將允許分配,並將有條件地遞歸。

你必須要注意的空白 // 0的使用,是一個可能的「空匹配的生產 可能會引入一些效率低下如果出現「並排」的一些其他生產用相同的屬性。

當bool_expression // 1 //聲明1已經確定,解析器可以調用:

..., 
phrase(conditional(C), " if 1 < 2 then a = 1 else a = 0 "), 
... 

和C將包含語法樹...

+0

謝謝!我一定會試試這個! – user1059303 2012-01-17 23:11:51