Lexikális elemzés (elemző) a fordítótervezésben példával

Mi az a lexikális elemzés?

Lexikai elemzés a fordító tervezésének legelső fázisa. A Lexer a módosított forráskódot veszi át, amely mondatok formájában van megírva. Más szóval, segít átalakítani egy karaktersorozatot tokenek sorozatává. A lexikális elemző ezt a szintaxist tokenek sorozatára bontja. Eltávolítja a forráskódban írt minden extra szóközt vagy megjegyzést.

Azokat a programokat, amelyek lexikális elemzést végeznek a fordítótervezésben, lexikális elemzőknek vagy lexereknek nevezzük. A lexer tokenizátort vagy szkennert tartalmaz. Ha a lexikális elemző azt észleli, hogy a token érvénytelen, akkor hibát generál. A Lexical Analyzer szerepe a fordítótervezésben, hogy beolvassa a karakterfolyamokat a forráskódból, ellenőrizze a legális tokeneket, és szükség esetén átadja az adatokat a szintaktikai elemzőnek.

Példa

How Pleasant Is The Weather?

Lásd ezt a Lexikai elemzés példát; Itt könnyen felismerhetjük, hogy van öt szó: How Pleasant, The, Weather, Is. Ez nagyon természetes számunkra, mivel felismerjük az elválasztójeleket, üres helyeket és az írásjeleket.

 HowPl easantIs Th ewe ather?

Most nézd meg ezt a példát, ezt is olvashatjuk. Ez azonban eltart egy ideig, mert elválasztók kerülnek a páratlan helyekre. Ez nem olyan dolog, ami azonnal megérkezik.

Alapvető terminológiák

Mi az a lexéma?

A lexéma olyan karaktersorozat, amely a forrásprogramban egy token illeszkedési mintája szerint szerepel. Ez nem más, mint egy token példánya.

Mi az a token?

A fordítóprogramban a tokenek olyan karaktersorozatok, amelyek a forrásprogramban egy információegységet képviselnek.

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 karakterek sorozata.

Lexikai elemző Architecture: Hogyan ismerhetők fel a tokenek

A lexikális elemzés fő feladata a bemeneti karakterek beolvasása a kódban és tokenek előállítása.

A Lexical Analizátor a program teljes forráskódját beolvassa. Egyenként azonosítja az egyes tokent. A szkennereket általában úgy valósítják meg, hogy csak akkor készítsenek tokeneket, ha az elemző kéri. Így működik a tokenek felismerése a fordítótervezésben -

Lexikai elemző Architectúra
Lexikai elemző Architectúra
  1. A „Get next token” egy parancs, amelyet az elemző küld a lexikális elemzőnek.
  2. A parancs fogadásakor a lexikális elemző addig vizsgálja a bemenetet, amíg meg nem találja a következő tokent.
  3. Visszaadja a tokent a Parsernek.

A Lexical Analyzer kihagyja a szóközöket és a megjegyzéseket a tokenek létrehozásakor. Ha bármilyen hiba van jelen, akkor a Lexical Analizátor összefüggésbe hozza a hibát a forrásfájllal és a sorszámmal.

A Lexical Analizátor szerepei

A lexikális elemző az alábbi feladatokat látja el:

  • Segít azonosítani a tokent a szimbólumtáblázatban
  • Eltávolítja a szóközöket és a megjegyzéseket a forrásprogramból
  • A hibaüzeneteket korrelálja a forrásprogrammal
  • Segít a makrók kibontásában, ha megtalálhatók a forrásprogramban
  • Bemeneti karakterek beolvasása a forrásprogramból

Példa a lexikális elemzésre, tokenek, nem tokenek

Tekintsük a következő kódot, amelyet a Lexical Analyzer táplál

#include <stdio.h>
    int maximum(int x, int y) {
        // This will compare 2 numbers
        if (x > y)
            return x;
        else {
            return y;
        }
    }

Példák a létrehozott tokenekre

