2014-02-24 36 views
0

我正在Prolog中編寫一個程序,在那裏給出一組語法規則並且用戶輸入一個句子,我必須確保該句子遵循給定的規則。 我只停留在一個規則: EXPR - >(表達式)也可以寫成EXPR - >(ID運算表達式)Prolog語法錯誤:表達式期望檢查括號

這裏是我的這部分代碼:

expr(X) :- list(X), length(X, Length), =(Length, 5), 
=(X, [Left, Id, Op, Expr | Right]), 
=(Left, ‘(‘), 
id(Id), op(Op), expr([Expr]), 
=(Right, ‘)’). 

我相信問題在於檢查括號,因爲此代碼的其他部分在其他地方使用時沒有任何錯誤。當使用=(Left,'(')或=(Right,')')時,我得到一個語法錯誤:預期表達式爲什麼我會得到這個錯誤,以及檢查左括號和右括號的更好方法是什麼?

+0

除了什麼@CapelliC說一下單引號,您的列表'[左,身份證,歐普,EXPR |右]'有'右'作爲尾部,這是一個列表。所以如果它是一個正確的paren,它將是'''''''''''',而你正在比較一個原子'=(Right,')')'。你需要將你的列表寫成'[Left,Id,Op,Expr,Right]'或'[Left,Id,Op,Expr | [Right]]'如果你想'Right'是5元素列表中的最後一個原子。 – lurker

回答

0

我想你應該在這裏使用單引號=(Left, ‘(‘),和這裏=(Right, ‘)’)。即和=(Right, ')')

也就是說,你的Expr只會匹配一個令牌,這不是我所期望的。考慮到整個「正確」的順序與

X = [Left, Id, Op | Expr], 

,並進一步分裂Expr的匹配,以得到正確的parenthesi。無論如何,我建議在another answer,您解析(修正後也)都將失敗[a,=,'(',b,')',+,c].

相關問題