Tietojenkäsittelytieteessä moniselitteinen kielioppi on muodollinen kielioppi , joka voi luoda tietyn merkkijonon useammalla kuin yhdellä tavalla (eli merkkijonolle on useampi kuin yksi jäsennyspuu ). Kielen sanotaan olevan pohjimmiltaan moniselitteinen , jos se voidaan tuottaa vain moniselitteisten kielioppien avulla.
Joidenkin ohjelmointikielten kieliopit ovat moniselitteisiä. Tällaisia kieliä jäsennettäessä on otettava huomioon semanttiset tiedot oikean muunnelman valitsemiseksi. Esimerkiksi C-kielellä seuraava merkintä:
x*y;voidaan tulkita seuraavasti:
Valitakseen näiden tulkintojen välillä kääntäjän on tarkasteltava symbolitaulukkoaan nähdäkseen, oliko ilmoitus xtypedef-nimi tietyssä laajuudessa.
Konteksti vapaa kielioppi
A → A + A | A − A | aon moniselitteinen, koska merkkijonolle a + a + a on kaksi vasemmanpuoleista lähtöä:
A | → A+A | A | → A+A | ||
→ a+A | → A+A+A | ||||
→ a+A+A | → a+A+A | ||||
→ a+a+A | → a+a+A | ||||
→ a + a + a | → a + a + a |
Lisäksi kielioppi on moniselitteinen, koska merkkijonolle a + a − a on kaksi jäsennyspuuta:
Sen luoma kieli ei kuitenkaan ole olennaisesti moniselitteinen, koska seuraava yksiselitteinen kielioppi tuottaa saman kielen:
A → A + a | A − a | aYleinen ongelma sen määrittämisessä, onko kielioppi moniselitteinen, on algoritmisesti ratkaisematon . Ei voi olla algoritmia, joka määrittää kieliopin moniselitteisyyden, koska Postin ratkaisematon vastaavuusongelma pelkistyy monitulkintaongelmaksi.
Moniselitteisen kieliopin jäsentäminen deterministisellä jäsentimellä on ilmeinen , mutta ei-deterministinen jäsentäminen johtaa merkittävään tehokkuuden heikkenemiseen. Useimmat jäsentämistä vaativat konstruktit voidaan tunnistaa yksiselitteisistä kieliopeista. Jotkut moniselitteiset kieliopit voidaan muuntaa yksiselitteisiksi kieliopeiksi, mutta tälle muunnokselle ei ole yleistä menettelytapaa, kuten ei ole algoritmia kieliopin moniselitteisyyden määrittämiseksi. Kääntäjägeneraattorit , kuten YACC , pystyvät yksiselitteistämään tietynlaisia, esimerkiksi käyttämällä etusija- ja assosiatiivisuusrajoituksia .
Vaikka joillakin kielillä (kieliopin luomilla merkkijonoilla) on sekä yksiselitteisiä että moniselitteisiä kielioppeja, on kieliä, joille ei ole yksiselitteistä kielioppia. Esimerkki olennaisesti moniselitteisestä kielestä on yhdistelmä ja . Se on yhteydetön kieli yhteydettömien kielten yhdistelmänä, mutta Johdatus automaatioteoriaan… sisältää todisteen siitä , että ei ole mahdollista jäsentää yksiselitteisesti merkkijonoja (ei-kontekstivapaassa) osajoukossa , joka on näiden kahden leikkauspiste. Kieli (kielet.
Muodolliset kielet ja viralliset kieliopit | |
---|---|
Yleiset käsitteet | |
Tyyppi 0 | |
Tyyppi 1 |
|
Tyyppi 2 | |
Tyyppi 3 |
|
jäsentäminen |