Mi a szintaktikai elemzés?
A szintaktikai elemzés a fordító tervezési folyamatának második fázisa, amelyben az adott bemeneti karakterláncot ellenőrzik a formális nyelvtan szabályainak és szerkezetének megerősítésére. Elemzi a szintaktikai felépítést és ellenőrzi, hogy az adott bemenet a programozási nyelv helyes szintaxisában van-e vagy sem.
A szintaxiselemzés a fordító tervezésében a Lexical elemzési szakasz után következik. Parse Tree vagy Syntax Tree néven is ismert. Az elemzési fát a nyelv előre meghatározott nyelvtanának segítségével fejlesztjük. A szintaxis analizátor azt is ellenőrzi, hogy egy adott program megfelel-e a kontextusmentes nyelvtan által feltételezett szabályoknak. Ha kielégítő, akkor az elemző létrehozza a forrásprogram elemzési fáját. Ellenkező esetben hibaüzeneteket jelenít meg.
Ebben az oktatóanyagban megtanulja
- Miért van szükség a Syntax Analyzer-re?
- Fontos szintaktikai elemző terminológia
- Miért van szükség elemzésre?
- Elemzési technikák
- Hiba - helyreállítási módszerek
- Nyelvtan:
- Jelölési egyezmények
- Kontextusmentes nyelvtan
- Nyelvtani levezetés
- Szintaxis vs. Lexical Analyzer
- A szintaxis analizátorok használatának hátrányai
Miért van szükség a Syntax Analyzer-re?
- Ellenőrizze, hogy a kód nyelvtanilag érvényes-e
- A szintaktikai elemző segít szabályokat alkalmazni a kódra
- Segít megbizonyosodni arról, hogy minden nyitómerevítőnek megfelelő zárómérlege van
- Minden deklarációnak van egy típusa, és a típusnak léteznie kell
Fontos szintaktikai elemző terminológia
A szintaktikai elemzés során használt fontos terminológiák:
- Mondat: A mondat egy ábécé fölötti karaktercsoport.
- Lexeme: A lexéma a nyelv legalacsonyabb szintaktikai egysége (pl. Total, start).
- Token: A token csak a lexémák kategóriája.
- Kulcsszavak és fenntartott szavak - Ez egy azonosító, amelyet az utasítás szintaxisának rögzített részeként használnak. Ez egy fenntartott szó, amelyet nem használhat változó névként vagy azonosítóként.
- Zajos szavak - A zaj szavak nem kötelezőek, amelyeket a mondat olvashatóságának javítása érdekében egy utasításba illesztenek be.
- Megjegyzések - Ez egy nagyon fontos része a dokumentációnak. Leginkább a / * * / vagy // Üres (szóközök)
- Elhatárolók - Ez egy szintaktikai elem, amely valamilyen szintaktikai egység kezdetét vagy végét jelöli. Hasonlóan egy állításhoz vagy kifejezéshez, a "begin" ... "end" vagy a {}.
- Karakterkészlet - ASCII, Unicode
- Azonosítók - A hosszúságra vonatkozó korlátozások segítenek csökkenteni a mondat olvashatóságát.
- Az operátor szimbólumok - + és - két számtani alapműveletet hajtanak végre.
- A nyelv szintaktikai elemei
Miért van szükség elemzésre?
Egy elemzés azt is ellenőrzi, hogy a bemeneti karakterlánc jól formált-e, és ha nem, akkor elutasítja.
A következő fontos feladatokat hajtja végre az elemző a fordító tervezésében:
- Segít felismerni a szintaktikai hibák minden típusát
- Keresse meg azt a helyet, ahol a hiba történt
- A hiba egyértelmű és pontos leírása.
- Helyreállítás egy hibából a folytatáshoz, és további hibák kereséséhez a kódban.
- Nem befolyásolhatja a "helyes" programok összeállítását.
- Az elemzésnek el kell utasítania az érvénytelen szövegeket a szintaktikai hibák jelentésével
Elemzési technikák
Az elemzési technikák két különböző csoportra oszthatók:
- Felülről lefelé értelmezés,
- Alulról felfelé történő elemzés
Felülről lefelé történő elemzés:
A felülről lefelé történő elemzés során az elemző fa a gyökérnél kezdődik, majd a levelek felé halad.
A fentről lefelé irányuló elemzés kétféle:
- Prediktív elemzés:
A prediktív elemzés megjósolhatja, hogy melyik produkciót kell használni az adott bemeneti karakterlánc helyettesítésére. A prediktív elemző előretekintő pontot használ, amely a következő bemeneti szimbólumok felé mutat. A visszalépés nem kérdés ebben az elemzési technikában. LL (1) elemző néven ismert
- Rekurzív süllyedés elemzése:
Ez az elemzési technika rekurzívan elemzi a bemenetet egy prase fa készítéséhez. Számos apró funkcióból áll, egy-egy a nyelvtan minden terminál nélküli részéhez.
Alulról felfelé történő elemzés:
Az alulról felfelé történő elemzés során a fordító tervezésében az elemző fa építése a szabadsággal kezdődik, majd a gyökere felé halad. Shift-csökkentő elemzésnek is nevezik. Az ilyen típusú elemzés a fordító tervezésében néhány szoftvereszköz használatával jön létre.
Hiba - helyreállítási módszerek
A rendszerszoftver elemzésénél előforduló gyakori hibák
- Lexikai : Helytelenül beírt azonosító neve
- Szintaktikus : kiegyensúlyozatlan zárójel vagy hiányzó pontosvessző
- Szemantikai szempontból : összeférhetetlen érték-hozzárendelés
- Logikai : Végtelen hurok és nem elérhető kód
Az elemzőnek képesnek kell lennie a programban talált hibák észlelésére és jelentésére. Tehát, amikor hiba történt, az elemző. Képesnek kell lennie annak kezelésére és a fennmaradó bemenet elemzésére. Egy programnak a fordítási folyamat különböző szakaszaiban a következő típusú hibái lehetnek. Öt gyakori hiba-helyreállítási módszer létezik, amelyeket az elemzőben lehet megvalósítani
Az utasítás mód helyreállítása
- Abban az esetben, ha az elemző hibával találkozik, ez segít a korrekciós lépések megtételében. Ez lehetővé teszi a többi bemenet és állapot előre elemzését.
- Például hiányzó pontosvessző hozzáadása utasítás módú helyreállítási módszerrel történik. Az elemző tervezőnek azonban körültekintőnek kell lennie a változtatások végrehajtása során, mivel egy hibás javítás végtelen ciklushoz vezethet.
Pánik módú helyreállítás
- Abban az esetben, ha az elemző hibával találkozik, ez az üzemmód figyelmen kívül hagyja az utasítás többi részét, és nem dolgozza fel a hibás bemenetről a határolóra történő bemenetet, például egy pontosvesszőt. Ez egy egyszerű hiba-helyreállítási módszer.
- Az ilyen típusú helyreállítási módszerben az elemző egyenként elutasítja a bemeneti szimbólumokat, amíg a szinkronizálási tokenek egyetlen kijelölt csoportját meg nem találja. A szinkronizáló tokenek általában olyan elválasztókat használnak, mint a vagy.
Frázis szintű helyreállítás:
- A Compiler javítja a programot tokenek beillesztésével vagy törlésével. Ez lehetővé teszi, hogy tovább elemezze, ahol volt. Javítást hajt végre a fennmaradó bemeneten. Helyettesítheti a fennmaradó bemenet előtagját néhány karakterlánccal, ez segít az elemzőnek a folyamat folytatásában.
Hiba Productions
- A hibagyártás helyreállítása kibővíti a téves konstrukciókat előállító nyelv nyelvtanát. Ezután az elemző hibadiagnosztikát végez az adott konstrukcióval kapcsolatban.
Globális korrekció:
- A fordítónak a lehető legkevesebb számú változtatást kell végrehajtania a helytelen bemeneti karakterlánc feldolgozása közben. Helytelen beviteli a és a c nyelvtan esetén az algoritmusok elemzik a kapcsolódó b karakterlánc elemét. Mint egyes beillesztések, a törlések és az a b-vé történő átalakításához szükséges tokenekből készült módosítás is a lehető legkevesebb.
Nyelvtan:
A nyelvtan a nyelvet leíró szerkezeti szabályok összessége. A nyelvtanok bármilyen mondathoz struktúrát rendelnek. Ez a kifejezés ezen szabályok tanulmányozására is utal, és ez a fájl magában foglalja a morfológiát, a fonológiát és a szintaxist. Képes leírni sok programozási nyelv szintaxisát.
A forma nyelvtan szabályai
- A nem terminális szimbólumnak legalább egy produkció bal oldalán kell megjelennie
- A cél szimbólumot soha ne jelenítsék meg bármelyik produkció :: = jobb oldalán
- A szabály rekurzív, ha az LHS megjelenik az RHS-ben
Jelölési egyezmények
A jelölési konvenciók szimbólumát az elem szögletes zárójelbe zárásával jelölhetjük. Ez az elem tetszőleges sorrendje, amelyet úgy lehet jelezni, hogy az elemet zárójelbe csatoljuk, majd egy csillag szimbólum, {…} *.
Olyan alternatíva választása, amely a szimbólumot egyetlen szabályon belül használhatja. Szükség esetén zárójel ([,]) zárhatja be.
A jelölési konvenciók két típusa a Terminál és a Nem terminál
1. Terminálok:
- Az ábécé kisbetűi, például a, b, c,
- Operátor szimbólumok, például +, -, *, stb.
- Írásjelek, például zárójelek, hash, vessző
- 0, 1,…, 9 számjegy
- Félkövér karakterláncok, például id vagy if, bármi, ami egyetlen terminál szimbólumot képvisel
2. Nem terminálok:
- Nagybetűk, például A, B, C
- Kisbetűs dőlt betűs nevek: a kifejezés vagy néhány
Kontextusmentes nyelvtan
A CFG egy balra rekurzív nyelvtan, amely legalább egy ilyen típusú produkcióval rendelkezik. A kontextusmentes nyelvtan szabályai főleg rekurzívak. A szintaxis analizátor ellenőrzi, hogy egy adott program megfelel-e a kontextusmentes nyelvtan összes szabályának, vagy sem. Ha megfelel, ezek a szabályok szintaktikai elemzői létrehozhatnak egy elemző fát az adott programhoz.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Nyelvtani levezetés
A nyelvtani levezetés egy olyan nyelvtani szabálysorozat, amely a kezdő szimbólumot stringekké alakítja. Egy levezetés bizonyítja, hogy a húr a nyelvtan nyelvéhez tartozik.
A bal oldali származtatás
Amikor a bemenet sentenciális formáját balról jobbra sorrendben szkennelik és cserélik, a baloldali származtatásnak nevezik. A bal oldali származtatással származtatott sentenciális formát bal-sentenciális formának nevezzük.
Legjobb származtatás
A jobb szélső származtatás szkennelés és helyettesíti a bemenetet gyártási szabályokkal, jobbról balra, egymás után. Legjobb származtatásként ismert. Az a sentenciális forma, amely a legszélső jobb származtatásból származik, jobb-sentenciális formának ismeretes.
Szintaxis vs. Lexical Analyzer
Szintaxis elemző |
Lexikai elemző |
A szintaxis analizátor főleg a nyelv rekurzív konstrukcióival foglalkozik. |
A lexikai elemző megkönnyíti a szintaktikai elemző feladatát. |
A szintaxis analizátor a forrásprogram tokenjein dolgozik, hogy felismerje a programozási nyelv értelmes struktúráit. |
A lexikai elemző egy forrásprogramban ismeri fel a tokent. |
A beolvasásokat tokenek formájában lexikai elemzőktől kapja. |
Felelős a által biztosított token érvényességéért a szintaxis analizátor |
A szintaxis analizátorok használatának hátrányai
- Soha nem fogja meghatározni, hogy egy token érvényes-e vagy sem
- A Not nem segít meghatározni, hogy egy token típuson végrehajtott művelet érvényes-e vagy sem
- Nem döntheti el, hogy a tokent deklarálják és inicializálják-e, mielőtt felhasználnák őket
Összegzés
- A szintaktikai elemzés a fordító tervezési folyamatának második szakasza, amely a lexikai elemzés után következik
- A szintaktikai elemző segít szabályokat alkalmazni a kódra
- Mondat, Lexeme, Token, Kulcsszavak és fenntartott szavak, Zajszavak, Megjegyzések, Elválasztók, Karakterkészlet, Azonosítók néhány fontos kifejezés, amelyet a Szintaxis elemzésében használnak a fordító összeállításában
- Az elemzés ellenőrzi, hogy a bemeneti karakterlánc jól formázott-e, és ha nem, akkor elutasítja
- Az elemzési technikák két különböző csoportra oszthatók: felülről lefelé, alulról felfelé
- A lexikai, a szintaktikai, a szemantikai és a logikai problémák az elemzési módszer során gyakran előforduló hibák
- A nyelvtan a nyelvet leíró szerkezeti szabályok összessége
- A jelölési konvenciók szimbólumát az elem szögletes zárójelbe zárásával jelölhetjük
- A CFG egy balra rekurzív nyelvtan, amely legalább egy ilyen típusú produkcióval rendelkezik
- A nyelvtani levezetés egy olyan nyelvtani szabálysorozat, amely a kezdő szimbólumot stringekké alakítja
- A szintaxis analizátor főleg a nyelv rekurzív konstrukcióival foglalkozik, míg a lexikai elemző megkönnyíti a szintaktikai elemző feladatát a DBMS-ben
- A Syntax analizátor módszerének hátránya, hogy soha nem fogja meghatározni, hogy egy token érvényes-e vagy sem