阅读正确的递归

时间:2018-05-16 20:43:45

标签: parsing recursion

我理解左递归

A - > Aα| β

所以A可以是β并且停止或继续并且具有Aα无限次,因为它在其自身中被解释。所以,如果我要解析βαα:

      A 
     / \
    A   α 
   / \
  Α   α
 /
β 

我发现右递归中的语法相同如下:

A-> βA“

A' - > αA'|ε

我可以再次为βαα做解析树,但我无法读取左递归中的生成规则。有人可以用这种右递归语法解释阅读生产规则的步骤吗?

1 个答案:

答案 0 :(得分:0)

生产规则按此顺序应用:

A -> 
  -> βA'   (apply A -> βA')
  -> βαA'  (apply A' -> αA')
  -> βααA' (apply A' -> αA')
  -> βαα   (apply A' -> ε)

解析树看起来像这样:

  A 
 / \
β   A' 
   / \
  α   A'
     / \
    α   A'
        |
        ε

删除直接左递归

每个直接左递归的规则:

A -> Aa | Ab | Ac | ... | x | y | z

替换为:

A  -> xA' | yA' | zA' | ...
A' -> aA' | bA' | cA' | ε

其中abc,...,xyz是不以A

重复此过程,直到没有直接的左递归为止。