是否可以使用Prolog DCG来解析“if-then-else”语句?如果是这样,那么如何解析这样的语句,因为我必须匹配特定的“if”“then”“else”字符串。如果不可能,我的替代方案是什么?
答案 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将包含语法树...