Recursion 如何从A->;中删除左递归;Aα;|ε;
我认为这种语法的左递归是不可移除的。如果我错了,请纠正我。 α是非末端的αRecursion 如何从A->;中删除左递归;Aα;|ε;,recursion,compiler-construction,context-free-grammar,left-recursion,context-free-language,Recursion,Compiler Construction,Context Free Grammar,Left Recursion,Context Free Language,我认为这种语法的左递归是不可移除的。如果我错了,请纠正我。 α是非末端的α ε是ε。可以从语法中删除左递归;以下是不带左递归的语法: A -> A' | ε A' -> α A A -> α A | ε 您还可以像@Mephy那样使用正确的递归: A -> A' | ε A' -> α A A -> α A | ε 请注意(正如@Mephy所说)这个语法是零或更多的αs(α*)。不确定这是否是本网站的主题,但你可以只交换A->αA |ε。这两个规则定义
ε是ε。可以从语法中删除左递归;以下是不带左递归的语法:
A -> A' | ε
A' -> α A
A -> α A | ε
您还可以像@Mephy那样使用正确的递归:
A -> A' | ε
A' -> α A
A -> α A | ε
请注意(正如@Mephy所说)这个语法是零或更多的
αs(α*
)。不确定这是否是本网站的主题,但你可以只交换A->αA |ε。这两个规则定义将等效于常规表达式α*
,即一个包含任意多个字母字符的序列(不包括任何字符)。