DCG:零次或多次、零次或一次、一次或多次?
DCG : zero-or-more, zero-or-one , one-or-more occurrences?
在 DCG 中,您如何实现:零次或多次、零次或一次、一次或多次出现?
我在伪代码中谈论以下内容:
sentence --> word+
float --> int+, ['.'], int+
nilORa --> a?
nilORaaaa --> a*
您使用谓词的子句集提供的 or-nondeterminism(或者,在这种情况下,同一 DCG“非终结符”的 DCG 产生式集 - DCG 产生式是 Horn 子句的另一种表示法)
将应该首先执行的制作移到顶部。例如,要收集至少一个 word
,但可能更多,贪婪地:
sentence --> word, sentence.
sentence --> word.
根据语法中确定性的多少,你甚至可以削减:
sentence --> word, !, sentence.
sentence --> word.
与浮点数相同。 digits
至少是一位数。我认为库中已经有 digit
的定义:
float --> digits, ['.'], digits.
digits --> digit, digits.
digits --> digit.
nilORa
是一个 a
-- 或者可能什么都不是:
nilORa --> a.
nilORa --> [].
nilORaaaa
是一个 a
后跟 nilORaaaa
-- 或者可能什么都没有:
nilORaaaa --> a, nilORaaaa.
nilORaaaa --> [].
你应该也可以部署 ;
我认为:
nilORaaaa --> (a, nilORaaa) ; [].
在 DCG 中,您如何实现:零次或多次、零次或一次、一次或多次出现?
我在伪代码中谈论以下内容:
sentence --> word+
float --> int+, ['.'], int+
nilORa --> a?
nilORaaaa --> a*
您使用谓词的子句集提供的 or-nondeterminism(或者,在这种情况下,同一 DCG“非终结符”的 DCG 产生式集 - DCG 产生式是 Horn 子句的另一种表示法)
将应该首先执行的制作移到顶部。例如,要收集至少一个 word
,但可能更多,贪婪地:
sentence --> word, sentence.
sentence --> word.
根据语法中确定性的多少,你甚至可以削减:
sentence --> word, !, sentence.
sentence --> word.
与浮点数相同。 digits
至少是一位数。我认为库中已经有 digit
的定义:
float --> digits, ['.'], digits.
digits --> digit, digits.
digits --> digit.
nilORa
是一个 a
-- 或者可能什么都不是:
nilORa --> a.
nilORa --> [].
nilORaaaa
是一个 a
后跟 nilORaaaa
-- 或者可能什么都没有:
nilORaaaa --> a, nilORaaaa.
nilORaaaa --> [].
你应该也可以部署 ;
我认为:
nilORaaaa --> (a, nilORaaa) ; [].