Úvod do lexikálnej analýzy.

Ciele

  1. Zopakovať si definíciu gramatiky a porozumieť odvodeniu gramatiky zo špecifikácie jazyka.
  2. Naučiť sa definovať gramatiku jazyka pomocou BNF.
  3. Diskusia a priebežná kontrola.

Úvod

Pretože gramatiky majú v oblasti prekladačov nezastupiteľnú rolu, je ďalším cieľom pochopenie vzťahu medzi gramatikou a jazykom a následné odvodenie gramatiky z danej špecifikácie jazyka.

Postup

Krok 1

Gramatika je usporiadaná štvorica G = (N, T, P, S), kde:

  • N je množina neterminálnych symbolov,
  • T je množina terminálnych symbolov,
  • P je množina pravidiel,
  • S je počiatočný (štartovací) symbol gramatiky.

Úloha 1.1

Je daná gramatika G = ({S, A, B}, {a, b, c}, P, S) s nasledujúcimi pravidlami:
S → BAB | ABA
A → AB | aA | ab
B → BA | b

a) Určte typ gramatiky.
b) Nájdite odvodenie slova abbbab v danej gramatike.

Krok 2

Na vyjadrenie gramatiky jazyka sa väčšinou používa Backusova-Naurova forma (BNF), prípadne niektoré jej rozšírenia. Na tomto predmete to bude rozšírená Backusova-Naurova forma (Extended BNF).

Základnými prvkami gramatiky sú pravidla a symboly, pričom symboly môžu byť terminálne (také, ktoré môžu byť prítomné na vstupe), alebo neterminálne. Pravidla budeme zapisovať v takomto tvare:

neterminal → postupnosť symbolov a operátorov

Pri zápisoch budeme používať tie isté operátory, aké boli použité v zápisoch regulárnych výrazov a v regulárnych jazykoch.

Zápis Význam
| alternatíva
{} opakovanie 0 alebo viac krát
[] voliteľnosť

Ako príklad uveďme jazyk pre vyjadrenie štruktúr údajov (entít), s ktorými pracuje aplikácia. Pre každú štruktúru je uvedený jej názov a zoznam vlastností spolu s ich typmi. Napríklad firemná aplikácia môže pracovať s údajmi o oddeleniach a osobách. Na vyjadrenie toho, že niektoré vlastností sú povinné, je možné použiť kľúčové slovo "required". Veta v tomto jazyku môže teda vyzerať napríklad takto:

entity Person
    name : string required
    age : int
    salary : real
end
entity Department
    name : string required
    description : string
end

Gramatiku tohto jazyka môžeme vyjadriť napríklad naseldujúcim spôsobom ( id a reťazce v úvodzovkách predstavujú terminálne symboly):

Entities → { Entity }
Entity   → "entity" id { Property } "end"
Property → id ":" Type [ "required" ]
Type     → "int" | "real" | "string"

Úloha 2.1

Definujte syntax jazyka konfiguračných parametrov. Parametre majú tvar "názov = hodnota", pričom hodnota môže byť celé číslo, alebo pravdivostná hodnota označená kľučovým slovom yes alebo no. Parametre sú zaradené do sekcií a každá sekcia musí začínať názvom uvedeným v hranatých zátvorkach. Príklad:

[window]
maximized = no
width = 420
height = 300
 
[history]
store = yes
limit = 120

Krok 3

Spolu s pedagógom prediskutuje riešenia vybraných úloh z predošlého cvičenia.