0

是否可以使用 Prolog DCG 来解析“if-then-else”语句?如果是这样,考虑到我必须匹配特定的“if”“then”“else”字符串,如何解析这样的语句。如果这不可能,我的替代方案是什么?

4

1 回答 1

0

DCG 非常适合。但是作为准系统 Prolog,您必须做出一些选择来利用功能并实现任何实用的东西。例如,如果可能的话,我直接在文本源上应用 DCG,而不使用初步的分词器。这是否合适,取决于实际任务。我们假设这里没问题。然后我们的 DCG 可以在 SWI-Prolog 中实现,使用可用的帮助库:

:- [library(http/dcg_basics)].

conditional(if_then_else(Cond, Then, Else)) -->
  blanks, "if",
  blanks, bool_expression(Cond),
  blanks, "then",
  blanks, statement(Then),
  blanks, "else",
  blanks, statement(Else).

很容易,不是吗?

这个另一个答案显示了如何解析(和评估)表达式,考虑优先级。您可以使用布尔运算符轻松扩展它,只需给它们正确的优先级。声明通常将允许分配,并将在条件下递归。

您必须注意空格//0 的使用,如果“并排”出现在具有相同属性的其他产品中,作为可能的“空匹配”产品可能会导致效率低下。

当 bool_expression//1 和 statement//1 已定义时,可以调用解析器:

...,
phrase(conditional(C), "  if 1 < 2 then a = 1 else a = 0  "),
...

和 C 将包含语法树...

于 2012-01-17T07:12:03.433 回答