opora
KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY61 sémantickým pravidlem: „k danému else se vztahuje nejbližší předchozí then“. Poznamenejme, že i toto pravidlo lze postihnout také syntakticky: S 1 → if b then S 1 | if b then S 2 else S 1 | p S 2 → if b then S 2 else S 2 | p S použitím těchto přepisovacích pravidel obdržíme pro větu if b then if b then p else p jediný derivační strom na obr. 4.9. Obrázek 4.9: Derivační strom podmíněného příkazu Příklad 4.10 Nalezněte bezkontextovou gramatiku, která generuje správně vytvořené regulární výrazy nad abecedou {a, b}. Řešení: Velmi jednoduché řešení tohoto příkladu nabízí rekurzivní definice regulární množiny 3.9 G 0 RV = ({E}, {a, b, ɛ, +, ∗ , (, )}, P, E), kde E je jediný nonterminál popisující syntaktickou kategorii regulární výraz ɛ značí prázdný řetězec jako součást výrazu + odpovídá operaci sjednocení regulárních množin ∗ odpovídá operaci iterace regulární množiny Konkatenace se explicitně nevyznačuje. Pravidla tvořící množinu P pak vytváříme na základě definice regulární množiny: E → a | b | ɛ | E + E | EE | E ∗ | (E) Sestrojená gramatika G 0 RV je jednoduchá, má však vlastnost, která je obvykle nežádoucí – víceznačnost. Abychom vytvořili jednoznačnou gramatiku, budeme využívat analogií s gramatikou pro aritmetický výraz. Kromě nejvyšší syntaktické kategorie R popisující celý regulární výraz, zavedeme další nonterminály: K pro podvýrazy tvořené operací konkatenace I pro podvýrazy tvořené operací iterace P pro primitivní regulární výrazy
KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY62 Výsledná gramatika pak může mít tvar G RV = ({R, K, I, P }, {a, b, ɛ, +, ∗ , (, )}, P P, R), kde množina P P přepisovacích pravidel obsahuje pravidla R → R + K | K K → KI | I I → I ∗ | P P → a | b | ɛ | (R) 4.4 Rozklad věty Konstrukci derivace či derivačního stromu pro danou větu nebo větnou formu nazýváme rozkladem nebo syntaktickou analýzou této věty nebo větné formy. Program, který provádí rozklad vět určitého jazyka, se nazývá syntaktický analyzátor (anglicky také parser, to parse = rozložit). Algoritmy syntaktické analýzy lze rozdělit podle způsobu, kterým je konstruována derivace věty, tj. vytvářen derivační strom, do těchto dvou základních skupin: - syntaktická analýza shora dolů - syntaktická analýza zdola nahoru Při syntaktické analýze shora dolů začínáme derivační strom budovat od výchozího symbolu (kořene derivačního stromu) a postupnými přímými derivacemi dojdeme k terminálním symbolům, které tvoří analyzovanou větu (koncovým uzlům derivačního stromu). Problém spočívá ve správnosti volby přímých derivací, tj. pořadí používání přepisovacích pravidel. Při syntaktické analýze zdola nahoru začínáme derivační strom budovat od koncových uzlů a postupnými přímými redukcemi dojdeme ke kořenu (výchozímu symbolu gramatiky). Základním problémem této třídy syntaktických analyzátorů je hledání prvního podřetězce věty (v dalších krocích větných forem), který může být redukován k jistému nonterminálu – kořenu podstromu derivačního stromu. Tento podřetězec, jak již víme, se nazývá l-fráze. Příklad 4.11 Odlišnost obou typů syntaktické analýzy ilustrujeme na příkladě gramatiky, která generuje jazyk L = {a n b m c m d n | n ≥ 1, m ≥ 1}. Tato gramatika má pravidla kde S je výchozí symbol. S → aSd | aAd A → bAc | bc Na obr. 4.10 je uvedena konstrukce derivačního stromu metodou shora dolů spolu s odpovídající levou derivací věty abbccd. Na obr. 4.11 je znázorněna konstrukce derivačního stromu metodou zdola nahoru. Odpovídající pravá derivace je zapsána zprava doleva. Vraťme se opět k základním problémům syntaktické analýzy. Při analýze shora dolů konstruujeme levou derivaci věty. Předpokládejme, že v jistém kroku analýzy
- Page 11 and 12: KAPITOLA 2. JAZYKY, GRAMATIKY A JEJ
- Page 13 and 14: KAPITOLA 2. JAZYKY, GRAMATIKY A JEJ
- Page 15 and 16: KAPITOLA 2. JAZYKY, GRAMATIKY A JEJ
- Page 17 and 18: KAPITOLA 2. JAZYKY, GRAMATIKY A JEJ
- Page 19 and 20: KAPITOLA 2. JAZYKY, GRAMATIKY A JEJ
- Page 21 and 22: KAPITOLA 2. JAZYKY, GRAMATIKY A JEJ
- Page 23 and 24: KAPITOLA 3. REGULÁRNÍ JAZYKY 22
- Page 25 and 26: KAPITOLA 3. REGULÁRNÍ JAZYKY 24 3
- Page 27 and 28: KAPITOLA 3. REGULÁRNÍ JAZYKY 26 D
- Page 29 and 30: KAPITOLA 3. REGULÁRNÍ JAZYKY 28 2
- Page 31 and 32: KAPITOLA 3. REGULÁRNÍ JAZYKY 30 D
- Page 33 and 34: KAPITOLA 3. REGULÁRNÍ JAZYKY 32 V
- Page 35 and 36: KAPITOLA 3. REGULÁRNÍ JAZYKY 34 D
- Page 37 and 38: KAPITOLA 3. REGULÁRNÍ JAZYKY 36 V
- Page 39 and 40: KAPITOLA 3. REGULÁRNÍ JAZYKY 38 D
- Page 41 and 42: KAPITOLA 3. REGULÁRNÍ JAZYKY 40 3
- Page 43 and 44: KAPITOLA 3. REGULÁRNÍ JAZYKY 42 3
- Page 45 and 46: KAPITOLA 3. REGULÁRNÍ JAZYKY 44 V
- Page 47 and 48: KAPITOLA 3. REGULÁRNÍ JAZYKY 46 3
- Page 49 and 50: KAPITOLA 3. REGULÁRNÍ JAZYKY 48 P
- Page 51 and 52: KAPITOLA 3. REGULÁRNÍ JAZYKY 50 3
- Page 53 and 54: KAPITOLA 3. REGULÁRNÍ JAZYKY 52 C
- Page 55 and 56: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 57 and 58: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 59 and 60: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 61: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 65 and 66: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 67 and 68: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 69 and 70: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 71 and 72: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 73 and 74: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 75 and 76: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 77 and 78: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 79 and 80: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 81 and 82: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 83 and 84: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 85 and 86: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 87 and 88: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 89 and 90: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 91 and 92: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 93 and 94: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 95 and 96: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 97 and 98: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 99 and 100: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 101 and 102: Kapitola 5 Turingovy stroje Cílem
- Page 103 and 104: KAPITOLA 5. TURINGOVY STROJE 102 5.
- Page 105 and 106: KAPITOLA 5. TURINGOVY STROJE 104
- Page 107 and 108: KAPITOLA 5. TURINGOVY STROJE 106 L:
- Page 109 and 110: KAPITOLA 5. TURINGOVY STROJE 108 St
- Page 111 and 112: KAPITOLA 5. TURINGOVY STROJE 110 p
KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY61<br />
sémantickým pravidlem: „k danému else se vztahuje nejbližší předchozí then“.<br />
Poznamenejme, že i toto pravidlo lze postihnout také syntakticky:<br />
S 1 → if b then S 1 | if b then S 2 else S 1 | p<br />
S 2 → if b then S 2 else S 2 | p<br />
S použitím těchto přepisovacích pravidel obdržíme pro větu if b then if b then<br />
p else p jediný derivační strom na obr. 4.9.<br />
Obrázek 4.9: Derivační strom podmíněného příkazu<br />
Příklad 4.10 Nalezněte bezkontextovou gramatiku, která generuje správně vytvořené<br />
regulární výrazy nad abecedou {a, b}.<br />
Řešení: Velmi jednoduché řešení tohoto příkladu nabízí rekurzivní definice regulární<br />
množiny 3.9 G 0 RV = ({E}, {a, b, ɛ, +, ∗ , (, )}, P, E), kde<br />
E je jediný nonterminál popisující syntaktickou kategorii regulární výraz<br />
ɛ značí prázdný řetězec jako součást výrazu<br />
+ odpovídá operaci sjednocení regulárních množin<br />
∗ odpovídá operaci iterace regulární množiny<br />
Konkatenace se explicitně nevyznačuje. Pravidla tvořící množinu P pak vytváříme<br />
na základě definice regulární množiny:<br />
E → a | b | ɛ | E + E | EE | E ∗ | (E)<br />
Sestrojená gramatika G 0 RV je jednoduchá, má však vlastnost, která je obvykle<br />
nežádoucí – víceznačnost. Abychom vytvořili jednoznačnou gramatiku, budeme<br />
využívat analogií s gramatikou pro aritmetický výraz. Kromě nejvyšší syntaktické<br />
kategorie R popisující celý regulární výraz, zavedeme další nonterminály:<br />
K pro podvýrazy tvořené operací konkatenace<br />
I pro podvýrazy tvořené operací iterace<br />
P pro primitivní regulární výrazy