Formális nyelvek – blogdot

blogdot

bölcsészmérnök akcióban

Formális nyelvek

És most egy kicsit más téma: formális nyelvek, avagy nyelvtan a nyelvtanhoz.

Képzeljünk el egy egyszerű magyar mondatot: “Léna megy a boltba.” Van benne egy alany, egy állítmány, és egy helyhatározó, egészen pontosan egy véghatározó (azaz valahova megy, nem valahonnan, stb.). Az emberek azonnal felismerik minden mondat értelmét és azonosítani tudják a mondat alanyát, állítmányát, tárgyát még ha nem is gondolkoznak el rajta.

(Nem akarok felvágni, de pont ebből buktattak meg majdnem érettségin. De csak azért is ez lesz a szakdogám!)

Ugye vannak ilyen kis kérdések amiket fel lehet tenni egy mondattal kapcsolatban, és megtudjuk, hogy melyik szó milyen szerepet tölt be. Ilyenekre gondolok, hogy “mit állítok?” — “megy” — “ki megy?” — “Léna” — “hova megy?” — “boltba.” Ezután fel tudjuk rajzolni a mondatot a részei alapján, valahogy így:

A névelőt a boltba előtt elhanyagoljuk.

Az alany és a helyhatározó az állítmánynak vannak alárendelve, azaz tekinthető az állítmány gyermekének, mert arra kérdezünk rá (ki megy, hova megy — nyilván nem emiatt, de bölcsészmérnök leszek nem nyelvész). Ennél az egyszerű mondatszerkezetnél nem muszáj pontosan ezeket a szavakat használnunk, hanem bármit lehet, ami behelyettesíthető az állítmány, alany, és a helyhatározó szerepébe. A fenti mondat tehát helyettesíthető ezzel a nyelvtannal:

“Alany állítmány helyhatározó.” Nyelvtan alatt egy absztrakciót értünk, ahol helyettesítjük az aktuális szavakat a mondatban betöltött szerepével.

Vettem néhány cikket egy híroldalról, és véletlenszerűen kiválasztottam 3-3 szót amik beillettek ebbe a nyelvtanba:

Feltehetnénk további kérdéseket is, amikkel kibővíthetjük a nyelvtanunkat, kibővíthetjük a mondatot, mert így eléggé kevés és furán hangzik. Mit talál Hamilton New Yorkban? Mit rendez Rockefeller Törökországban? Mit vezet James Bond Prágában? Ezekre választ úgy tudunk adni, ha beillesztünk egy új mondatrészt, a tárgyat, az állítmány alárendeltjeként:

Jó, jó, szépek ezek az ábrák, meg fel tudok vágni, hogy van egy olcsó rajztáblám, amikor nem is tudok rajzolni, de nem lehetne ezeket szövegesen leírni?

Vezessük be a következő jelöléseket: helyettesítse az állítmány, az alany, és a helyhatározó önmagát.

állítmány: alany SZÓ helyhatározó

Rendben, sikerült elérnünk valamit. Ez a nyelvtani szabály leírja, hogy van az állítmányunk, ami áll egy alanyból, egy SZÓ-ból, és egy helyhatározóból, ebben a sorrendben. Az állítmány, az alany, és a helyhatározó úgynevezett nemterminális, mert az ábrában van alattuk lévő cucc (konkrétan maga a “fizikai” szó). A nagybetűs SZÓ pedig egy terminális, azaz nem áll alatta más cucc (ő maga a “fizikai” szó).

Tudom, nagyon professzionális szavakat használok.

Addig kell felírnunk a szabályokat, amíg le nem írtuk az összes nemterminálist valamilyen terminálissal:

alany: SZÓ
helyhatározó: SZÓ

Oké, nem olyan nehéz. Lényegében minden egy SZÓ-ra helyettesítődik. De mi az a SZÓ? Gondoljunk bele: egy magyar szó állhat az ábécé betűinek valamilyen kombinációjából, legalább egy karakter, és nincs effektív maximális hossza:

SZÓ: ANYCHAR+

Hé, ez csalás. Mi az az ANYCHAR? Ez a terminális fogja helyettesíteni azokat a betűket, amikből egy szó állhat: a magyar ábécé összes betűje. Akit érdekel, hogy ez a szabály miből állhat, görgessen le a bejegyzés aljára.

Tehát így néz ki a teljes nyelvtani leírásunk a fenti példamondatra:

állítmány: alany SZÓ helyhatározó
alany: SZÓ
helyhatározó: SZÓ
SZÓ: ANYCHAR+

És próbáljuk ki a példamondatra (a névelőt megint elhanyagoljuk):

Ez pont ugyanaz, mint az egyszerűsített ábra amit mindannyian tanultunk általános iskolában, csak kiegészítve a nemterminális elemekkel, amiknek a használatával csak egyszer kell leírnunk, hogy mit értünk egy szó alatt, és bárhol felhasználhatjuk.

És akkor gondolhatnánk, hogy le lehetne-e írni a magyar nyelvet ilyen nyelvtannal, és a válasz az, hogy nem. Azért, mert 1. borzasztó nagy munka lenne és 2. mert a természetes nyelv környezetfüggő, és kérdéses, hogy mekkora részét lehet leírni ilyen, környezetfüggetlen nyelvtannal. De ha mégse ezért, akkor kérdezzétek Noam Chomsky-t

Viszont az egy fontos eleme Chomsky 1957-es Syntactic Structures című művének, hogy meg kell különböztetni a szintaktikát és a szemantikát. Azaz: az egyik nem vonja maga után a másikat: lehet olyan helyettesítés ami szintaktikailag helyes, de szemantikailag rossz és fordítva is.

Ha szintaktikailag okés a helyettesítés, de szemantikailag nem, azt nem könnyű megoldani. Miután értelmeztük a mondatot a szabályok alapján, már fel tudjuk dolgozni az értelmük alapján. Szóval meg tudjuk nézni, hogy maguk a szavak léteznek-e (ha prescriptive nyelvünk van), illetve, hogy a mondatnak van-e értelme (például: fizikailag létezik-e az a hely, ahova menni akarunk, az a fizikai ige létezik-e amit cselekednénk, stb.).

Mivel már relative hosszú lett ez a bejegyzés, a következő részben lesz az átmenet formális nyelv és programozási nyelv között, utána pedig a szöveg feldolgozása lesz a téma, a lexer/parser párossal, mígnem eljutunk egy egyszerű programozási nyelvig.


ANYCHAR: [a-z] | ANY_HUN_CHAR
ANY_HUN_CHAR: 'á' | 'í' | 'ű' | 'ő' | 'ü' | 'ö' | 'ú' | 'ó' | 'é'

Az [a-zA-Z] azt jelenti, hogy bármelyik kisbetű az angol ábécéből, a függőleges vonal a logikai VAGY művelet, és az ANY_HUN_CHAR meg listázza a magyar ékezetes betűket, amik nincsenek benne az angol ábécében.