मुझे इस व्याकरण में बाएं रिकर्सन के साथ एक छोटी सी समस्या है। मैं प्रोलॉग में इसे लिखने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि बाएं रिकर्सन को कैसे हटाया जाए।डीसीजी में बाएं रिकर्सन को हटा रहा है - प्रोलॉग
<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 }.
मैंने ऐसा कुछ लिखा है, लेकिन यह बिल्कुल काम नहीं करेगा। इस कार्यक्रम को काम करने के लिए इसे कैसे बदला जाए?
हाँ, व्याकरण को बदलने और एक संचयक का उपयोग करके बाएं रिकर्सन को खत्म करने के लिए क्लासिक दृष्टिकोण। अपने "यहां" लिंक का पालन करने के लिए मुझे कुछ सालों लगे। –