Mi a lexikai elemzés?
A LEXIKAI ELEMZÉS a fordító tervezésének első fázisa. A Lexer a módosított forráskódot veszi fel, amelyet mondatok formájában írnak. Más szavakkal, segít abban, hogy egy karaktersort konvertáljon jelsorozattá. A lexikai elemző ezt a szintaxist jelzősorozatokra bontja. Eltávolítja a forráskódba írt minden további helyet és megjegyzést.
A lexikai elemzést végző programokat lexikai elemzőknek vagy lexereknek nevezzük. A lexer tokenizátort vagy szkennert tartalmaz. Ha a lexikai elemző észleli, hogy a token érvénytelen, akkor hibát generál. Beolvassa a forráskódból a karakterfolyamokat, ellenőrzi a jogkivonatokat és átadja az adatokat a szintaktikai elemzőnek, amikor igényli.
Példa
How Pleasant Is The Weather?
Lásd ezt a példát; Itt könnyen felismerhetjük, hogy öt szó van, milyen kellemes, az időjárás. Ez számunkra nagyon természetes, mivel felismerhetjük az elválasztókat, az üres részeket és az írásjeleket.
HowPl easantIs Th ewe ather?
Most ellenőrizze ezt a példát, ezt is elolvashatjuk. Ez azonban eltart egy ideig, mert a páratlan helyeken elválasztókat helyeznek el. Ez nem valami, ami azonnal megkapja.
Ebben az oktatóanyagban megtanulja
- Alapfogalmak:
- Lexikai elemző architektúra: A tokenek felismerése
- A Lexical analizátor szerepei
- Lexikai hibák
- Hibaelhárítás a Lexical Analyzer alkalmazásban
- Lexikai elemző és elemző
- Miért külön a Lexical és a Parser?
- A Lexical elemzés előnyei
- A Lexical elemzés hátránya
Alapfogalmak
Mi a lexéma?
A lexéma olyan karaktersorozat, amelyet a forrás programba egy token illeszkedési mintája szerint beépítenek. Ez nem más, mint egy token példánya.
Mi a token?
A token egy karaktersorozat, amely a forrásprogram információegységét képviseli.
Mi az a minta?
A minta egy leírás, amelyet a token használ. A tokenként használt kulcsszó esetében a minta egy karaktersorozat.
Lexikai elemző architektúra: A tokenek felismerése
A lexikai elemzés fő feladata a kódban lévő beviteli karakterek olvasása és tokenek előállítása.
A Lexical analizátor beolvassa a program teljes forráskódját. Minden egyes tokent egyenként azonosít. A szkennerek általában csak tokenek előállítására kerülnek megvalósításra, ha egy elemző kéri őket. Így működik ez-
- A "Get next token" egy parancs, amelyet az elemző küld a lexikai elemzőnek.
- A parancs fogadásakor a lexikális analizátor addig vizsgálja a bemenetet, amíg meg nem találja a következő tokent.
- Visszaadja a tokent az elemzőnek.
A Lexical Analyzer kihagyja a szóközöket és a megjegyzéseket, miközben létrehozza ezeket a tokeneket. Ha hibát észlel, akkor a Lexical analizátor korrelálja ezt a hibát a forrásfájllal és a sorszámmal.
A Lexical analizátor szerepei
A Lexical analizátor az alábbi feladatokat látja el:
- Segít azonosítani a tokent a szimbólumtáblában
- Eltávolítja a szóközöket és a megjegyzéseket a forrásprogramból
- Korrelálja a hibaüzeneteket a forrásprogrammal
- Segít kibővíteni a makrókat, ha megtalálhatók a forrásprogramban
- Olvassa el a beviteli karaktereket a forrásprogramból
Példa Lexikai elemzésre, Tokenek, Nem Tokenek
Vegye figyelembe a következő kódot, amelyet a Lexical Analyzer szolgáltat
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Példák létrehozott tokenekre
Lexeme | Jelképes |
int | Kulcsszó |
maximális | Azonosító |
( | Operátor |
int | Kulcsszó |
x | Azonosító |
, | Operátor |
int | Kulcsszó |
Y | Azonosító |
) | Operátor |
{ | Operátor |
Ha | Kulcsszó |
Példák Nontokensre
típus | Példák |
Megjegyzés | // Ez 2 számot fog összehasonlítani |
Előfeldolgozó irányelv | #include |
Előfeldolgozó irányelv | #define NUMS 8,9 |
Makró | NUMS |
Fehér űr | / n / b / t |
Lexikai hibák
Az a karaktersorozat, amelyet semmilyen érvényes tokenbe nem lehet beolvasni, lexikai hiba. Fontos tények a lexikális hibáról:
- A lexikai hibák nem túl gyakoriak, de azokat szkennerrel kell kezelni
- Az azonosítók, operátorok, kulcsszavak elírása lexikai hibának számít
- A lexikai hibát általában valamilyen illegális karakter megjelenése okozza, főleg egy token elején.
Hibaelhárítás a Lexical Analyzer alkalmazásban
Íme néhány leggyakoribb hiba-helyreállítási technika:
- Eltávolít egy karaktert a fennmaradó bevitelből
- Pánik módban az egymást követő karaktereket mindig figyelmen kívül hagyják, amíg el nem érünk egy jól kialakított jelzőt
- A hiányzó karakter beillesztésével a maradék bemenetbe
- Helyettesítsen egy karaktert egy másikra
- Két soros karakter átültetése
Lexikai elemző és elemző
Lexikai elemző | Elemző |
Scan Input program | Végezze el a szintaktikai elemzést |
A tokenek azonosítása | Hozzon létre egy absztrakt ábrázolást a kódról |
Helyezzen tokent a Symbol Table-be | A szimbólumtáblázat bejegyzéseinek frissítése |
Lexikai hibákat generál | Ez generálja a forráskód elemzési fáját |
Miért külön a Lexical és a Parser?
- A tervezés egyszerűsége: megkönnyíti a lexikai elemzés és a szintaxis elemzés folyamatát a nem kívánt tokenek kiküszöbölésével
- A fordító hatékonyságának javítása: Segít a fordító hatékonyságának javításában
- Specializáció: speciális technikák alkalmazhatók a lexikai elemzési folyamat javítására
- Hordozhatóság: csak a szkennernek kell kommunikálnia a külvilággal
- Magasabb hordozhatóság: az inputeszköz-specifikus sajátosságok a lexerre korlátozódnak
A Lexical elemzés előnyei
- A lexikai elemző módszert olyan programok használják, mint a fordítók, amelyek felhasználhatják a programozó kódjának elemzett adatait egy lefordított bináris futtatható kód létrehozásához
- A webböngészők weblap formázására és megjelenítésére használják a JavsScript, HTML, CSS elemzett adatai segítségével.
- Egy külön lexikális elemző segít egy speciális és potenciálisan hatékonyabb processzor felépítésében a feladathoz
A Lexical elemzés hátránya
- Jelentős időt kell töltenie a forrásprogram elolvasásával és a tokenek formájában történő particionálással
- Néhány reguláris kifejezést meglehetősen nehéz megérteni a PEG vagy az EBNF szabályokkal összehasonlítva
- További erőfeszítésekre van szükség a lexer és a token leírások fejlesztéséhez és hibakereséséhez
- További futásidejű költségekre van szükség a lexer táblák előállításához és a tokenek felépítéséhez
Összegzés
- A lexikai elemzés a fordító tervezésének legelső szakasza
- A lexéma olyan karaktersorozat, amelyet a forrás programba egy token illeszkedési mintája szerint beépítenek
- A program teljes forráskódjának beolvasására lexikai elemzőt alkalmaznak
- A Lexical analizátor segít azonosítani a tokent a szimbólumtáblában
- Az a karaktersorozat, amelyet semmilyen érvényes tokenbe nem lehet beolvasni, lexikai hiba
- Hasznos Hiba-helyreállítási módszer egy karakter eltávolítása a megmaradt bevitelből
- A Lexical Analyzer beolvassa a beviteli programot, míg az elemző szintaktikai elemzést végez
- Megkönnyíti a lexikai elemzés és a szintaxis elemzés folyamatát a nem kívánt tokenek megszüntetésével
- A webes böngészők a Lexical analizátort használják egy weboldal formázására és megjelenítésére JavsScript, HTML, CSS elemzett adatok segítségével.
- A Lexical analizátor használatának legnagyobb hátránya, hogy további futási időre van szükség a lexer táblák előállításához és a tokenek felépítéséhez