小编Fin*_*ert的帖子

删除DCG中的左递归 - Prolog

我在这个语法中有一个左递归的小问题.我正在尝试在Prolog中编写它,但我不知道如何删除左递归.

<expression> -> <simple_expression>
<simple_expression> -> <simple_expression> <binary_operator> <simple_expression>
<simple_expression> -> <function>
<function> -> <function> <atom>
<function> -> <atom>
<atom> -> <number> | <variable>

<binary_operator> -> + | - | * | /

expression(Expr) --> simple_expression(SExpr), { Expr = SExpr }.
simple_expression(SExpr) --> simple_expression(SExpr1), binary_operator(Op), simple_expression(SExpr2), { SExpr =.. [Op, SExpr1, SExpr2] }.
simple_expression(SExpr) --> function(Func), { SExpr = Func }.
function(Func) --> function(Func2), atom(At), { Func = [Func2, atom(At)] }.
function(Func) --> atom(At), { Func = At }.
Run Code Online (Sandbox Code Playgroud)

我写过类似的东西,但它根本不起作用.如何更改它以使该程序正常工作?

grammar prolog left-recursion dcg prolog-tabling

6
推荐指数
1
解决办法
1806
查看次数

标签 统计

dcg ×1

grammar ×1

left-recursion ×1

prolog ×1

prolog-tabling ×1