Docstoc

13

Document Sample
13 Powered By Docstoc
					13. LL(1)-es elemzés táblázattal:
Nem alakítható át minden grammatika LL(1)-es grammatikára. Nem ismert olyan algoritmus,
amely tetszõleges nyelvhez LL(1)-es grammatikát ad. Bizonyos esetekben egy grammatikából
egyszerû átalakításokkal LL(1)-es grammatikát kaphatunk (belrekurzió mentesítés + faktorizáció).
Tétel:
Ha G egy LL(k) típusú grammatika, akkor nem lehet balrekurzív grammatika.
Bizonyítás:
A0→A1α→ … →Anαn→A0α és Aj→αj1|αj2. Ekkor Aj→αj1→*Ajβ→αj2β→ x =>
FIRSTk(αj1)∩ FIRSTk(αj2) ≠ 0. Minden környezetfüggetlen grammatikát lehet
balrekurziómentesíteni.

QED

Definíció 1: A → γ helyettesítési szabály: LEFT1(A,γ) = {FIRST1(x) | S →* ωAβ → ωγβ → *ωx}
Definíció 2: Az A nemterminális szimbólum belfaktorizált, ha minden A → γ|δ esetén:
LEFT1(A,γ)∩ LEFT1(A, δ) = 0.
Definíció 3: Egy grammatika balfaktorizált, ha minden nem terminális szimbóluma balfaktorizált.

Tétel 2:
Egy grammatika balfaktoriztált <=> a grammatika LL(1)-es
Bizonyítás: Ez az LL(k) definíciójának átfogalmazása. Közvetlen balfaktorizáció: A→Bc|Bd
helyett A→BB´, B´ → c|d. Közvetett balfaktorizáció: több szabály összevonásával érjük el.
Elemzés táblázattal:
                       pop     , ha X=a
              M(X,a)={ accept , ha X = # = a
                       (α,i) , ha X→α az i. szabály (aЄFIRST1(α)) vagy (єЄFIRST1(α) és
                                    αЄFOLLOW1(X))
                       error , egyébként

A táblázat kitöltéséhez meg kell határozni a FIRST1(α) és a FOLLOW1(A) halmazokat.
1.módszer:
FIRST1(X) meghatározása (XЄ{N unio T}): 1, FIRST1(X) = 0. 2, Ha XЄT, akkor FIRST1(X) =
FIRST1(X) unio {X}. 3, Ha X → є, akkor FIRST1(X) = FIRST1(X) unio{є}. 4, Ha X → Y1…Ym,
Y1…Yk →* є (1 ≤ k ≤ m) és aЄFIRST1(Yk+1), akkor FIRST1(X) = FIRST1(X)unio {a}. Ha k=m,
akkor FIRST1(X) = FIRST1(X) unio { є }.
FIRST1(α) meghatározása (α = X1…Xn): 1, FIRST1(α) = FIRST1(X1)\{ є }. 2, Ha єЄFIRST1(X1),
akkor FIRST1(α) = FIRST1(α) unio FIRST1(X2)\{ є }. 3, Ha B → αAβ(|β| > 0 ), β → * є, akkor
FOLLOW1(A) = FOLLOW1(A) unio FOLLOW1(B). 4, Ha B → αA, akkor FOLLOW1(A) =
FOLLOW1(A) unio FOLLOW1(B)
2. módszer:
Relációkat határoz meg a grammatika szimbólumai között, ezeket a relációkat
táblázatokba(mátrixokba) helyezi és a mátrixműveletek alkalmazásával jut el a FIRST1(A) és a
FOLLOW1(A) halmazokhoz. Nє = {A | A → * є}
F: Ha A → X1X2…Xn, akkor AFX1. Ha X1ЄNє, akkor AFX2 Ha X1,X2ЄNє, akkor AFX3, és 0gy
tovább. F+ (Warshall-mátrix): FIRST1(A) = {a | AF+a} unio { є|AЄNє }
B: Ha A → X1X2…Xn, akkor XiBXi+1 (1 ≤ i ≤ n-1). Ha Xi+1ЄNє, akkor XiBXi+2 (1 ≤ i ≤ n-2). Ha
Xi+1, Xi+2ЄNє, akkor XiBXi+3 (1 ≤ i ≤ n-3), és így tovább.
L:Ha A→X1X2…Xn, akkor XnLA. Ha XnЄNє, akkor Xn-1LA. Ha Xn-1XnЄNє, akkor Xn-2LA, és
így tovább. Ekkor FOLLOW 1(A) = { a|A(L*BF*)a }. Kell egy S´ → S# szabály is.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:3
posted:8/24/2012
language:Hungarian
pages:2