30
Lexikálna analýza

Lexikálna analýza

  • Upload
    ailani

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

Lexikálna analýza. LA ako súčasť prekladača. Je prvou časťou prekladača Robí analýzu – na prvej úrovni – zisťuje gramatickú správnosť Robí ďalšie služby podľa požiadavky (i možností) aby sa ďalšia činnosť prekladača zjednodušila Spolupracuje so SA. Úloha LA. - PowerPoint PPT Presentation

Citation preview

Page 1: Lexikálna analýza

Lexikálna analýza

Page 2: Lexikálna analýza

LA ako súčasť prekladača

Je prvou časťou prekladača Robí analýzu – na prvej úrovni – zisťuje

gramatickú správnosť Robí ďalšie služby podľa požiadavky (i

možností) aby sa ďalšia činnosť prekladača zjednodušila

Spolupracuje so SA

Page 3: Lexikálna analýza

Úloha LA

Nájdenie a rozpoznanie lexikálnych jednotiek

Zakódovanie lexikálnych jednotiek Vynechanie nepotrebných reťazcov Výpočet syntetizovaných atribútov

lexikálnych jednotiek ako terminálnych symbolov – najčastejšie textový tvar a jeho dĺžku

Page 4: Lexikálna analýza

Vzťak k SA

LA ako samostatná fáza – sekvenčný postup

Reťazec znakov ZP

LA Reťazec lexikálnych jednotiek ZP

SA

Page 5: Lexikálna analýza

Vzťah k SA

Ako podprogram SA – na požiadanie vytvorí a dodá ďalšiu lexikálnu jednotku zo vstupu

SA

Požiadavka ďalšieho symbolu

LAReťazec znakov ZP

Ďalší symbol/LJ ZP

Page 6: Lexikálna analýza

Lexikálne jednotky – zaradenie do tried Z hľadiska analýzy nie je potrebné poznať všetky

konkrétnosti lexikálnych jednotiek – výraz je napr. a+b, 3-(a+b), atď.

Lexikálne jednotky spájame do tried, ktorých počet je pre ľubovolný programovací jazyk pomerne malý:

a. Číselné a logické hodnotyb. Obmedzovače netextového charakteru, ako +, -, :=, /

ap.c. Obmedzovače textové, ako if, else, dod. identifikátory

Page 7: Lexikálna analýza

Model lexikálneho analyzátora

Modelom LA je konečný automat

Poznámka: vieme už, že problémy môžu byť s determinizmom. Vieme však, že ku každému nedeterministickému KA existuje ekvivalentný deterministický KA.

Page 8: Lexikálna analýza

Konštrukcia LA

LA konštruujeme z RG, ktorá špecifikuje lexikálne jednotky

Konštrukcia:

Nech G = (N, T, P, S) je RG, potom možno skonštruovať KA K = (Q, T, , q0, F) taký, že L(K) = L(G) takto:

Page 9: Lexikálna analýza

Konštrukcia LA Cont.

Konštrukcia:Q = N {A}, pričom A NT = T

q0 = S F = {S, A} ak S e P ; inak F = { A } : pre všetky a T, B N, C N platí: ak B a P tak A (B, a) ak B aC P tak C (B, a) (A, a) = ø

Page 10: Lexikálna analýza

Jazyk lexikálnych jednotiek

Treba vytvoriť gramatiky – regulárne pre jednotlivé triedy LJ

Zjednodušíme si zápis tým, že symboly písmeno a číslica budú terminály a budú reprezentovať všetky písmená a číslice

Prvky z jednotlivých tried obmedzíme

Page 11: Lexikálna analýza

Gramatiky pre jednotlivé triedy

<identifikátor> písmeno | písmeno <zvyšok identifikátora>

<zvyšok identifikátora> písmeno |

písmeno <zvyšok identifikátora> |

číslica | číslica <zvyšok identifikátora>

<celé číslo> číslica | číslica <celé číslo>

<obmedzovač> + | - | x | / | ; | : <rovná sa> | / <hviezdička> |

* <lomeno>

<rovná sa> =

<hviezdička> *

<lomeno> /

Page 12: Lexikálna analýza

Kompozícia gramatík pre triedy

Vytvoríme teraz jednu gramatiku so začiatočným symbolom <lexikálna jednotka>

<lexikálna jednotka> písmeno | písmeno <zvyšok identifikátora> | číslica | číslica <celé číslo> | + | - | x | / | ; | : <rovná sa> | / <hviezdička> | * <lomeno><zvyšok identifikátora> písmeno | písmeno <zvyšok identifikátora> | číslica | číslica <zvyšok identifikátora><celé číslo> číslica | číslica <celé číslo><rovná sa> =<hviezdička> *<lomeno> /

Page 13: Lexikálna analýza

Konštrukcia KA – reprezentácia Stavovým diagramom

lexikálna jednotka K

písmeno | číslica | + | - | x | / | ;

zvyšok identifikátora

písmenopísmeno | číslica

celé čísločíslica číslica

rovná sa: =

hviezdička

lomeno

/ *

* /

Page 14: Lexikálna analýza

Problémy vytvoreného automatu

Hlavným problémom je jeho nedeterminizmus Vieme, že existuje ekvivalentný deterministický

automat My ho môžeme vytvoriť „dekompozíciou“

koncového stavu tak, že vytvoríme koncové stavy pre jednotlivé triedy lexikálnych jednotiek

Budeme mať koncové stavy: zvyšok identifikátora + K, celé číslo + K,

hviezdička + K, K

Page 15: Lexikálna analýza

Nový stavový diagram

lexikálna jednotka

K

+ | - | x | ;

zvyšok identifikátora +K

písmeno

písmeno

