Bu tam olarak ödev ama benim çalışmalarla ilgilidir:LL içine dilbilgisi dönüştürme (1) dilbilgisi: bazı sorunlar
örneğin bir gramer gibidir:
E -> E + E | E * E | -E | (E) | o olur belirsizliği çıkardıktan sonra kimliği
E->-F|F
F->F+G|G
G->G*H|H
H->(E)|id
(en düşük öncelik operatöründen başlayarak)
Ve sol Rekursif sol faktoring (bu durumda gerekli değildir) nihai LL1 dilbilgisi olduğunu çıkardıktan sonra: iyi çalışır bir hata ücretsiz ayrıştırıcı tablosunu verir
E->-F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
. Şimdi Karşılıklı sorun hakkında, gramer böyle olduğunu varsayalım:
E -> E + E | E * E | id = E | (E) | id
Şimdi çakışmaları olmayan bir ayrıştırma tablosu oluşturamıyorum, bu da son gramerimin LL1 olmadığı anlamına gelir.
belirsizliği çıkardıktan sonra: Şu adımları izleyin:
E->id=F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
Ama Ayrıştırıcı tablosunda bir çatışma var:
E->id=F|F
F->F+G|G
G->G*H|H
H->(E)|id
Ve sola Rekursif sol faktoring çıkardıktan sonra, dilbilgisi olur Kaldıramamadığım bir şey var, yani kaçırdığım bir adım var ya da bulamadığım adımlarda bir yanlışlık var. Lütfen bana neyi yanlış yaptığımı ve nasıl düzeltileceğini söyle. Uzun zamandır bu problem üzerinde çalışıyorum.
Unary Eksi operatörü önceliği en düşük değil, her zaman diğer ikili operatörlerde en yüksektir – ammar26