Lexéma Jelképes
int Kulcsszó
maximális Azonosító
( Operator
int Kulcsszó
x Azonosító
, Operator
int Kulcsszó
Y Azonosító
) Operator
{ Operator
If Kulcsszó

Példák a nontokenekre

típus Példák
Megjegyzés // Ezzel 2 számot hasonlít össze
Előfeldolgozó direktíva #befoglalni
Előfeldolgozó direktíva #define NUMS 8,9
Macro NUMS
Fehér űr /n /b /t

Lexikai hibák

Az olyan karaktersorozat, amelyet nem lehet beolvasni egyetlen érvényes tokenbe sem, lexikai hiba. Fontos tények a lexikális hibáról:

  • A lexikai hibák nem túl gyakoriak, de ezeket szkennerrel kell kezelni
  • Az azonosítók, operátorok, kulcsszavak elírása lexikai hibának minősül
  • Általában a lexikális hibát valamilyen illegális karakter megjelenése okozza, többnyire egy token elején.

Hiba-helyreállítás a Lexical Analyzerben

Íme néhány leggyakoribb hibahelyreállítási technika:

  • Eltávolít egy karaktert a fennmaradó bevitelből
  • Pánik módban az egymást követő karaktereket a rendszer mindig figyelmen kívül hagyja, amíg el nem érünk egy jól formált jelzőt
  • A hiányzó karakter beszúrásával a fennmaradó bevitelbe
  • Cserélj ki egy karaktert egy másik karakterre
  • Transzponáljon két sorozat karaktert

Lexical Analyzer vs. Parser

Lexikai elemző értelmező
Scan Input program Végezzen szintaktikai elemzést
Azonosítsa a tokeneket Készítse el a kód absztrakt ábrázolását
Helyezze be a tokeneket a szimbólumtáblázatba Frissítse a szimbólumtábla bejegyzéseit
Lexikális hibákat generál Létrehoz egy elemzőfát a forráskódból

Miért kell különválasztani a Lexicalt és az Parser-t?

  • A tervezés egyszerűsége: Megkönnyíti a lexikális elemzés és a szintaktikai elemzés folyamatát a nem kívánt tokenek eltávolításával
  • 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 lexikális elemzési folyamat javítására
  • Hordozhatóság: csak a szkennernek kell kommunikálnia a külvilággal
  • Nagyobb hordozhatóság: beviteli eszköz-specifikus sajátosságok a lexerre korlátozva

A lexikális elemzés előnyei

  • A lexikális elemző módszert olyan programok használják, mint a fordítók, amelyek a programozói kódból származó elemzett adatokat felhasználva lefordított bináris végrehajtható kódot hozhatnak létre.
  • A webböngészők ezt használják a weboldal formázására és megjelenítésére a onnan származó elemzett adatok segítségével JavaScript, HTML, CSS
  • Egy külön lexikális elemző segíti a speciális és potenciálisan hatékonyabb processzor felépítését a feladathoz

A lexikális elemzés hátránya

  • Jelentős időt kell töltenie a forrásprogram olvasásával és tokenek formájában történő particionálásával
  • Néhány reguláris kifejezést meglehetősen nehéz megérteni a PEG vagy EBNF szabályokhoz képest
  • Több erőfeszítésre van szükség a lexer és a token leírásainak fejlesztéséhez és hibakereséséhez
  • További futásidejű többletterhelésre van szükség a lexer táblák létrehozásához és a tokenek létrehozásához

Összegzésként

  • A lexikális elemzés a fordító tervezésének legelső fázisa
  • A lexémák és a tokenek azok a karakterek sorozata, amelyek a forrásprogramban szerepelnek a token illeszkedési mintájának megfelelően
  • A Lexical Analizátor a program teljes forráskódjának szkennelésére van megvalósítva
  • A Lexical Analizátor segít azonosítani a tokent a szimbólumtáblázatban
  • Az olyan karaktersorozat, amelyet nem lehet beolvasni egyetlen érvényes tokenbe sem, lexikai hiba
  • Hasznos egy karakter eltávolítása a fennmaradó bevitelből. Hiba-helyreállítási módszer
  • A Lexical Analyzer átvizsgálja a beviteli programot, miközben az elemző szintaktikai elemzést végez
  • Megkönnyíti a lexikális elemzés és a szintaktikai elemzés folyamatát a nem kívánt tokenek eltávolításával
  • A Lexical Analizátort a webböngészők használják a weboldal formázására és megjelenítésére JavasScript, 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 generálásához és a tokenek létrehozásához.