Ho riscontrato un piccolo problema con la ricorsione sinistra in questa grammatica. Sto provando a scriverlo in Prolog, ma non so come rimuovere la ricorsione a sinistra.Rimozione della ricorsione sinistra in DCG - 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 }.
Ho scritto qualcosa del genere, ma non funzionerà affatto. Come cambiarlo per far funzionare questo programma?
Sì, approccio classico per eliminare la ricorsione a sinistra cambiando la grammatica e utilizzando un accumulatore. Mi ci sono voluti un paio d'anni per seguire il tuo link "qui". –