Metasyntax - Metasyntax
I logikk og informatikk , en metasyntax beskriver tillatte struktur og sammensetning av fraser og setninger i et metaspråk , som brukes til å beskrive enten et naturlig språk eller en datamaskin programmeringsspråk . Noen av de mye brukte formelle metallspråkene for dataspråk er Backus – Naur-form (BNF), utvidet Backus – Naur-form (EBNF), Wirth- syntaksnotasjon (WSN) og utvidet Backus – Naur-form (ABNF).
Disse metalspråkene har sin egen metasyntax hver sammensatt av terminalsymboler , ikke-terminale symboler og metasymboler . Et terminalsymbol, for eksempel et ord eller et token, er en frittstående struktur i et språk som defineres. Et ikke-terminalt symbol representerer en syntaktisk kategori, som definerer en eller flere gyldig setnings- eller setningsstruktur bestående av et n-element-delmengde. Metasymboler gir syntaktisk informasjon for denotasjonelle formål i en gitt metasyntaks. Terminaler, ikke-terminaler og metasymboler gjelder ikke på alle metalspråk.
Vanligvis har ikke metalspråket for tokenivåspråk (formelt kalt " vanlige språk ") ikke-terminaler fordi hekking ikke er et problem i disse vanlige språkene. Engelsk, som et metaspråk for å beskrive visse språk, inneholder ikke metasymboler, siden all forklaring kan gjøres ved hjelp av engelsk uttrykk. Det er bare visse formelle metallspråk som brukes til å beskrive rekursive språk (formelt kalt kontekstfrie språk ) som har terminaler, ikke-terminaler og metasymboler i metasyntaxen.
Element av metasyntaks
- Terminaler: en frittstående syntaktisk struktur. Terminaler kan betegnes ved å dobbelt sitere navnet på terminalene.
- for eksempel
"else","if","then","while"
- Ikke-terminaler: en symbolsk representasjon som definerer et sett med tillatte syntaktiske strukturer som er sammensatt av et delsett av elementer. Ikke-terminaler kan betegnes ved å angi navnet på ikke-terminalene.
- f.eks
<int>,<char>,<boolean>
- Metasymbol: en symbolsk representasjon som angir syntaktisk informasjon.
- for eksempel
:=,|,{},(),[],*
Metoder for fraseavslutning
- Sammenstilling: f.eks
A B - Alternativ: f.eks
A|B - Gjentakelse: f.eks
{A B} - Valgfri setning: f.eks
[A B] - Gruppering: f.eks
(A|B)
Spesifikke metasyntaks-konvensjoner
Standardkonvensjonen
- ' Backus – Naur-form ' betegner ikke-terminale symboler ved å angi vinkelen på navnet på den syntaktiske kategorien , mens den angir terminalsymboler ved å sitere terminalordene dobbelt. Terminaler kan aldri vises på venstre side av metasymbolet
::=i en avledningsregel . Kroppen av definisjonen på høyre side kan være sammensatt av flere alternative former hvor hver alternativ syntaktisk konstruksjon er atskilt med metasymbolet|. Hver av disse alternative konstruksjonene kan være enten terminal eller ikke-terminal. - ' Extended Backus – Naur form ' bruker alle fasiliteter i BNF og introduserer to metasymboler for ekstra funksjoner. En av disse to nye funksjonene brukes for å betegne en valgfri setning i en setning ved å hakke den valgfrie setningen. Den andre funksjonen brukes for å betegne et uttrykk som skal gjentas null eller flere ganger ved å krølle uttrykket.
- ' Wirth syntaksnotasjon' bruker alle fasiliteter i EBNF, bortsett fra at ikke-terminaler ikke nødvendigvis er vinklet i parentes, men alltid er definert på høyre side av
=i sin produksjonsregel. Det krever heller ikke at alle ikke-terminaler er eksplisitt definert. Ikke-terminaler som<text>og<opt-whitespace>er implisitt definert som henholdsvis ASCII-tegn og valgfritt hvitt mellomrom. - ' Augmented Backus – Naur form ' betegner ikke-terminale symboler ved å starte et ord med ett alfabet som navnet på den syntaktiske kategorien. Vinkelfester er ikke påkrevd. Terminal symboler er enten betegnet med dobbelt siterte ord eller betegnet med følgende numeriske struktur: a
%, etterfulgt avbellerxellerd, etterfulgt av en numerisk verdi eller en sammenkobling av numeriske verdier atskilt med.. Metasymbol-er plassert mellom to numeriske verdier for å betegne verdiområdet . Som for BNF, kommer terminalene til ABNF aldri til på venstre side av metasymbolet=i avledningsregelen. Metasymbol/betegner vekslinger . Hvitt rom brukes til å skille elementer i definisjonens hoveddel. Metasyntaks for repetisjon i ABNF har flere former. Et*foregående element betegner elementet som skal gjentas null eller flere ganger. Numerisk verdi n1 etterfulgt av*etterfulgt av numerisk verdi n2 etterfulgt av et element betegner elementet som skal gjentas minst n1 ganger og maksimalt n2 ganger. En enkelt numerisk verdi n foran et element betegner elementet som skal gjentas n ganger. Kommentarer kan være uttrykkelige etter metasymbolet;. Som i EBNF, angir kvadratisk parentes for en setning frasen som valgfri .
Variasjoner
Metasyntaks-konvensjonen for disse formelle metallspråkene er ennå ikke formalisert. Mange metasyntaktiske variasjoner eller utvidelser finnes i referansehåndboken til forskjellige dataprogrammeringsspråk. En variant av standardkonvensjonen for å betegne ikke-terminaler og terminaler er å fjerne metasymboler som vinkelparenteser og sitater og bruke skrifttyper på de tiltenkte ordene. I Ada er for eksempel syntaktiske kategorier betegnet ved å bruke små bokstaver sans-serif font på de tiltenkte ordene eller symbolene. Alle terminalord eller symboler, i Ada, består av tegn med kodeposisjon mellom 16 # 20 # og 16 # 7E # (inkludert). Definisjonen for hvert tegnsett henvises til den internasjonale standarden beskrevet av ISO / IEC 10646: 2003. I C og Java blir syntaktiske kategorier betegnet med kursiv skrift mens terminalsymboler er angitt med gotisk skrift. I J gjelder ikke metasyntaks metasymboler for å beskrive Js syntaks i det hele tatt. Snarere blir alle syntaktiske forklaringer gjort på en metaspråk som er veldig lik engelsk som heter Dictionary, som er unikt dokumentert for J.
Fordelen med utvidelsene
Hensikten med de nye utvidelsene er å gi en enklere og utvetydig metasyntaks. Når det gjelder enkelhet, hjelper BNFs metanotasjon definitivt ikke å gjøre metasyntaxen lettere å lese, da metasymbolene med åpen og nær ende vises for rikelig. Når det gjelder tvetydighet, genererer BNFs metanotasjon unødvendig kompleksitet når anførselstegn, apostrofer, mindre enn tegn eller større enn tegn kommer til å tjene som terminalsymboler, noe de ofte gjør. Den utvidede metasyntax bruker egenskaper som bokstav, skrift og kodeposisjon for tegn for å redusere unødvendig nevnte kompleksitet. Videre bruker noen metalspråk font-separeringskategorier for å innlemme metasyntaktiske funksjoner for layoutkonvensjoner, som ikke formelt støttes av BNF.
Se også
- Adaptiv grammatikk
- Sammenligning av parsergeneratorer
- Metapragmatics
- Metasemantikk
- Metavariable (logikk)
Referanser
- ^ Sellink, Alex og Chris Verhoef. " Utvikling, vurdering og omlegging av språkbeskrivelser ." Programvarevedlikehold og nyutvikling, 2000. Proceedings of the Fourth European. IEEE, 2000.