[Libfsd-devel] Tva-onova
Status: Planning
Brought to you by:
vanio
|
From: Ivan P. <va...@ne...> - 2005-09-17 07:39:52
|
Privet!
Za da ne zamira "proekta" (:]) dokato Pesho go trese predpizpitna treska
(uspeh, Pesho!), eto kakvo e polozhenieto i kakvi vuprosi me zanimavat.
Znachi do tuk imam implementnat parser-a na reguljarni izrazi, kojto e pochti
POSIX-compatible (ostavat mnogo malko featuri da se dobavjat, ama za sega me
murzi, puk i te sa njakvi dosta nenuzhni - nikoga ne bjah chuval za collating
sequences i equivallence classes v reguljarni izrazi predi da procheta
spesifikacijata). Taka che za momenta tozi parser shte svurshi rabota.
Edinstveno ostavat da se napravjat testove i malko da se pozagladjat njakoi
rubove :).
Mislja che ottuk mozhem da zapochnem da pravim avtomatite. Struva mi se
naj-dobre da zapochnem s njakakuv vid general avtomati (GFA - General Finite
Automaton), kojto da e abstrakten i da njama azbuka. Tuk idva purvijat
vupros. Izglezhda edinstvenoto, koeto razlichava vsichki vidove avtomati i
transduceri za koito se seshtam e azbukata. Primerno za NFA tova shte sa
njakakvi simvoli, a za transducerite azbukata sa dvojki ot naj-obshto simvol
i output string. Toest trjabva tozi GFA da se napravi taka che sled tova da
mozhe s neshto kato konfiguracija da se napravi proizvolen drug avtomat.
Za momenta varianta, do kojto sum go dobutal, e da ima slednite obekti
*************************************************************
struct trans;
struct state;
struct gfa {
struct state *states; // Head of the list of states
struct state *start; // Head of the list of starting states
struct state *final; // Head of the list of final states
pool_t state_pool; // Pool from which the states are allocated
pool_t trans_pool; // Pool from which the transitions are allocated
size_t state_nr; // Number of states - used for assigning next state id
// --- Some overridable methods for managing transitions -----------------
insert_func_t *insert; // Transition inserting function
remove_func_t *remove; // Transition removing function
search_func_t *search; // Transition searching function
};
struct state {
struct trans *incoming; // List of incoming transitions
struct trans *outgoing; // List of outgoing transitions
struct state *start; // Link in list of start states (NULL if non-start)
struct state *final; // Link in list of final states (NULL if non-final)
struct state *next; // Link in list of all states
struct gfa *parent; // The automaton this state is part of
size_t id; // Id for dumping and accessing purposes
// More stuff?...
};
struct trans {
struct state *src; // Where from
struct state *dst; // Where to
struct trans *src_next; // Link in the list of transitions for src
struct trans *dst_next; // Link in the list of transitions for dst
// Intentionally no symbol -- this is an abstract transition
};
// --- Example: NFA transition
struct nfa_trans {
struct trans base; // Should be first for lists and casts to work
char alpha;
};
*************************************************************
Neshto ej takova.. Puk posle kato se initializira konkreten avtomat shte se
podava size-a na alphabet symbola i taka shte se inicializira trans_pool.
Sushto shte se podavat i konkretni funkcii za insert/remove/search na
transition, koito obshto vzeto shte vzimat src_state, symbol, dst_state i
shte pravjat kakvoto tam se nalaga.
Tuk veche idva vuprosa za efektivnostta. Mozhe da vi pravi vpechatlenie che
baja pamet shte jade tova zhivotno, obache puk shte ima vsichki neobhodimi
vruzki, koeto se nadjavam da ulesni algoritmite posle.
Stoi sushto vuprosa kak shte sa podredeni transitionite za daden state. Za
momenta shte e dummy list bez nikakva naredba, obache se seshtate che tova ni
kachva slozhnostta na izpulnenie na avtomat vurhu dadena duma.
Tova e edna ot prichinite da zabija insert/remove/search operaciite kato
function pointers - edin vid vseki konkreten avtomat shte si reshava kak da
gi redi, i tursi. Mozhe za momenta da gi ostavim po tozi nachin puk v
budeshte ako se poluchi mnogo tezhko naistina da mislim kak da se optimizira.
Obshto vzeto ima megdan.
Ta tova e obshto vzeto predlozhenieto za sega. Kakvo mislite?
Mozhe da obsudim na zhivo Pesho kato si vzeme durzhavnija s otlichie, i bez
tova shte trjabva da cherpi ne edna i dve biri po povoda :)
Ajde do kukane i pishete ako neshto
|