Syntaksi-analyysi: kääntäjä ylhäältä alas & Alhaalta ylöspäin jäsentelytyypit

Sisällysluettelo:

Anonim

Mikä on syntaksianalyysi?

Syntaksi-analyysi on kääntäjän suunnitteluprosessin toinen vaihe, jossa annettu syötemerkkijono tarkistetaan muodollisen kieliopin sääntöjen ja rakenteen vahvistamiseksi. Se analysoi syntaktisen rakenteen ja tarkistaa, onko annettu syöte ohjelmointikielen oikeassa syntaksissa vai ei.

Syntaksi-analyysi kääntäjän suunnitteluprosessissa tapahtuu Lexical-analyysivaiheen jälkeen. Se tunnetaan myös nimellä jäsennyspuu tai syntaksipuu. Parse-puu on kehitetty ennalta määritetyn kieliopin avulla. Syntaksianalysaattori tarkistaa myös, täyttääkö tietty ohjelma kontekstittoman kieliopin merkitsemät säännöt. Jos se tyydyttää, jäsennin luo sitten lähdeohjelman jäsennyspuun. Muussa tapauksessa se näyttää virheilmoitukset.

Syntaksi-analysaattoriprosessi

Tässä opetusohjelmassa opit

  • Miksi tarvitset syntaksianalysaattoria?
  • Tärkeä syntaksianalysaattorin terminologia
  • Miksi tarvitsemme jäsentämistä?
  • Jäsennysmenetelmät
  • Virhe - palautustavat
  • Kielioppi:
  • Notaation mukaiset yleissopimukset
  • Kontekstivapaa kielioppi
  • Kieliopin johtaminen
  • Syntaksi vs. Lexical Analyzer
  • Syntaksi-analysaattorien käytön haitat

Miksi tarvitset syntaksianalysaattoria?

  • Tarkista, onko koodi voimassa kieliopillisesti
  • Syntaktinen analysaattori auttaa sinua soveltamaan sääntöjä koodiin
  • Auttaa sinua varmistamaan, että jokaisella avausraudalla on vastaava loppusaldo
  • Jokaisella ilmoituksella on tyyppi ja tyypin on oltava olemassa

Tärkeä syntaksianalysaattorin terminologia

Tärkeitä syntaksianalyysiprosessissa käytettyjä termejä:

  • Lause: Lause on joukko merkkejä joidenkin aakkosien yli.
  • Lexeme: Leksema on kielen alimman tason syntaktinen yksikkö (esim. Yhteensä, alku).
  • Tunnus: Tunnus on vain luokka leksemejä.
  • Avainsanat ja varatut sanat - Se on tunniste, jota käytetään kiinteänä osana lauseen syntaksia. Se on varattu sana, jota ei voi käyttää muuttujan nimellä tai tunnisteena.
  • Melusanat - Melusanat ovat valinnaisia, jotka lisätään lauseeseen lauseen luettavuuden parantamiseksi.
  • Kommentit - Se on erittäin tärkeä osa dokumentaatiota. Se näkyy enimmäkseen / * * / tai // Tyhjä (välilyönnit)
  • Erottimet - Se on syntaktinen elementti, joka merkitsee jonkin syntaktisen yksikön alkua tai loppua. Kuten lause tai lauseke, "aloita" ... "loppu" tai {}.
  • Merkistö - ASCII, Unicode
  • Tunnisteet - Pituuden rajoitukset auttavat vähentämään lauseen luettavuutta.
  • Operaattorisymbolit - + ja - suorittaa kaksi aritmeettista perusoperaatiota.
  • Kielen syntaktiset elementit

Miksi tarvitsemme jäsentämistä?

Jäsennys tarkistaa myös, että syötemerkkijono on hyvin muodostettu, ja jos ei, hylkää se.

Seuraavat ovat tärkeitä tehtäviä, jotka jäsennin suorittaa kääntäjän suunnittelussa:

  • Auttaa sinua tunnistamaan kaikenlaiset syntaksivirheet
  • Etsi sijainti, jossa virhe on tapahtunut
  • Selkeä ja tarkka kuvaus virheestä.
  • Palautuminen virheestä jatkaaksesi ja etsi lisää virheitä koodista.
  • Ei saisi vaikuttaa "oikeiden" ohjelmien kokoamiseen.
  • Jäsennys on hylättävä virheelliset tekstit ilmoittamalla syntaksivirheistä

Jäsennysmenetelmät

Jäsennysmenetelmät on jaettu kahteen eri ryhmään:

  • Ylhäältä alas-jäsentäminen,
  • Alhaalta ylöspäin jäsentäminen

Ylhäältä alas-jäsentäminen:

Ylhäältä alas jäsennettäessä jäsentelypuun rakenne alkaa juuresta ja etenee sitten kohti lehtiä.

Kahden tyyppisiä ylhäältä alas-jäsentelyjä ovat:

  1. Ennakoiva jäsentely:

