gperf


Kdyz jsem uz nakousnul problem rozdelavani textovych fajlu v cecku chci ho taky dokoncit takze i gperf je program pro generovani programu pro pracu z textem...Manual rika ze je to hash table generator..To znamena ze generuje tabulky pro rozpoznavani stringu-proste kdyz mate retezec vite jeho delku a chcete urcit ktery z 50 klicovych slov to je neni nic lepsiho. Je pomoci neho napsana lexikalni analyza treba kompileru ceka..takze je opravdu dobrej.. Narozdil od flexu nedela nejakou vetsi analyzu-jediny co umi je urcit ktery z 50 slov tento retezec je..Proto je mnohem jednodusi a taky rychlejsi. Neni soucasti standarnti distribuce takze si ho musite stahnout jmenuje se cperf- a je na standartnim gnu site takze i na hodne mirrorech v cecach. Potuluje se i package z jmenem gperf ale to je puvodni verze v c++ takze mene prenositelna a pomalejsi..

Algoritmus kterym postupuje gperfovy rozpoznavac je jednpduchy:

cislo co vyjde je cislo klicoveho slova ve strukture..staci jen porovnat jestli sedi i zbyla pismena.
tabulce se rika hash table a je to vlestne nejvetsi problem-to co gperf generuje. Z algoritmu je videt ze to nebude fungovat vzdy:treba kdyz je vas jazyk slozen ze slov:
int
iit 
maji v tabulce stejnou pozici a vubec to fungovat nebude...Je tu samozdrejme prepinac ktery algoritmus trochu rozsiri a kdyz jsou tyto kolize vyzkousi proste vsechny mozna slova(tedy int i iit a podle toho vrati spravny vysledek. tato situace nastesti vetsinou nevznikne.

nejjednodusi zdrojak pro gperf je prosty seznam slov vygeneruje to potom ceckovsky zdrojak kde je tabulka a funkce in_word_set ktera kdyz se zavola in_word_set(text,delka) vrati 0 kdyz nic nenalezla nebo cislo. gperf ale umi trochu vic:jeho zdrojak se muze skladat z:

Deklarace
%%
Klicova slova
%%
nejakej ceckovskej kod
Deklarace je dobra kdyz k cislo klicovyho slova chcete vedet jeste neco treba prioritu operatoru nebo coslo tokeny prob bisona prvni polozka musi byt char * z textem treba:
struct slovo {char *text;int token;};
%%
int,258
char,259
float,FLOAT
atd...potom se muzete odvolavat na polozky struktury a prace je prijemnejsi gperf ma samozdrejme hafo prepinacu-jestli generovat kod pro c,c++,gnu,ansi c atd nejaky ty typy tabulek a dalsi ptakoviny

Proti fklexovi je to strasne jednoducha vec ale pokud vam jde o rychlost nebo mate nejakej problem co ve flexovi nejde je to super! taky vygenerovanej zdrojak je samostatnej a muze se dodavat rovnou v distribuci nebo pouzivat pod dosem


Tento soubor je soucasti rozsahle sbirky skolicek na http://www.ucw.cz/~hubicka/skolicky

Take si muzete prohlidnout jeji puvodni textovou podobu

Nebo mi mailnout na hubicka@ucw.cz

Copyright (C) Jan Hubicka 1995