Έχουν δημοσιευτεί
Σάββατο, 30 Μαΐου 2009 3:03 μμ
από το μέλος
PALLADIN
Κατά καιρούς συναντώ πολύ όμορφα κομμάτια κώδικα στο web. Ένα από αυτά είναι και
η toy regex engine που εντόπισα στο blog του Charles Cook.
Για το code archive μου... παραθέτω την υλοποίηση σε F# που εμπνεύστηκα
let char c (s : string) = seq { if s.Length > 0 && s.[0] = c then yield s.Substring(1) }
let (=>) l r s = seq { for sl in l s do for sr in r sl -> sr }
let (<|>) l r s = seq { yield! l s; yield! r s }
let rec (<*>) e s = seq { yield s; yield! (e => (<*>) e) s }
let (<+>) e = e => (<*>) e
// example c(a|d)+r
let pattern = char 'c' => (<+>) (char 'a' <|> char 'd') => char 'r'