在DCG中,如何实现:零或多、零或一、一或多个事件?
我在讨论伪代码中的以下内容:
sentence --> word+
float --> int+, ['.'], int+
nilORa --> a?
nilORaaaa --> a*发布于 2020-12-29 06:03:11
您可以使用谓词的子句集提供的or-不确定性(或者,在本例中,为同一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是一个后跟nilORaaaa的a --或者可能什么都不是:
nilORaaaa --> a, nilORaaaa.
nilORaaaa --> [].我认为您还应该能够部署;:
nilORaaaa --> (a, nilORaaa) ; [].https://stackoverflow.com/questions/65484604
复制相似问题