Ennakoiva jäsentely voi ennustaa, mitä tuotantoa tulisi käyttää tietyn syötemerkkijonon korvaamiseen. Ennakoiva jäsennin käyttää ennakointipistettä, joka osoittaa kohti seuraavia syötesymboleita. Takaisinkelaus ei ole ongelma tässä jäsentämistekniikassa. Se tunnetaan nimellä LL (1) jäsennin

  1. Rekursiivinen laskeutumisen jäsentäminen:

Tämä jäsentämistekniikka jäsentää syötteen rekursiivisesti prase-puun muodostamiseksi. Se koostuu useista pienistä toiminnoista, yksi kullekin kieliopin nonterminalille.

Alhaalta ylöspäin jäsentäminen:

Kääntäjäsuunnittelussa alhaalta ylöspäin jäsennettäessä jäsentelypuun rakentaminen alkaa lehdestä ja jatkuu sitten kohti juurta. Sitä kutsutaan myös siirtymää vähentäväksi jäsentelyksi. Tämän tyyppinen jäsentely kääntäjän suunnittelussa on luotu joidenkin ohjelmistotyökalujen avulla.

Virhe - palautustavat

Yleisiä virheitä, joita tapahtuu järjestelmäohjelmiston jäsentämisessä

  • Lexical : Väärin kirjoitetun tunnisteen nimi
  • Syntaktinen : epätasapainoinen sulu tai puuttuva puolipiste
  • Semanttinen : yhteensopimaton arvonmääritys
  • Looginen : Ääretön silmukka eikä tavoitettavissa oleva koodi

Jäsenteen tulee pystyä havaitsemaan ja havaitsemaan kaikki ohjelmasta löydetyt virheet. Joten aina, kun jäsentimessä tapahtui virhe. Sen pitäisi pystyä käsittelemään sitä ja jatkamaan jäljellä olevan syötteen jäsentämistä. Ohjelmassa voi olla seuraavan tyyppisiä virheitä kokoamisprosessin eri vaiheissa. Parserissa on viisi yleistä virheenpalautusmenetelmää

Lausetilan palautus

  • Jos jäsentäjä havaitsee virheen, se auttaa sinua tekemään korjaavia toimenpiteitä. Tämä sallii muiden syötteiden ja tilojen jäsentämisen eteenpäin.
  • Esimerkiksi puuttuvan puolipisteen lisääminen tapahtuu lauseketilan palautusmenetelmällä. Jäsennyssuunnittelijan on kuitenkin oltava varovainen tehdessään näitä muutoksia, koska yksi väärä korjaus voi johtaa loputtomaan silmukkaan.

Paniikkitilan palautus

  • Siinä tapauksessa, että jäsennin havaitsee virheen, tämä tila ohittaa loput lauseesta eikä käsittele syötettä virheellisestä syötteestä erottajaan, kuten puolipiste. Tämä on yksinkertainen virheenpalautusmenetelmä.
  • Tämän tyyppisessä palautusmenetelmässä jäsennin hylkää syötesymbolit yksitellen, kunnes löydetään yksi nimetty synkronointitunnusten ryhmä. Synkronointimerkit käyttävät yleensä erottimia, kuten tai.

Lausetason palautus:

  • Kääntäjä korjaa ohjelmaa lisäämällä tai poistamalla tunnuksia. Tämän avulla se voi edetä jäsentää siitä missä se oli. Se korjaa jäljellä olevan tulon. Se voi korvata jäljellä olevan syötteen etuliitteen jollakin merkkijonolla, mikä auttaa jäsentäjää jatkamaan prosessia.

Virhe Productions

  • Virheen tuotannon palauttaminen laajentaa virheellisen rakenteen tuottavan kielen kielioppia. Jäsennys suorittaa sitten virheiden diagnoosin kyseisestä rakenteesta.

Yleinen korjaus:

  • Kääntäjän tulisi tehdä vähemmän muutoksia kuin mahdollista käsitellessään väärää syötemerkkijonoa. Väärän syötemerkkijonon a ja kieliopin c perusteella algoritmit etsivät jäsentelypuuta liittyvälle merkkijonolle b. Kuten jotkut lisäykset, poistot ja modifikaatiot, jotka on tehty a-b: ksi muuntamiseen tarvittavista rahakkeista, on mahdollisimman vähän.

Kielioppi:

Kielioppi on joukko rakennesääntöjä, jotka kuvaavat kieltä. Kieliopit määrittävät rakenteen mille tahansa lauseelle. Tämä termi viittaa myös näiden sääntöjen tutkimiseen, ja tämä tiedosto sisältää morfologian, fonologian ja syntaksin. Se pystyy kuvaamaan monia ohjelmointikielien syntaksia.

Lomakkeen kieliopin säännöt

  • Ei-päätemerkin tulisi näkyä vähintään yhden tuotannon vasemmalla puolella
  • Maalisymbolia ei saa koskaan näyttää minkä tahansa tuotannon :: = oikealla puolella
  • Sääntö on rekursiivinen, jos LHS näkyy sen RHS: ssä

Notaation mukaiset yleissopimukset

Merkintätavan symboli voidaan osoittaa liittämällä elementti hakasulkeisiin. Se on mielivaltainen sekvenssi elementin esiintymistä, joka voidaan osoittaa liittämällä elementti aaltosulkeisiin, joita seuraa tähtisymboli {…} *.

