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 .

"Railroad" syntax diagram

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