PDI^2

E’ morto luca coscioni

personale, italia February 20, 2006 9:59 pm (Save post)

Una perdita importante per chi crede nella libertà di ricerca, una persona che pur soffrendo di sclerosi laterale amiotrofica ha fatto nella vita più di tanti altri.
Se non sapeste chi fosse, rimando a Wikipedia, ed alle belle parole di Emma Bonino (se volete potete pensare di sostituire alla parola “radicali” quella che preferite).

Visualizzare Regexp

programmazione, web, software 12:06 am (Save post)

Le espressioni regolari sono una cosa stupenda, la ragione 1007 per cui mi piace ruby è che le Regexp sono oggetti di prima classe nel linguaggio. Non che non ci siano ragioni per cui sia preferibile averle in una libreria, solo che io preferisco una comoda sintassi.
Ma sto divagando.

Purtroppo la maggior parte delle persone (io incluso) approcciano le espressioni regolari con una visione “ad esempi” senza capire i meccanismi sottostanti.
Ora, non mi pare il caso di fare una discussione su automi a stati finiti deterministici o meno, su come avere il backtracking possa influenzare drammaticamente le prestazioni di un regexp engine o sul perché le espressioni regolari in perl siano turing complete, tanto ci sono un fottio di documenti in rete a riguardo, e poi alla fine io mi confondo e non capisco e dico cavolate, specie di domenica sera.

Però volevo segnalare questo tool bellissimo che visualizza il funzionamento di un semplice sistema di regexp (forse un po’ troppo semplice, ma è fico).

Pensandoci, mi viene in mente anche una funzioncina utilissima presente nel paccheto regexp su rubyforge. In pratica l’autore stava sviluppando un suo motore scritto completamente in ruby, utile per un suo editor.
Uno degli effetti collaterali è stata la generazione di questa funzione utilissima che mostra il modo in cui viene vista una espressione regolare dal sistema:

>> require 'regexp'
=> true
>> rgx=/[cm]iao( mondo)?/
=> /[cm]iao( mondo)?/
>> puts rgx.tree
+-Sequence
  +-Inside set=[\"c\", \"m\"]
  +-Inside set=\"i\"
  +-Inside set=\"a\"
  +-Inside set=\"o\"
  +-Repeat greedy{0,1}
    +-Group capture=1
      +-Sequence
        +-Inside set=U-0020
        +-Inside set=\"m\"
        +-Inside set=\"o\"
        +-Inside set=\"n\"
        +-Inside set=\"d\"
        +-Inside set=\"o\"

fico, no?

Get free blog up and running in minutes with Blogsome
Theme designed by Janis Joseph