Se on vaihtoehto, joka voi käyttää symbolia yhdessä säännössä. Tarvittaessa se voidaan sulkea sulkeilla ([,]).

Kahden tyyppisiä merkintätapoja ovat päätelaitteet ja muut

1. päätteet:

  • Pienet kirjaimet aakkosissa, kuten a, b, c,
  • Käyttäjän symbolit, kuten +, -, * jne.
  • Välimerkit, kuten sulut, hash, pilkku
  • 0, 1,…, 9 numeroa
  • Lihavoidut merkkijonot, kuten tunnus tai jos mikä tahansa, joka edustaa yhtä päätesymbolia

2. terminaalit:

  • Isot kirjaimet, kuten A, B, C
  • Pienet kursivoidut nimet: lauseke tai jotkut

Kontekstivapaa kielioppi

CFG on vasemmalle rekursiivinen kielioppi, jolla on ainakin yksi tämän tyyppinen tuotanto. Kontekstittoman kieliopin säännöt ovat pääasiassa rekursiivisia. Syntaksi-analysaattori tarkistaa, että tietty ohjelma täyttää kaikki kontekstittoman kieliopin säännöt tai ei. Jos se täyttyy, näiden sääntöjen syntaksianalysaattorit voivat luoda jäsennyspuun kyseiselle ohjelmalle.

expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id

Kieliopin johtaminen

Kieliopin johtaminen on kielioppisäännön sarja, joka muuttaa alkusymbolin merkkijonoksi. Johdatus osoittaa, että merkkijono kuuluu kieliopin kieleen.

Vasemmanpuoleisin johtopäätös

Kun syötteen tuntomuoto skannataan ja korvataan vasemmalta oikealle -järjestyksessä, sitä kutsutaan vasemmanpuoleiseksi johdannaiseksi. Vasemmanpuoleisen johdannan johdettua sententiaalista muotoa kutsutaan vasemmanpuoleiseksi.

Oikea johto

Oikea johtopäätös skannaa ja korvaa syötteen tuotantosäännöillä, oikealta vasemmalle, järjestyksessä. Se tunnetaan oikeanpuoleisimpana johdoksena. Oikeanpuoleisesta johdannasta johdettu tuntemuoto tunnetaan oikeanpuoleisena muotona.

Syntaksi vs. Lexical Analyzer

Syntaksi-analysaattori

Leksikaalinen analysaattori

Syntaksi-analysaattori käsittelee lähinnä kielen rekursiivisia rakenteita.

Leksikaalianalysaattori helpottaa syntaksianalysaattorin tehtävää.

Syntaksi-analysaattori toimii lähdeohjelman tunnisteiden kanssa tunnistamaan merkitykselliset rakenteet ohjelmointikielellä.

Leksikaalinen analysaattori tunnistaa tunnuksen lähdeohjelmassa.

Se vastaanottaa tuloja merkkien muodossa leksikaalisista analysaattoreista.

Se on vastuussa toimitetun tunnuksen oikeellisuudesta

syntaksianalysaattori

Syntaksi-analysaattorien käytön haitat

  • Se ei koskaan määritä, onko tunniste voimassa vai ei
  • Not auttaa sinua selvittämään, onko tunnustyypille suoritettu toiminto pätevä vai ei
  • Et voi päättää, että tunnus ilmoitetaan ja alustetaan ennen kuin sitä käytetään

Yhteenveto

  • Syntaksi-analyysi on kääntäjän suunnitteluprosessin toinen vaihe, joka tulee leksikaalisen analyysin jälkeen
  • Syntaktinen analysaattori auttaa sinua soveltamaan sääntöjä koodiin
  • Lause, Lexeme, Tunnus, Avainsanat ja varatut sanat, Melusanat, Kommentit, Erottimet, Merkistö, Tunnisteet ovat joitain tärkeitä termejä, joita käytetään syntaksianalyysissä kääntäjän rakentamisessa
  • Jäsennys tarkistaa, että syötemerkkijono on hyvin muodostettu, ja jos ei, hylkää se
  • Jäsennysmenetelmät on jaettu kahteen eri ryhmään: ylhäältä alas-jäsentäminen, alhaalta ylös-jäsentäminen
  • Leksikaaliset, syntaktiset, semanttiset ja loogiset ovat yleisiä virheitä jäsentämismenetelmän aikana
  • Kielioppi on joukko rakennesääntöjä, jotka kuvaavat kieltä
  • Merkintätavan symboli voidaan osoittaa liittämällä elementti hakasulkeisiin
  • CFG on vasemmalle rekursiivinen kielioppi, jolla on ainakin yksi tämän tyyppinen tuotanto
  • Kieliopin johtaminen on kielioppisäännön sarja, joka muuttaa alkusymbolin merkkijonoksi
  • Syntaksi-analysaattori käsittelee pääasiassa kielen rekursiivisia rakenteita, kun taas leksikaalinen analysaattori helpottaa syntaksianalysaattorin tehtävää DBMS: ssä
  • Syntaksi-analysaattorimenetelmän haittana on, että se ei koskaan määritä, onko tunniste voimassa vai ei