Lexikai elemzés a fordító tervezésében, példával

Tartalomjegyzék:

Anonim

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-

  1. A "Get next token" egy parancs, amelyet az elemző küld a lexikai elemzőnek.
  2. A parancs fogadásakor a lexikális analizátor addig vizsgálja a bemenetet, amíg meg nem találja a következő tokent.
  3. 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

#include int 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