Szintaxiselemzés: Fordító felülről lefelé & Alulról felfelé elemző típusok

Tartalomjegyzék:

Anonim

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.

Szintaxis elemző folyamat

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:

  1. 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

  1. 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