Prolog:如何使用DCG解析器来解析if - then - else语句

时间:2012-01-17 04:12:21

标签: prolog dcg

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

1 个答案:

答案 0 :(得分:0)

DCG非常适合。但作为准系统Prolog,你必须做出一些选择来利用电力并实施任何实用的东西。 例如,在可能的情况下,我直接在文本源上应用DCG,而不使用preliminar tokenizer。如果这是合适的,取决于实际任务。我们假设这里没关系。然后我们的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).

很简单,不是吗?

这个other answer显示了如何解析(和评估)表达式,说明优先级。您可以使用布尔运算符轻松扩展它,只需给它们正确的优先级。声明将允许分配,并将在有条件的情况下递交。

您必须注意使用空白 // 0,这可能是“空匹配”的制作 如果对于具有相同财产的其他产品并排出现,可能会引入一些低效率。

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

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

和C将包含语法树...