first和follow求法例題 【編譯原理】自頂向下LL(1)分析中,消除左遞歸和提取左因子的目的是什么?
【編譯原理】自頂向下LL(1)分析中,消除左遞歸和提取左因子的目的是什么?一般來(lái)說(shuō),LL(1)是通過(guò)函數(shù)遞歸實(shí)現(xiàn)的]例如,語(yǔ)法:a-> a | a代碼實(shí)現(xiàn)是:[function a(){a()ma
【編譯原理】自頂向下LL(1)分析中,消除左遞歸和提取左因子的目的是什么?
一般來(lái)說(shuō),LL(1)是通過(guò)函數(shù)遞歸實(shí)現(xiàn)的
]例如,語(yǔ)法:a-> a | a
代碼實(shí)現(xiàn)是:[function a()
{
a()
match()
term(a)]}
!]這樣你就可以看到死循環(huán)了…
消除語(yǔ)法的左遞歸后
a-> AA“
a”->AA“
]這個(gè)問(wèn)題可以避免
公因子是像你在樓上說(shuō)的那樣提出的,避免程序回溯,消除歧義
[Q→RB[b(2)
R→SA[a(3)
!]R→SA[a(3)
把第一個(gè)公式帶入第三個(gè)公式,然后第二個(gè)公式也被引入,這樣我們就可以得到
R->rbca BCA BCA CA | a為了消除左遞歸,我們可以得到
R->(BCA B | B | B[B
]R->(BCA BCA | B | a)R“
]R”->bcar“”->bcar“124124124。A->aa
2。A->ba
B->ab(A和B屬于非終端字符,A和B屬于終端字符)
一般來(lái)說(shuō),左遞歸意味著案例1中“>”的兩邊包含相同的非終端字符;
案例2,a->ba中“>”后的B和B->ab中“>”前的B是同一個(gè)非終結(jié)符
這兩種情況稱為左遞歸。