Prolog语法错误:表达式预期检查括号

时间:2014-02-24 03:31:14

标签: prolog

我正在Prolog写一个程序,我给了一套语法规则,用户输入一个句子,我必须确保句子遵循给定的规则。 我只是坚持一条规则: expr - > (expr)也写成expr - > (id op expr)

以下是此部分的代码:

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

我认为问题在于检查括号,因为此代码的其他部分在其他地方使用且没有错误。当使用=(左,'(')或=(右,')')时,我得到一个语法错误:表达式预期为什么我会得到这个错误,什么是检查左括号和右括号的更好方法?

1 个答案:

答案 0 :(得分:0)

我认为您应该在=(Left, ‘(‘),=(Right, ‘)’)使用单引号。即=(Left, '('),=(Right, ')')

那就是说,你的Expr只会匹配一个令牌,这不是我所期望的。考虑将整个“正确”序列与

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

并进一步拆分Expr以获得正确的parenthesi。无论如何,正如我在another answer中所建议的那样,你的解析(也在修正后)将在[a,=,'(',b,')',+,c].上失败