You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除同时存在左递归与右递归的文法中的左递归?

移除文法左递归的步骤

首先明确原文法:

E->a
E->E+E
E->S,E
E->(E)

S-> bS'
S'-> ;bS'
S'->ε

1. 识别直接左递归

E的产生式中,E->E+E是直接左递归,其余E的产生式(E->a、E->S,E、E->(E))属于无左递归的基础候选式。S和S'的产生式本身没有左递归,无需修改。

2. 应用直接左递归消除规则

对于形如 A->Aα | β 的直接左递归,转化规则为:

  • A->βA'
  • A'->αA' | ε

对应到E的产生式:

  • 基础候选式β:a、(E)、S,E
  • 左递归部分的α:+E

因此改写后的E及新增的E'产生式为:

E->aE'
E->(E)E'
E->S,E E'
E'->+E E'
E'->ε

3. 最终无左递归文法

整合后完整的无左递归文法如下:

E->aE'
E->(E)E'
E->S,E E'
E'->+E E'
E'->ε

S->bS'
S'->;bS'
S'->ε

内容的提问来源于stack exchange,提问作者Koriy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:22:36