【问题标题】:How to evaluate a DCG parser/generator in Prolog?如何在 Prolog 中评估 DCG 解析器/生成器?
【发布时间】:2020-06-02 21:40:34
【问题描述】:

我无法理解 Prolog 中 DCG 的语法和用法。我正在使用的代码是一种“a=1*2+(3-4)/5”类型语法的解析器,以下是其中的一部分:

factor(factor(N)) --> int(N).

int(N):- number(N), N > 0, N < 10.

运行时是这样的

| ?- int(8).

yes

| ?- factor(8).

! Existence error in user:factor/1

! procedure user:factor/1 does not exist

! goal:  user:factor(8)

| ?- factor([],[],[]).

no

所以 factor 需要 3 个参数。但是,我不明白这些参数的含义是什么,也不明白我需要输入什么才能使查询说“是”?

【问题讨论】:

  • factor(factor(N)) --&gt; int(N).的目的/意义是什么?
  • 它是解析器的一部分(对于数学赋值,例如 a = 1 +4),一个因子可以只是一个 int,或者一个因子可以是括号内的表达式(表达式可以是术语,或术语加/减另一个表达式等)。因为看不懂,所以只剪掉了这部分。
  • 三个参数是 1. 您在规则中定义的输出,2. 令牌的输入列表,以及 3. 令牌的输出列表(即[])。
  • 说:phrase(factor(X), L)

标签: prolog dcg


【解决方案1】:

要运行 DCG 解析器,您需要使用 phrase/2phrase/3

phrase(factor(8), Text).
phrase(factor(N), "123", Rest).

phrase 的第三个参数是输入的未消耗剩余部分(或考虑到 DCG 的生成技能,输出的可能补充)。

【讨论】:

  • 对不起,necro,但这是一个非常重要的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多