我一直在問要使用複合,遞歸下降解析器和解釋表達式評估使用解釋器模式。在複合結構
這裏的語法:
<cond> → <termb> [OR <termb>]*
<termb>→<factb>[AND <factb>]*
<factb>→<expr> RELOP <expr> | NOT <factb> | OPAR <cond> CPAR
<expr> → [PLUS | MINUS] <term> [(PLUS <term>) | (MINUS <term>)]*
<term> → <termp> [(MULT <termp>) | (DIV <termp>) | (REM <termp>)]*
<termp> → <fact> [POWER <fact>]*
<fact> → ID | NUM | OPAR1 <expr> CPAR1
----TERMINALS----
ID → ("A" | ... | "Z" | "a" | ...| "z") [("A"| ... | "Z" | "a" | ...| "z" | "0" | ... | "9")]*
NUM → ("0" | ... | "9") [("0" | ... | "9")]*
OPAR → "("
CPAR → ")"
OPAR1 → "["
CPAR1 → "]"
RELOP → EQ | NEQ | GT | GE | LT | LE
EQ → "= ="
NEQ → "!="
GT → ">"
GE → ">="
LT → "<"
LE → "<="
POWER → "^"
DIV → "/"
REM → "%"
MULT → "*"
MINUS → "−"
PLUS → "+"
AND → 「and」 or 「&&」
OR → 「or」 or 「||」
NOT → 「not」 or 「!」
分配是:
項目的基礎上,綜合,遞歸Builder和 解釋的目的,是爲了獲得一個條件表達式,做一個語法分析 並構建它的組合樹。從樹上開始,你就必須 評估條件的結果,基於外部背景 (從屬性文件讀取),它包含內部 變量
的價值現在,第一我注意到的是,解釋使用複合結構,所以它似乎是一個好主意,用致以複合結構評估(:上下文)方法。
我問過周圍,但我被告知這不是做任務的方式。 好像我已經建立了譯員樹,從複合樹(這對我來說是非常不可思議的,因爲我已經有一棵樹可以使用!)。
所以我已經建立了使用複合 + 遞歸構建我的樹,它識別輸入,並將其打造的樹沒有任何形式的問題。
但問題是:我如何將解釋器應用於我的結構?
這裏是我的類圖(什麼是意大利人,但它是完全可以理解的)
如果我這樣做是正確,解釋使用每個語法規則一類,所以我必須做a cond class,then a termb等等。
但我是否將它們鏈接到我的合成?
這基本上是我從一開始就想到的,但也許我應該停止相信那些在不知道他們在說什麼的情況下提供建議的人! – StepTNT 2012-08-21 11:03:11