celé číslo+K

číslica

číslica

rovná sa: =

hviezdička+K

lomeno

/ *

* /

číslica

Page 16: Lexikálna analýza

Vlastnosti nového automatu

Je deterministický, ale:Nemá rovnaký spôsob rozpoznania lexikálnych jednotiek.Podľa definície, reťazec patrí do jazyka, ak ho KA prijme, teda dostane

sa do koncovej konfigurácie (qf , e). Teraz však nasledujú lexikálne jednotky „za sebou“, čo treba zobrať do

úvahyInterpretácia „prázdneho vstupu“ je taká, že na vstupe je symbol, ktorý

„nepatrí“ rozpoznávanej lexikálnej jednotke – prečítali sme „iný“ symbol .

Týmto „iným“ symbolom ohodnotíme hranu, ktorou prejdeme do nového koncového stavu – koniec LJ

Rozpoznávanie tak „rozšírime“ o jeden krok. Dostaneme nasledujúci automat

Page 17: Lexikálna analýza

Rozpoznávanie postupnosti reťazcov

lexikálna jednotka

K

+ | - | x | ;

zvyšok identifikátora +K

písmeno

písmeno

celé číslo+K

číslica

číslica

rovná sa: =

hviezdička+K

lomeno

/*

* /

číslica

Koniec LJ

inak

inak

inakinak

Page 18: Lexikálna analýza

Začiatok lexikálnej jednotky

Na prvý pohľad je začiatok lexikálnej jednotky jasný

Ak však lexikálne jednotky nasledujú za sebou – ako je to v prípade programu – situácia nie je taká jasná

Problémom môže byť už zmienený symbol „inak“

Treba zabezpečiť, aby sme ho „nestratili”

Page 19: Lexikálna analýza

Explicitné a implicitné LJ

Lexikálne jednotky možno rozdeliť na - explicitne definované - implicitne definované Explicitne definované LJ rozpoznáme po prečítaní jej

posledného symbolu (nepotrebujeme teda symbol „inak“) – napr. +, -, :=, ...

Implicitne definované LJ rozpoznáme až po prečítaní symbolu , ktorý jej nepatrí (potrebujeme teda symbol „inak“) – napr. identifikátor, celé číslo, ...

Zjednotenie je cez hranu „inak“ pre všetky LJ

Page 20: Lexikálna analýza

Rozpoznanie kľúčových slov jazyka Kľúčové slová programovacieho jazyka sú

„identifikátory so špeciálnym významom“. LA ich môže rozpoznať rôznym spôsobom

- pomocou tabuľky symbolov, kde ich

možno uchovávať

- ich predznačením špeciálnym symbolom-

zvyčajne apostrof

Page 21: Lexikálna analýza

Model LA – preklad

Ďalšou úlohou LA po rozpoznaní LJ je ich zakódovanie

Zakódovanie LJ je ich zápis v inom jazyku – teda preklad

Do tejto kategórie prác patrí aj uchovanie informácií o LJ, ako ich textový tvar a dĺžka – pomáha nám pri uchovávaní a následnom vyhľadávaní LJ

Page 22: Lexikálna analýza

Triedy LJ

LJ možno rozdeliť do neveľkého počtu tried Každá trieda reprezentuje LJ, ktoré majú z

hľadiska analýzy rovnaký význam Nami používané LJ - čiastočne rozšírené

možno zakódovať takto

Page 23: Lexikálna analýza

Zakódovanie LJ

Lexikálna jednotka kód

identifikátor 1

celé číslo 2

/* 3

*/ 4

+ 5

- 6

x 7

/ 8

:= 9

; 10

else 11

Page 24: Lexikálna analýza

Prekladový automat na zakódovanie LJ Prekladový automat na zakódovanie LJ

budeme reprezentovať stavovým diagramom

Ohodnotenie hrán bude mať tvar i/o , kde „i“ bude vstupný symbol, „o“ bude výstupný symbol

Kľúčové slová budú „predznačené“ apostrofom

Page 25: Lexikálna analýza

Stavový diagram KPA

lexikálna jednotka

K

+/5 | -/6 | x/7 | ;/10

zvyšok identifikátora +K

písmeno / e

e / písmeno

celé číslo+K

číslica /e

e/číslica

rovná sa: / e = / 9

hviezdička+K

lomeno

/ | e* / 3

* / e / | 4

e / číslica

Koniec LJ

inak / 1

inak / 2

inak/8inak

kľúčové slovo‘/e 1e/e

2l/e

3s/e e/11

Page 26: Lexikálna analýza

Textový tvar a dĺžka LJ

Použijeme prekladovú gramatiku pre kódovanie

Zaujíma nás iba LJ identifikátor Výstupný symbol označíme vs

Page 27: Lexikálna analýza

Prekladová gramatika pre text identifikátoraG = ({LJ, ID}, {p, č, inak} {vs}, P, LJ )P: LJ p ID ID p ID ID č ID ID inak vsPG rozšírime o spracovanie textového tvaru

identifikátora a jeho dĺžkuAtribúty: d – dĺžka identifikátora tti – textový tvar identifikátora

Page 28: Lexikálna analýza

APG

Syntax Sémantika LJ p ID ID.d := 1 ID.tti := p.kód

ID p ID ID1.d := ID0.d + 1

ID1.tti := ID0.tti || p.kód

ID č ID ID1.d := ID0.d + 1

ID1.tti := ID0.tti || č.kód ID inak vs vs.d := ID.d vs.tti := ID.tti

Page 29: Lexikálna analýza

Vynechanie nepotrebných symbolov Ide o komentáre Reťazce pri zvýšenie čitateľnosti programu

Page 30: Lexikálna analýza

OK