Szerkesztő:Gyimbot/Sablonparszer

A Wikipédiából, a szabad enciklopédiából

Ez a szócikk a gyimbot által használt parszer működését, a parszer által értett nyelvet írja le. A sablonhívásokat és azok paramétereit gyűjti ki egy wikilapról. A wikinyelvnek csak azokat az elemeit ismeri fel, amelyek ehhez szükségesek. Ez a wikinyelvnek csak töredéke, de annak legbonyolultabb része.

A szintaxist egyszerűsített Backus–Naur alakban, a szemantikát szöveges leírással adjuk meg.

Wikinyelv[szerkesztés]

wikiszöveg := szöveg | komment | sablonhívás

szöveg a szócikk szövege, ami nem tartalmaz a szabályban utána megadott szintaktikus egységet (ez esetben kommentet és sablonhívást). A parszer átugorja: számára nem tartalmaz információt. A szöveg megjelölést a későbbiekben is ebben az értelemben használjuk.

komment := <!-- szöveg -->

A narancsszínű szöveg konstans: a leírt módon kell szerepeljen a wikiszövegben.

sablonhívás := {{ [ komment ] név [ komment ] [ | paraméter ]… }}

A szögletes zárójel közötti szintaktikus egység elmaradhat. A … előtti többször ismétlődhet. A [ ]… 0-szor vagy többször előfordulható szöveget jelent.

paraméter := [ név = ] parérték

Ha a név elmarad, a wiki automatikus nevet ad. Az első név nélküli paraméter neve 1, a másodiké 2, stb. A név nélküli és neves paraméterek felváltva használhatók (ahogy a fenti szintaxis mutatja). Nem lehet két azonos nevű (más szóval: kétszer megadott) paraméter. A parszert használó egyik alkalmazás kifejezetten azért íródott, hogy ezeket a dupla paramétereket kilistázza.

A sablonparszerben a sablonparaméterek feldolgozása az egyetlen rész, mely nem környezetfüggetlen.

parérték := érték…
érték := szöveg | komment | nowiki | belsőlink | sablonhívás

A belső linket azért kell megkülönböztetni, mert lehet benne | jel, amit nem szabad összetéveszteni a paraméter lezárásával. Nowikit azért kell megkülönböztetni, hogy a benne levő, [[-vel vagy {{-val kezdődő szöveget a parszer ne tekintse belső linknek ill. sablonhívásnak, azaz ne keresse a végét. Az értékbeli sablonhívást a parszer rekurzióval dolgozza fel.

nowiki := <nowiki> nowikiszöveg… </nowiki>
nowikiszöveg := szöveg | komment
belsőlink := [[ név [ | linkszöveg… ] ]]
linkszöveg := szöveg | komment | sablonhívás

A sablonhívás itt is rekurziót okoz.

Huwikinyelv[szerkesztés]

A magyar Wikipédián szóban megadott szemantikával az addig egymástól független szemantikai elemek között összefüggést írtak elő. Ahhoz, hogy a parszer értse, a szemantikát formalizálni kell.

A nyelv két szóban forgó eleme a {{wd}}(?) és {{linkiw}}(?) sablon. Mindkettő interwiki linket csinál: az előbbi más nyelvű Wikipédiába, az utóbbi Wikidatába. A két sablonhívást egy-egy belső link előzi meg. A belső link és a sablonhívás összetartozik, szemantikailag a sablonhívás részei.

Mindkét sablon létezik más nyelvű Wikipédiákon, de ott a link a sablon paramétereként van megadva, nem független szintaktikai egységként.

huwikiszöveg := szöveg | komment | wdhívás | linkiwhívás | sablonhívás

sablonhívás-ban a sablon neve nem lehet wd vagy linkiw.

wdhívás := belsőlink szöveg {{wd |paraméter}}

szöveg nem tartalmaz belső linket és sablonhívást. Pontos meghatározása nincs.

linkiwhívás := belsőlink szöveg {{linkiw |paraméter}}

szöveg nem tartalmaz belső linket és sablonhívást. Pontos meghatározása nincs.

Miután a nyelv egyes részei definiálatlanok, nem lehet rá parszert írni.