【发布时间】:2015-05-03 10:36:04
【问题描述】:
我正在尝试编写规则以使用递归表示 0 或更多:EBNF 中的规则如下:
translation_unit
=> external_declaration { external_declaration}
我的猜测如下:
translation_unit(Xs0,Xs) :-
[external_declaration|Xs].
我还想在另一个规则中表示可选性,如下所示:
declaration_specifiers_next
a. : ε
b. | declaration_specifiers
我的猜测是:
declaration_specifiers_next(Xs0, Xs)
:- ε,
[declaration_specifiers|Xs]
我也对我们在这种情况下给规则标题的论点感到困惑:(Xs0, Xs) 它们实际上是什么意思?
【问题讨论】:
-
“我的猜测是”是什么意思?您是否尝试通过随机输入符号来创建程序?如果您甚至没有定义
(Xs0, Xs)的含义,您想如何实现translation_unit(Xs0, Xs)?这是你的程序,如果你不知道你想让它做什么,别人怎么知道? -
ε, [declaration_specifiers|Xs]不正确,因为,代表 Prolog 中的连词,而不是 BNF 建议的析取。此外,[declaration_specifiers|Xs]本身的列表不是有效的 Prolog 查询。你熟悉 Prolog 的基础知识吗?您可能想研究一下而不是猜测。 ;) 对于这样的事情,DCG 将是理想的:declaration_specifiers_next --> [] | declaration_specifiers.和declaration_specifiers -->...。 -
非常感谢您的建议 :) 我会考虑的
标签: prolog grammar rule bnf dcg