Wirthova syntaxe - Wirth syntax notation - Wikipedia
Wirthova syntaxe (WSN) je metasyntax, tj. formální způsob popisu formální jazyky. Původně navrhl Niklaus Wirth v roce 1977 jako alternativa k Backus – Naurova forma (BNF). Oproti BNF má několik výhod v tom, že obsahuje explicitní iterační konstrukci a vyhne se použití explicitního symbolu pro prázdný řetězec (například
WSN byl použit v několika mezinárodní standardy, začínání s ISO 10303-21.[2] To bylo také používáno k definování syntaxe VYJÁDŘIT, modelování dat jazyk KROK.
WSN definována sama o sobě
SYNTAX = { VÝROBA } . VÝROBA = IDENTIFIKÁTOR "=" VÝRAZ "." . VÝRAZ = OBDOBÍ { "|" OBDOBÍ } . OBDOBÍ = FAKTOR { FAKTOR } . FAKTOR = IDENTIFIKÁTOR | DOSLOVNÝ | "[" VÝRAZ "]" | "(" VÝRAZ ")" | "{" VÝRAZ "}" . IDENTIFIKÁTOR = dopis { dopis } . DOSLOVNÝ = """" charakter { charakter } """" .
Znaménko rovná se označuje produkci. Prvek vlevo je definován jako kombinace prvků vpravo. Výroba je ukončena tečkou (tečkou).
- Opakování je označeno složenými závorkami, např., {A} znamená ε | a | aa | aaa | ....
- Volitelnost je vyjádřena hranatými závorkami, např., [a] b znamená ab | b.
- Závorky slouží k seskupení, např., (a | b) c znamená ac | před naším letopočtem.
Tyto koncepty dnes považujeme za samozřejmost, ale v roce 1977 byly nové a dokonce kontroverzní. Wirth později některé koncepty (s odlišnou syntaxí a notací) začlenil do rozšířená forma Backus – Naur.
Všimněte si toho dopis
a charakter
zůstávají nedefinované. Je to proto, že číselné znaky (číslice 0 až 9) mohou být zahrnuty do obou definic nebo vyloučeny z jedné definice, v závislosti na definovaném jazyce, např.:
číslice = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" . velká písmena = "A" | "B" | … | „Y“ | "Z" . malá písmena = "A" | „b“ | … | "y" | „z“ . dopis = velká písmena | malá písmena .
Li charakter
dále zahrnuje číslice
a další pro tisk ASCII znaků, pak se od nich ještě více odchyluje dopis
, o kterém lze předpokládat, že nezahrnuje číselné znaky ani žádné speciálníalfanumerické ) postavy.
Další příklad
Syntaxe BNF může být na základě překladu reprezentována pomocí WSN následujícím způsobem samotný příklad BNF:
syntax = pravidlo [ syntax ] . pravidlo = opt-whitespace "<" název pravidla ">" opt-whitespace "::=" opt-whitespace výraz line-end . opt-whitespace = { " " } . výraz = seznam [ "|" výraz ] . konec řádku = opt-whitespace EOL | konec řádku konec řádku . seznam = období [ seznam volných mezer ] . období = doslovný | "<" název pravidla ">" . doslovný = """" text """" | "'" text "'" .
Tato definice se jeví jako příliš komplikovaná, protože koncept „volitelné“ mezery „musí být explicitně definováno v BNF, ale je implicitní ve WSN. I v tomto příkladu text
není definováno, ale předpokládá se, že znamená „ASCII znak {Znak ASCII}
". (EOL
také není definováno.) Všimněte si, jak kludge "<" název-pravidla ">"
byl použit dvakrát, protože text
nebyl výslovně definován.
Jedním z problémů s BNF, který tento příklad ilustruje, je to, že umožňuje použití znaků s jednoduchou i dvojitou uvozovkou pro doslovný
, existuje další potenciál pro lidskou chybu při pokusu o vytvoření strojově čitelné syntaxe. Jedním z konceptů migrovaných na pozdější metasyntaxe byla myšlenka, že když uživatel měl více možností, bylo obtížnější psát analyzátory pro gramatiky definované syntaxí, takže počítačové jazyky obecně se staly přísnějšími v tom, jak citovaný doslovný je definováno.
Reference
- ^ Wirth, Niklaus (Listopad 1977). "Co můžeme dělat s zbytečnou rozmanitostí notací pro definice syntaxe?". Komunikace ACM. 20 (11): 822–823. doi:10.1145/359863.359883.
- ^ „ISO 10303-21, Průmyslové automatizační systémy a integrace - Reprezentace a výměna dat o výrobcích - Část 21: Metody implementace: Jasné kódování textu struktury výměny“. Mezinárodní organizace pro normalizaci. 2002-01-24. Citovat deník vyžaduje
| deník =
(Pomoc)