需要帮助消除CFG的左递归

时间:2013-03-21 16:25:11

标签: context-free-grammar recursive-descent left-recursion

如何消除此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制作引起的无限循环。

我是否错误地消除了左递归?

0 个答案:

没有答案