Udvidet Backus-Naur form: Forskelle mellem versioner
Content deleted Content added
Glenn (diskussion | bidrag) m linkændr |
Glenn (diskussion | bidrag) ændrer EBNF beskrivelser - de splittes i leksikalsk analyse og parser Tag: Flertydige links |
||
Linje 7:
Denne artikel anvender EBNF som specificeret af ISO i eksempler, der gælder for alle EBNF'er. Andre EBNF-varianter anvender lidt andre syntaktiske konventioner.
EBNF kan både anvendes i den [[leksikalsk analyse]] (splitter tekststrengen op i ''tokens'' ("sprogatomer") og fjerner [[whitespace]]) - og i [[parser]]en.
== Eksempler ==
Line 15 ⟶ 17:
===EBNF===
====leksikalske analyse====
Selv EBNF kan beskrives ved at anvende EBNF. Den [[leksikalske analyse]] gør følgende: Input (tegn) fås fra en [[tekstfil]]. Output er tokens med metadata (whitespace smides typisk ud):
<syntaxhighlight lang="ebnf-lexical-analysis">
letter = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
Line 26 ⟶ 29:
| "q" | "r" | "s" | "t" | "u" | "v" | "w"
| "x" | "y" | "z" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
symbol = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">"
| "'" | '"' | "=" | "|" | "." | "," | ";" ;
character = letter | digit | symbol | "_" ;
white_space = \t | \n | \r | " " ;
identifier = letter , { letter | digit | "_" } ;
terminal = "'" , character , { character } , "'"
| '"' , character , { character } , '"' ;
token = symbol | identifier | terminal ;
grammar = { white_space } , { token , { white_space } } ;
</syntaxhighlight>
====Parser====
Betragt den skitserede grammatik herunder baseret på [[ASCII-tegnsæt]]tet (derfor ingen ÆØÅ). Parser: Input (tokens) fås fra den ovenstående leksikalske analyse. Output er et syntakstræ:
<syntaxhighlight lang="ebnf-parser">
rhs = identifier▼
| terminal
| "[" ,
| "{" ,
| "(" ,
|
|
▲rule = lhs , "=" , rhs , ";" ;
grammar = { rule } ;
</syntaxhighlight>
Line 50 ⟶ 71:
===Pascal===
====Leksikalsk analyse====
A [[Pascal (programmeringssprog)|Pascal]]-lignende programmeringssprog, som kun tillader tildelinger, kan defineres i EBNF med ASCII-tegnsættet som følger:▼
Et [[Pascal (programmeringssprog)|Pascal]]-lignende programmeringssprog, som kun tillader tildelinger, kan defineres i EBNF med ASCII-tegnsættet som følger. [[Leksikalsk analyse]]: Input (tegn) fås fra en [[tekstfil]]. Output er tokens med metadata (whitespace smides typisk ud):
<syntaxhighlight lang="ebnf-lexical-analysis">
program = 'PROGRAM', white space, identifier, white space, ▼
| "H" | "I" |
| "O" | "P" |
white_space = \t | \n | \r | " " ;
symbol = symbol_no_quotes | "'" | '"' ;
visible_characters_no_quotes = letter | digit | symbol_no_quotes | " " ;
number = [ "-" ] , digit , { digit } ;
textstring = '"' , { visible_characters_no_quotes | "'" } , '"' ;
token = symbol | identifier | number | textstring ;
grammar = { , white_space , } , { token , { , white_space } } ;
</syntaxhighlight>
====Parser====
▲
<syntaxhighlight lang="ebnf-parser">
'BEGIN',
{ assignment, ";",
'END.' ;
▲ identifier = alphabetic character, { alphabetic character | digit } ;
▲ alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
▲ | "H" | "I" | "J" | "K" | "L" | "M" | "N"
▲ | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
▲ | "V" | "W" | "X" | "Y" | "Z" ;
▲ digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
</syntaxhighlight>
|