解析器生成器,谓词不返回true或false

时间:2013-06-04 18:30:23

标签: prolog parser-generator

我的PROLOG任务有问题。

即,我必须编写谓词接受(+自动机,+ Word),如果Word属于语言,则返回true(自动机由Goto表,Action表和语法表示,但它不是那么重要),否则为false(在我的任务中要求返回真或假)。我写了

accept(Automaton, Word) :-         
    parse(Automaton, Word, RightmostDeriv),
    nl, print_list(RightmostDeriv), nl.

,其中

谓词parse(+Automaton, +Word, -RightmostDeriv)计算最大推导。如果无法解析Word,则RighmostDeriv == ['mistake']

如你所见,我可以打印最严格的推导,但我不知道如何返回false或true。

我找到了这个https://csc.cdf.toronto.edu/mybb/showthread.php?tid=2100,我发现这可能是一个问题。

但也许在这里有任何解决方案(例如成员谓词,类似成员('错误',RightmostDeriv))返回true或false?

编辑:有

accept(Automaton, Word) :-         
    parse(Automaton, Word, RightmostDeriv),
    nl, print(RightmostDeriv), nl.   

我收到了(测试2 - 来自维基百科的例子http://en.wikipedia.org/wiki/LR_parser#Additional_Example_1.2B1

[4]  ?- make.

=============== Test 1  =================== 

[mistake]

=============== Test 2  =================== 

[5,3,5,2]
true .

[4]  ?- 

并且:

accept(Automaton, Word) :-         
    parse(Automaton, Word, RightmostDeriv),
    RightmostDeriv \= ['mistake']. 

我收到了(无限循环)

?- make.

=============== Test 1  =================== 
^CAction (h for help) ? break
% Break level 1
[1]  ?- 

0 个答案:

没有答案