【发布时间】:2012-12-14 00:00:43
【问题描述】:
在使用语法规则时,是否可以在 Prolog 中定义无限数量的终端?
下面的例子描述了这个问题:
selection-->([if,'('],condition,[')',
then,'{'],commands,['}']);([if,'('],condition,[')',
then,'{'],commands,['}',else,'{'],commands,['}']).
condition-->[X].
commands-->[X].
这里,“条件”和“命令”块可以有不定数量的元素。如何在 Prolog 中指定?条件的产生规则和我在这里提供的命令只允许一个原子。
我希望下面的陈述是真实的,但是这条规则 condition-->[X]. 只允许括号之间有一个原子:
selection([if,'(',a,<,b,')',then,'{',a,+,+,'}',else,'{',c,'}'], []).
附录
如何让程序根据语句创建语法树?例如,如果输入以下语句:
selection( S, [ if, '(', a, <, b, ')', then, '{', a, +, +, '}' ], [] ).,
结果应该是S = selection(if(condition([a,<,b])),then(commands([a,+,+])))。
我需要对代码进行哪些更改?
非常感谢您。
【问题讨论】:
标签: if-statement prolog context-free-grammar dcg