#「JSONをvalidateできる正規表現」 http://mattn.kaoriya.net/software/javascript/20100324023148.htm ←こういうの見て、プログラマの教養として知っとくべき計算機科学の基礎と、それをどう普及させたらいいのかってことを考えたくなる。 #よく「コンピュータサイエンスの知識がなくてもプログラマになれる」と言う人がいて、プログラマの守備範囲によってはそれは真かもしれないけど、このへんは押さえとくといいよって範囲はあると思うし、そういうのがまとまって本なり記事なりになってるといいかなとも思うんだけど。
#上の例では、JSONを正規表現で簡易validateすること自体は別に悪くないし、目的によっては完全なパーズよりも簡易validateの方を選ぶのはありだけれど、少なくとも「JSONは(本来の意味での)正規表現ではパーズできない」っていうこと自体は判断できた方がいいと思うんだ、プログラマなら。
#正規表現でやろうとしたらどういうケースが検出できないかとか、あと正規表現とまっとうなCFGとでだいたい計算量のオーダーがどのくらいで、従ってどういう入力だと破綻するだろうな、とか。正確じゃなくていいんで感覚的にでもわかるとやっぱり便利なんじゃなかろうか。
#CLOSとその周辺はほしいかも
##そういや投票したなー。いつのまにやら100超えてるし。
#ずいぶん長いこと伸びなかったと思うんだけどまつもとさんが日記に書いてぐいっと伸びた時は歓喜したもんだが。
#そーいやnobsunだったな、コレ
##そもそも拡張正規表現(Perlish Regexp?)は正規表現とは別の物になってしまった気がするし
#オレLisp処理系Nendoに多値を組み込みたいけど、どうやったらいいのか悩み中です。
#ちなみにNendoは継続とかサポートしていません。
#巷のSchemeライブラリのソースを流用したいことが多いので、できれば values と receive がそのまま動けばうれしいのですが...
#Perlの拡張正規表現でも、本来の正規表現からはみ出すのってbackreferenceくらいじゃないっけ? 上のメールアドレスもコメントのネストは扱ってないですよね。
#鬼車だと \g だっけ、正規表現を再帰的に埋め込むことができて、これはCFGに近くなると思うんだけど。
#>kiyoka 性能を考えないなら、guileがやってたように0個と2個以上の値を特別なオブジェクトにパックしてしまうってのでとりあえず動かすことはできますよ。
#受け取る値の個数を間違えた場合にその内部的な「多値オブジェクト」が見えてしまう、というのがちょっと残念ですが。
#(define (values . args) (match args [(val) val] [_ (make-values args)]))
#(define (call-with-values producer consumer) (let ((v (producer))) (if (values? v) (apply consumer (values-values v)) (consumer v))))
#多値オブジェクトは make-values で作成、values? で判断、 values-valuesで値リスト取り出し、と想定。
#(define-syntax receive (syntax-rules () ((receive vars expr body ...) (call-with-values (lambda () expr) (lambda vars body ...)))))
###コメントのネストに対応ですと? Perl 5.10だと再帰が書けるのか。
##正規文法+再帰はATN (Augumented Transition Network) でパーズできるものになると思うんだけど、これってCFGと同じクラスなのかな?
#(?-1) ← これかな?
#だと思います。