我正在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, ‘)’).
我认为问题在于检查括号,因为此代码的其他部分在其他地方使用且没有错误。当使用=(左,'(')或=(右,')')时,我得到一个语法错误:表达式预期为什么我会得到这个错误,什么是检查左括号和右括号的更好方法?
答案 0 :(得分:0)
我认为您应该在=(Left, ‘(‘),
和=(Right, ‘)’)
使用单引号。即=(Left, '('),
和=(Right, ')')
。
那就是说,你的Expr只会匹配一个令牌,这不是我所期望的。考虑将整个“正确”序列与
匹配X = [Left, Id, Op | Expr],
并进一步拆分Expr以获得正确的parenthesi。无论如何,正如我在another answer中所建议的那样,你的解析(也在修正后)将在[a,=,'(',b,')',+,c].
上失败