Syntaxdiagram
Syntaxdiagram (eller järnvägsdiagram ) är ett sätt att representera en kontextfri grammatik . De representerar ett grafiskt alternativ till Backus-Naur-formen , EBNF , Augmented Backus-Naur-formen och andra textbaserade grammatiker som metaspråk . Tidiga böcker som använder syntaxdiagram inkluderar "Pascal User Manual" skriven av Niklaus Wirth (diagrammen börjar på sidan 47) och Burroughs CANDE Manual. I kompileringsfältet är textrepresentationer som BNF eller dess varianter vanligtvis att föredra. BNF är textbaserat och används av kompilatorförfattare och parsergeneratorer. Järnvägsdiagram är visuella och kan vara lättare att förstå av lekmän, ibland inkorporerade i grafisk design. Den kanoniska källan som definierar JSON- datautbytesformatet ger ytterligare ett exempel på en populär modern användning av dessa diagram.
Principen för syntaxdiagram
Representationen av en grammatik är en uppsättning syntaxdiagram. Varje diagram definierar ett "icke-terminalt" steg i en process. Det finns ett huvuddiagram som definierar språket på följande sätt: för att tillhöra språket måste ett ord beskriva en väg i huvuddiagrammet.
Varje diagram har en ingångspunkt och en slutpunkt. Diagrammet beskriver möjliga vägar mellan dessa två punkter genom att gå genom andra icke-terminaler och terminaler. Historiskt sett har terminaler representerats av runda lådor och icke-terminaler av rektangulära lådor men det finns ingen officiell standard.
Exempel
Vi använder aritmetiska uttryck som exempel, i olika grammatikformat.
BNF:
< uttryck > ::= < term > | < term > "+" < uttryck > < term > ::= < faktor > | < faktor > "*" < term > < faktor > ::= < konstant > | < variabel > | "(" < uttryck > ")" < variabel > ::= "x" | "y" | "z" < konstant > ::= < siffra > | < siffra > < konstant > < siffra > ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
EBNF:
expression = term , [ "+" , uttryck ]; term = faktor , [ "*" , term ]; faktor = konstant | variabel | "(" , uttryck , ")" ; variabel = "x" | "y" | "z" ; konstant = siffra , { siffra }; siffra = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
ABNF:
uttryck = term [ "+" uttryck ] term = faktor [ "*" term ] faktor = konstant / variabel / "(" uttryck ")" variabel = "x" / "y" / "z" konstant = 1* siffra SIFRA = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
Observera att ABNF också stöder intervall, t.ex. DIGIT = %x30-39
, men det används inte här för att överensstämma med de andra exemplen.
Röd (programmeringsspråk) Parse Dialect:
Röd [ Titel: "Parse Dialekt" ] uttryck: [ term opt [ "+" uttryck ]] term: [ faktor opt [ "*" term ]] faktor: [ konstant | variabel | "(" uttryck ")" ] variabel: [ "x" | "y" | "z" ] konstant: [ någon siffra ] siffra: [ "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ]
Observera att detta format också stöder intervall, t.ex. siffra: teckenuppsättning [#"0" - #"9"] ,
men det används inte här för att överensstämma med de andra exemplen.
Ett möjligt syntaxdiagram för exempelgrammatiken finns nedan. Observera att även om syntaxen för de textbaserade grammatikerna skiljer sig, kan syntaxdiagrammet för dem alla vara detsamma eftersom det är ett metaspråk .
Se även
Notera: den första länken blockeras ibland av servern utanför dess domän, men den är tillgänglig på archive.org . Filen speglades också på standardpascal.org .
externa länkar
- JSON-webbplats inklusive syntaxdiagram
- Generator från EBNF
- Från EBNF till en postscript-fil med diagrammen
- EBNF Parser & Renderer
- SQLite syntaxdiagramgenerator för SQL
- Online Railroad Diagram Generator
- Augmented Syntax Diagram (ASD) grammatik
- (ASD) Augmented Syntax Diagram Application Demo Site
- SRFB Syntax Diagram representation av funktionsbasis + svg generation