Abych předešel poteniconálním útokům vůči mým vědomostem: Pojmy "Parserování" a "Syntexace" jsem druhu skriptům a programům přiřadil já, líbí se mi je tak nazývat a je možné, že zavedené techniky, pod kterými jsou tyto pojmy známy, budou odlišné.
Předslov:
Mnoho lidí se zde na fóru i mě v PMkách ptá, jak udělat různé systémy a funkce přes soubory..
Např. Chci uložit více proměnných do souboru a poté chci ty proměnné zase zpátky do skriptu..
Překladač, který převádí tyto proměnné do souboru a zase zpátky nazývám Parser (Mám jistě i jiné označení, ale zrovna si nevzpomínám).
Druh uložení proměnných do souboru nazývám Syntexací.
Základ je syntexace
Pro sestavení parseru je potřeba znát, jakým způsobem bude parser proměnné číst, zpracovávat a nebo zapisovat.
Sestavování syntaxí je jednoduchá věc. Musíte myslet logicky, strukturálně a hlavně zlehčovat práci parseru.
Představme si, že potřebujeme uložit proměnnou Bagr_Num jenž bude nosit číselnou (integer) hodnotu, určující počet bagrů, dále pak např. proměnnou MainBagr_Name, což bude proměnná nesoucí název hlavního bagra (string) a nakonec třeba proměnnou KingBagr_Mood, která bude ukazatalem nálady královského bagra (bool).
Budeme tedy ukládat a získávat 3 proměnné: Integer, string a bool. Syntexace je v tomto případě velmi jednoduchá.
Syntaxe našeho souboru může být ve formě tří řádků, na každém hodnota našich proměnných za sebou jdoucích.
Takže obsah našeho souboru ve výsledku bude např:
242
Super Bagr
true
Podle našeho budoucího parseru můžeme řádek s třetí proměnnou zapsat i jako hodnoty 1 a 0, nebo "ano", "ne". Budeme ovšem muset přizpůsobit náš parser.
Cílem budiž Parser
Když máme připravenou syntaxi souboru, můžeme se vrhnout na Parser.
Parser je vlastně takový překladač, který podle předložené šablony, nebo proměnných klíčů setřídí proměnné do svých pozic, nebo naopak proměnné zapíše do souboru.
Jak vlastně funguje Parser na základě šablon?
Šablonový parser funguje na základě pevného ustanovení proměnných v souboru. Je náchylný k chybám, jelikož pokud se struktura souboru změní, přestane parser fungovat dle našich očekávání.
Naše syntaxe, kterou jsme si sestavili o sekci výše je přizpůsobená právě pro šablonový parser.
A jak funguje klíčový parser?
Klíčový parser potřebuje ke své funkčnosti jinou syntexaci, ale zato je méně náchylný k strukturálním chybám (vlastně pokud je dodržen správný název klíče, separátoru a hodnoty, nemělo by dojít k žádné chybě)
Jak takový parser sestavit si ukážeme později v článku.
Sestavení našeho parseru.
Nyní už se tedy můžeme vrhnout na sestavení našeho parseru. Jelikož se ocitáme na fóru o Pawn, budu psát parser právě v jazyce Pawn. Nebudu vysvětlovat funkce, které využívám, jejich funkčnost se dá najít na samp wikipedii.
Celý kód parseru:
Čtecí část parseru funguje na základě proměnné sčítající řádky a dle její hodnoty se čtou jednotlivé proměnné.
Psací část parseru sestavuje textový string složený z proměnných v sérii oddělené odřádkováním.
Celý parser je celkově jednoduchý i lehce pochopitelný (Pokud z kódu nepochopíte princip, nejspíše tento návod není pro vaše očička)
Klíčový parsing
Klíčový parsing je odlišný druh syntexace a jejího parsování. Vše je provedeno na základě klíčů a jejich hodnot (FileSystém DINI je klíčový parser)
Jeden řádek v souboru se většinou skládá z klíče, separátoru a hodnoty
Ukázka:
BagrNum=270
MainBagrName=Strýček bagřitý fuseklíček
KingBagrMood=true
Klíč je většinou nalevo od separátoru, separátor v ukázce je "=" (rovnítko), na pravé straně od separátoru je hodnota.
Výhodou klíčového parsingu je, že se řádky můžou míchat mezi sebou a není zde potřeba žádná šablona. Jedinou výzvou syntexace je sestavení vzorového řádků, po kterém bude parsér číst a překládat, nebo i zapisovat.
Úkol pro vás: Dokážete sestavit funkční klíčový parser, který dokáže přečíst i zapsat ukázku uvedenou výše v sekci?
Vaše práce přikládejte jako odpovědi k tomuto příspěvku. Pokud se tu po delší dobu neukáže žádná použitelná prezentace, sestavím takový parser do tohoto článku já.