Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
| fA
A
cA
| adA
| c
Jadi, tata bahasa yang dihasilkan setara yang tidak rekursif kiri adalah: S Aa | b
A bdA
| fA
A
cA
| adA
| c
Left-Factoring
Sebuah parser prediktif (parser top-down tanpa backtracking) menegaskan bahwa tata
bahasa harus kiri diperhitungkan.
tata bahasa => setara tata bahasa baru yang cocok untuk parsing prediktif
stmt if expr then stmt else stmt |if expr then stmt
ketika kita melihat apakah kita bisa tidak sekarang aturan produksi yang memilih untuk
menulis ulang stmt dalam derivasi.
In general,
A o|
1
| o|
2
dimana o tidak kosong dan simbol pertama dari
|
1
dan |
2
(jika mempunyai 1) berbeda.
saat memproses o kita tidak dapat mengetahui apakah memperluas
A to o|
1
or A to o|
2
Tapi, jika kita menulis ulang tata bahasa sebagai berikut :
A oA
A |
1
| |
2
jadi, kita langsung dapat memperluas A to oA
Left-Factoring Algorithm
Untuk setiap A non-terminal dengan dua atau lebih alternatif (aturan produksi) dengan
awalan tidak kosong umum
A o|
1
| ... | o|
n
|
1
| ... |
m
ubah menjadi
A oA
|
1
| ... |
m
A
|
1
| ... | |
n
Non-Context Free Language Constructs
Ada beberapa konstruksi bahasa dalam bahasa-bahasa pemrograman yang tidak bebas
konteks. Ini berarti bahwa, kita tidak bisa menulis tata bahasa bebas konteks untuk
konstruksi-konstruksi.
L1 = { ece | e is in (a|b)*} tidak bebas konteks
menyatakan sebuah identifier dan memeriksa apakah itu dinyatakan atau tidak nanti.
Kami tidak bisa melakukan ini dengan bahasa bebas konteks. Kita perlu analisa semantik
(yang tidak bebas konteks).
L2 = {a
n
b
m
c
n
d
m
| n>1 and m>1 } tidak bebas konteks
mendeklarasikan dua fungsi (satu dengan parameter n, yang lain dengan parameter
m), dan kemudian menyebut mereka dengan parameter aktual.