怎么消除文法的左递归性

除文法的左递归性可以采用以下方法:

  1. 直接左递归转换为间接左递归
  2. 消除间接左递归

举例说明:

直接左递归转换为间接左递归


原文法:A → Aα | β

转换后的文法:A → βA'

A' → αA' | ε

例如:S → Sabc | ε

转换后的文法:S → εS'

S' → abcS' | ε

消除间接左递归


原文法:A → Aα1 | Aα2 | ... | Aαm | β1 | β2 | ... | βn

转换后的文法:A → β1A' | β2A' | ... | βnA'

A' → α1A' | α2A' | ... | αmA' | ε

例如:S → Sa | Sb | A

转换后的文法:S → A S'

S' → aS' | bS' | ε

A → ε

例如:E → E + T | E - T | T

转换后的文法:E → TE'

E' → +TE' | -TE' | ε

T → a | b | c

例如:A → Aa | Ab | B

转换后的文法:A → BA'

A' → aA' | bA' | ε

B → ε

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/130779914