这个所谓的公式法,一开始着实看不懂,做了几个题目后再反复看了书上的例题,终于明白了怎么回事,主要是利用了等价文法的思想:文法到语言是一对第一,语言到文法是一对多,在描述同样的语言的情况下,可以有多种文法,所以存在不改变所定义的语言的情况下改造文法的可能。
1.假设有如下直接左递归
[color=blue]U→Ux|y [/color] 该文法所表示的语言为[color=red]yx*[/color]
2.引入新的非终结符V
[color=blue]V→xV|空[/color] 该文法所表示的语言为[color=red]x*[/color]
3.所以原来的文法可以改造为
[color=blue]①U→yV [/color]
[color=blue]②V→xV|空[/color] 该文法表示的语言为[color=red]yx*[/color]
因为改造前后的两种文法所表示的语言相同,所以为等价文法
至此原来的直接左递归文法已变换为右递归,反向变换同理
1.假设有如下直接左递归
[color=blue]U→Ux|y [/color] 该文法所表示的语言为[color=red]yx*[/color]
2.引入新的非终结符V
[color=blue]V→xV|空[/color] 该文法所表示的语言为[color=red]x*[/color]
3.所以原来的文法可以改造为
[color=blue]①U→yV [/color]
[color=blue]②V→xV|空[/color] 该文法表示的语言为[color=red]yx*[/color]
因为改造前后的两种文法所表示的语言相同,所以为等价文法
至此原来的直接左递归文法已变换为右递归,反向变换同理