Metasyntax
Inom logik och datavetenskap beskriver en metasyntax den tillåtna strukturen och sammansättningen av fraser och meningar i ett metaspråk , som används för att beskriva antingen ett naturligt språk eller ett datorprogrammeringsspråk . Några av de ofta använda formella metaspråken för datorspråk är Backus-Naur-formen (BNF), utökad Backus-Naur-formen (EBNF), Wirth-syntaxnotation (WSN) och förstärkt Backus-Naur-formen (ABNF).
Dessa metaspråk har sin egen metasyntax som var och en består av terminalsymboler , icke-terminala symboler och metasymboler . En terminalsymbol, såsom ett ord eller en token, är en fristående struktur i ett språk som definieras. En icke-terminal symbol representerar en syntaktisk kategori, som definierar en eller flera giltiga fraser eller meningsstrukturer som består av en delmängd av n-element. Metasymboler tillhandahåller syntaktisk information för denotationsändamål i en given metasyntax. Terminaler, icke-terminaler och metasymboler gäller inte för alla metaspråk.
har inte metaspråket för språk på tokennivå (formellt kallade " vanliga språk ") icke-terminaler eftersom kapsling inte är ett problem i dessa vanliga språk. Engelska, som ett metaspråk för att beskriva vissa språk, innehåller inga metasymboler eftersom all förklaring kan göras med hjälp av engelska uttryck. Det finns bara vissa formella metaspråk som används för att beskriva rekursiva språk (formellt kallade sammanhangsfria språk ) som har terminaler, icke-terminaler och metasymboler i sin metasyntax.
Element av metasyntax
- Terminaler: en fristående syntaktisk struktur. Terminaler kan betecknas genom att dubbelcitera namnet på terminalerna.
- t.ex.
"annat"
,"om"
,"då"
,"medan"
- Icke-terminaler: en symbolisk representation som definierar en uppsättning tillåtna syntaktiska strukturer som är sammansatt av en delmängd av element. Icke-terminaler kan betecknas med vinkelparentes namnet på de icke-terminaler.
- t.ex.
<int>
,<char>
,<boolean>
- Metasymbol: en symbolisk representation som anger syntaktisk information.
- t.ex.
:=
,|
,{}
,()
,[]
,*
Metoder för frasavslutning
- Juxtaposition: t.ex.
AB
- Alternativ: t.ex.
A|B
- Upprepning: t.ex.
{AB}
- Valfri fras: t.ex.
[AB]
- Gruppering: t.ex.
(A|B)
Specifika metasyntaxkonventioner
Standardkonventionen
- ' Backus–Naur form ' betecknar icke-terminala symboler med vinkelparenteser för namnet på den syntaktiska kategorin , medan den betecknar terminalsymboler genom att dubbelcitera terminalorden. Terminaler kan aldrig visas på vänster sida av metasymbolen
::=
i en härledningsregel . Brödtexten i definitionen på höger sida kan vara sammansatt av flera alternativa former där varje alternativ syntaktisk konstruktion separeras av metasymbolen|
. Var och en av dessa alternativa konstruktioner kan vara antingen terminala eller icke-terminala. - " Utökad Backus–Naur form" använder alla faciliteter i BNF och introducerar ytterligare två metasymboler för ytterligare funktioner. En av dessa två nya funktioner används för att beteckna en valfri fras i ett uttalande med hakparenteser om den valfria frasen. Den andra funktionen används för att beteckna en fras som ska upprepas noll eller fler gånger genom att ha frasen med parenteser.
- ' Wirth-syntaxnotation ' använder alla faciliteter i EBNF förutom att icke-terminalerna inte nödvändigtvis är vinkelparenteser utan alltid definieras på höger sida av
=
i dess produktionsregel. Det kräver inte heller att alla icke-terminaler är explicit definierade. Icke-terminaler som<text>
och<opt-whitespace>
är implicit definierade som ASCII-tecken respektive valfritt blanksteg. - ' Augmented Backus–Naur form ' betecknar icke-terminala symboler genom att starta ett ettordsnamn med ett alfabet som namn på den syntaktiska kategorin. Vinkelfästen krävs inte. Terminalsymboler betecknas antingen med dubbla citattecken eller betecknas med följande numeriska struktur: a
%
, följt avb
ellerx
ellerd
, följt av ett numeriskt värde eller en sammanlänkning av numeriska värden separerade med.
. Metasymbol-
placeras mellan två numeriska värden för att ange värdeintervall . Som för BNF förekommer aldrig terminalerna för ABNF på vänster sida av metasymbolen =i
härledningsregeln. Metasymbol/
betecknar växlingar . Vitt utrymme används för att separera element i definitionens brödtext. Metasyntaxen för upprepning i ABNF har flera former. En*
före ett element anger elementet som ska upprepas noll eller flera gånger. Numeriskt värde n1 följt av*
följt av numeriskt värde n2 följt av ett element anger elementet som ska upprepas minst n1 gånger och högst n2 gånger. Ett enstaka numeriskt värde n som föregår ett element anger att elementet ska upprepas n gånger. Kommentarer kan vara uttryckta efter metasymbol;
. Liksom i EBNF, anger hakparenteser en fras att frasen är valfri .
Variationer
Metasyntaxkonventionen för dessa formella metaspråk är ännu inte formaliserad. Många metasyntaktiska variationer eller tillägg finns i referensmanualen för olika datorprogrammeringsspråk. En variant av standardkonventionen för att beteckna icke-terminaler och terminaler är att ta bort metasymboler såsom vinkelparenteser och citattecken och tillämpa teckensnittstyper på de avsedda orden. I Ada , till exempel, betecknas syntaktiska kategorier genom att använda gemener sans-serif-teckensnitt på de avsedda orden eller symbolerna. Alla terminalord eller symboler i Ada består av tecken med kodposition mellan 16#20# och 16#7E# (inklusive). Definitionen för varje teckenuppsättning hänvisas till den internationella standarden som beskrivs av ISO/IEC 10646:2003. I C och Java betecknas syntaktiska kategorier med kursivt teckensnitt medan terminalsymboler betecknas med gotiskt teckensnitt. I J tillämpar dess metasyntax inte metasymboler för att beskriva J:s syntax alls. Snarare görs alla syntaktiska förklaringar på ett metaspråk som mycket liknar engelska som heter Dictionary, som är unikt dokumenterat för J.
Fördel med förlängningarna
Syftet med de nya tilläggen är att ge en enklare och entydig metasyntax. När det gäller enkelheten hjälper BNF:s metanotering definitivt inte till att göra metasyntaxen mer lättläst då metasymbolerna med öppen och slutlig utgång förekommer alltför rikligt. När det gäller tvetydighet genererar BNF:s metanotering onödig komplexitet när citattecken, apostrof, mindre-än-tecken eller större-än-tecken kommer att fungera som terminalsymboler, vilket de ofta gör. Den utökade metasyntaxen använder egenskaper som skiftläge, teckensnitt och kodposition för tecken för att minska ovannämnda onödiga komplexitet. Dessutom använder vissa metaspråk typsnittsseparatorkategorier för att införliva metasyntaktiska funktioner för layoutkonventioner, som inte formellt stöds av BNF.
Se även
- ^ Sellink, Alex och Chris Verhoef. " Utveckling, bedömning och omarbetning av språkbeskrivningar ." Software Maintenance and Reengineering, 2000. Proceedings of the Fourth European. IEEE, 2000.