przegląd

Transkrypt

przegląd
Wykład 6, str. 1
Działania na językach
Iteracja:
L∗ def
=
u1 u2 . . . u n u1 , u2 , . . . , u n ∈ L i n ­ 0
L∗ = Λ | L | L2 | L3 | . . . = {λ} | L | LL | LLL | . . .
TWIERDZENIE: (rozwiązywanie równania językowego)
M
Rozwiązaniem równania X = L | XM jest X = LM ∗ .
Dowód:
Jeśli X = LM ∗ to
X = LM ∗ = L (Λ | M | M 2 | M 3 | . . .)
= LΛ | LM | LM 2 | LM 3 | . . .
= L | (LM | LM 2 | LM 3 | . . .)
= L | L (Λ | M | M 2 | . . .) M
= L | LM ∗M = L | XM
Wykład 6, str. 2
Uproszczony schemat kompilacji
program
źródłowy
✕
analiza
leksykalna
ciąg
leksemów
✕
drzewo
wywodu
analiza
syntaktyczna
analiza
semantyczna
KOMPILATOR
generacja
kodu
✕
drzewo i
tablice
symboli
✯
kod
qqqqqqqqqq
qqqqqqqq
qqq
docelowy
qq qqq
qqq
qqq
qqq
qqq
qq
q
dane do
wyniki
programu
Wykład 6, str. 3
Uproszczony schemat kompilacji
program
źródłowy
✕
ciąg
leksemów
analiza
leksykalna
KOMPILATOR
Wykład 6, str. 4
Analizator leksykalny czyli skaner — przykład
Mamy rozdzielić wejściowy ciąg symboli na leksemy :
• słowa kluczowe: BEG, END (wielkość liter nieistotna)
• znaki operacji: +, *
• liczby całkowite postaci hcyfraihcyfrai∗
• komentarze postaci /* hcokolwieki */
• separatory postaci hspacjaihspacjai∗
Przykład:
M
b E G|1 2|
|+|*| |/ *
koment
*
/arz
* /|5 3 1
Wykład 6, str. 5
Analizator leksykalny czyli skaner — przykład
✲ pocz
B✲
E✲
b
E✲
e
N✲
be
G
en
D
• słowa kluczowe: BEG, END
(wielkość liter nieistotna)
• znaki operacji: +, *
• liczby całkowite
postaci hcyfraihcyfrai∗
• komentarze postaci
/* hcokolwieki */
• separatory postaci
hspacjaihspacjai∗
q
klucz
✶
+✲ oper
*
.............................
....hcyfrai
✲ licz
..
.
.
.......................... .
hcyfrai
❦
/✲
ciach
*✲ cgw
............
... .....*
...
...
.
....
..
...
.
.
.
❫.
*✲cgwgw /✲
..............
.
....
..
... .....................
■
.
✣...
.
..
...................................
.
. .. ...
✲ separ
... ............
.
.
.
.
.........................
hspacjai
❦
koment
hspacjai
Wykład 6, str. 6
Analizator leksykalny czyli skaner — przykład
Funkcja przejścia:
pocz
b
be
e
en
licz
ciach
cgw
cgwgw
separ
b
b
e
e
be
g
n
d
pl
gw cyf ciach sp nieokr
oper oper licz ciach separ
klucz
en
klucz
licz
cgw
cgw cgw cgw cgw cgw cgw cgwgw cgw cgw cgw cgw
cgw cgw cgw cgw cgw cgw cgwgw cgw koment cgw cgw
separ
Uwagi:
• funkcja przejścia automatu skończonego stany × znaki → stany
• zbiór znaków rozszerzony o znak nieokr : „ jakikolwiek inny”
• puste miejsca oraz brakujące wiersze oznaczają „stan śmietnikowy”