[python] Problem s regularnym vyrazom
Petr Prikryl
PrikrylP na skil.cz
Pátek Únor 2 14:42:21 CET 2007
> Petr Prikryl wrote:
> > RMiklos na ...sk
> >> [...]'''CREATE TABLE IBPDDB071/R004660V
> >> (PERSONNR DECIMAL (10, 0) NOT NULL WITH DEFAULT,
> >> LFDNR1 DECIMAL (3, 0) [...] );'''
> >
> > No jasně. Když jsou vevnitř závorky, tak to nemůže
> > fungovat. Problém je principiální. Regulární výrazy
> > obecně nemohou popisovat řetězce jazyků, které obsahují
> > párové struktury. Možná se dají zpracovat nějaké speciální
> > případy na základě dalších znalostí.
> >
> Presne tak. V tomhle pripade jsem si pohraval s myslenkou,
> ktera by se dala zapsat matematicky asi takhle (pouze
> pro retezec v zavorkach):
>
> A = {a-zA-Z0-9_, }
> B = {0-9, }
> C = (B*)
> L = (A*+C*)
>
> Bohuzel, kdyz na to ted koukam, tak jazyk L neni regularni.
> Presto si ale myslim, ze tento jazyk lze popsat gramatikou
> popr. automatem. Jestli se pletu, opravte me prosim.
No, mělo by to jít, protože tady jde o speciální případ.
Jednak se používá nástroj pro "regulární výrazy s rozšířením".
Při jeho překladu se buduje konečný automat (odhad), který
má navíc jakoby globální proměnné (hodnoty skupin).
Můžu předepsat non-greedy vyhodnocování. Zkoumaný
řetězec navíc neobsahuje libovolně zanořené párové struktury,
ale pouze dvě úrovně. Automat se tedy nemusí rozšiřovat až
na obecnější, zásobníkový. Stačí ho trochu rozepsat a
úroveň zanoření vyjádřit přechodem do jiné části automatu.
Měl by tedy jít napsat i regulární výraz.
pepr
P.S. Nechce se mi do toho ;-)
Další informace o konferenci Python