所以我正在使用Definite Clause Grammars在SWI-Prolog中编写一个简单的Pascal解析器。
我不明白如何实现重复(2个或更多)或可选重复(1个或更多)谓词。
例如,在EBNF中,Pascal的“program”为:
"PROGRAM" identifier "(" identifierlist ")" ";" block "."
“identifierlist”指:
identifier { "," identifier }
"identifier" 是指:
letter { letter | digit }
我知道在Prolog的DCG形式中程序是这样的:
program --> ["PROGRAM"], identifier, ["("], identifierlist, [")"], [";"], block, ["."].
如何实现“identifierlist”甚至包含可选重复数量的“identifier”或“letter”或“digit”谓词的“identifier”?
identifierlist
的定义似乎没有表明这一点。 - lurker