Sintetizarea etapelor de înregistrare a datelor dintr-o colecţie PGN
Grupăm în numai două scripturi Bash toate operaţiile necesare (implicând diverse "instrumente" şi limbaje, sau alte scripturi executabile) pentru extragerea, filtrarea şi gruparea datelor existente într-un fişier PGN şi înregistrarea corespunzătoare a acestora (prin modulul Python MySQLdb) în baza de date constituită în scopul reflectării unor colecţii de partide de şah adnotate (de Crafty), ale utilizatorilor.
Modelarea şi înregistrarea datelor dintr-o colecţie de partide de şah
Extragerea şi gruparea datelor specifice dintr-un fişier PGN care conţine o colecţie de partide de şah necesită o gamă variată de "instrumente", încât modelarea (în Python Django) şi înregistrarea acestor date (prin modulul Python MySQLdb) devine o etapă de sine stătătoare în realizarea unei aplicaţii Web de prezentare a acestor partide (aproape independentă de realizarea propriu-zisă a aplicaţiei).
Prelucrări de text PGN şi adnotarea partidelor de şah
Identifică, extrage şi grupează informaţii dintr-un fişier text (partide de şah în format PGN), folosind modulul Python pyparsing (şi alte instrumente). Pune la punct o procedură practică (implicând AWK şi Bash) pentru derularea analizei automate a partidelor de şah folosind Crafty.
Notaţia prefix canonică şi reprezentarea DOT a expresiei
Urmărim (folosind şi C++11) scopuri practice - cum obţinem reprezentarea prefixată (complet parantezată), împreună cu descrierea DOT a arborelui sintactic pentru expresii algebrice date în formatul obişnuit, infixat; nu vizăm "analiza sintactică" în sine, ca tehnică sau metodologie - ci doar la nivel de algoritm, modelând direct (la nivel de caracter, cu neajunsurile specifice) metoda "precedence climbing".
Algoritm pentru descrierea DOT a arborelui sintactic al unei expresii
Ne bazăm pe formatul prefixat canonic (impus de predicatul write_canonical
din Prolog); de exemplu, expresia 2+3*4+5 are formatul +(+(2,*(3,4)),5) (separând cu ',' subarborele stâng de cel drept şi parantezând subarborii).
Numerotăm operatorii şi operanzii, imitând metoda clasică de reprezentare pe un tablou a unui arbore binar (fiii nodului N sunt 2N şi 2N+1, N≥1). Pentru nodul curent N creem înregistrarea DOT N[label="op"] unde op este operatorul/operandul respectiv. Când citim '(' - dublăm N-ul curent (urmează fiul stâng), iar când citim ',' - incrementăm N-ul curent (urmează fiul drept); în ambele cazuri, creem înregistrarea DOT a muchiei: N/2 -- N. Când întâlnim ')' - înjumătăţim N-ul curent (regăsind N-ul părintelui, de la care va urma eventual o nouă ramură).
vezi Cărţile mele (de programare)