如何消除此CFG中的左递归?
<RE> -> <RE>'|'<CONCAT> | <CONCAT>
<CONCAT> -> <CONCAT><KLEEN> | <KLEEN>
<KLEEN> -> <KLEEN>'*' | <ELEM>
<ELEM> -> 'a' | 'b' | 'c' | 'd' | '('<RE>')'
我想出了这个:
<RE> -> <CONCAT><re>
<re> -> '|'<CONCAT><re> | (e)
<CONCAT> -> <KLEEN><concat>
<concat> -> <KLEEN><concat> | (e)
<KLEEN> -> <ELEM><kleen>
<kleen> -> '*'<kleen> | (e)
<ELEM> -> 'a' | 'b' | 'c' | 'd' | '('<RE>')'
但是,当我尝试将其实现为递归下降解析器&amp;解析简单的字符串,如“ab”,我得到了由concat
制作引起的无限循环。
我是否错误地消除了左递归?