Van Wiingaarden kielioppi (myös vB-kielioppi tai B-kielioppi ) on kaksitasoinen kielioppi , joka tarjoaa tavan määritellä mahdollisesti äärettömät kieliopit äärellisen määrän sääntöjä. Adrian van Wiingaarden keksi formalismin määrittelemään joitain syntaktisia rajoituksia, jotka aiemmin piti muotoilla luonnollisilla kielillä, huolimatta niiden pohjimmiltaan syntaktisesta luonteesta. Tyypillisiä sovelluksia ovat sukupuolen ja numeron käsittely luonnollisilla kielillä sekä ohjelmointikielien tunnisteiden oikea muotoilu.
Menetelmää käytettiin ja kehitettiin ohjelmointikielen ALGOL 68 määrittelyssä . Tämä on esimerkki laajemmasta liitekieliopista.
B-kielioppi koostuu äärellisestä määrästä metasääntöjä, joita käytetään johtamaan (mahdollisesti äärettömiä) päättelysääntöjä äärellisestä määrästä hypersääntöjä. Metasääntöjen määritelmä rajoittuu yhteydettömään kielioppiin. Hypersäännöt rajoittavat sallittuja konteksteja korkeammalla tasolla. Pohjimmiltaan päättelyprosessissa käytetty johdonmukainen substituutio vastaa yhdistämisprosessia, esimerkiksi Prolog-kielestä, kuten Alan Colmeroe totesi.
Ennen ALGOL 68 -kieltä ALGOL 60 formalisoitiin kontekstittomilla Backus-Naur-lomakkeilla. Uusien tilannekohtaisten kaksitasoisten kielioppien ilmestyminen aiheutti vaikeuksia joillekin ALGOL 68 :n loppuraportin lukijoille vuonna 1968. Myöhemmin Weingaarden ja kollegat toimittivat loppuraportin, ja se julkaistiin "Muokattuna raporttina" ALGOL 68:sta vuonna 1973.
B-kieliopit perustuvat ajatukseen täydentää COP-kieliopin ei-terminaalisia symboleja attribuuteilla (tai liitteillä ), jotka välittävät tietoa jäsennyspuun solmujen välillä ja joita käytetään rajoittamaan syntaksia ja määrittämään semantiikkaa. Tämä ajatus oli tuolloin hyvin tiedossa, erityisesti Donald Knuth vieraili ALGOL 68 -kehityskomiteassa oman versionsa kehittämisen aikana. [1] Mielenkiintoinen B-kieliopin piirre on niiden tiukka suhde CF-kieliopin antamiin merkkijonoattribuutteihin, joissa ketjuttaminen on ainoa mahdollinen operaatio. Attribuuttien kielioppien attribuutit voivat olla mitä tahansa tyyppiä ja niihin voidaan soveltaa mitä tahansa toimintoa.
Algol 68 -raportissa esittelyn jälkeen B-kielioppeja pidettiin liian tehokkaina ja rajoittamattomina käytännön käyttöön. Algol 68:n muokattu raportti, joka vaikutti osittain niiden soveltamiseen, sisälsi paljon luettavamman kieliopin, mutta säilytti B-kieliopin oikean formalismin.
Tällä kertaa kävi selväksi, että B-kieliopit olivat todellakin liian voimakkaita. Ne ovat Turing-täydellisiä, mikä tekee niiden jäsentämisen mahdottomaksi: ongelmaa tarkistaa, voidaanko tietty merkkijono tuottaa tietyllä B-kieliopilla, on algoritmisesti ratkaisematon. Niiden käyttöä olisi rajoitettava ankarasti automaattisessa analysoinnissa tai kääntämisessä. Erityisesti tämän ongelman ratkaisemiseksi on kehitetty rajoitettuja ja muokattuja versioita B-kieliopista
Anthony Fisher kirjoitti jäsentimen suurelle B-kielioppiluokalle [1] Arkistoitu 14. joulukuuta 2007 Wayback Machineen .
Dick Grune on luonut C-ohjelman, joka luo kaikenlaisia päättelysääntöjä kaksitasoiseen kielioppiin [2] .
Edellä mainittuja laajennettujen liitekielioppien sovelluksia voidaan pitää B-kielioppien sovelluksina, koska PA-kieliopit ovat melko lähellä niitä.
B-kielioppeja on myös ehdotettu käytettäväksi kuvaamaan monimutkaisia ihmisen toimintoja ergonomiassa.