$30 off During Our Annual Pro Sale. View Details »

sre_introduction.pdf

 sre_introduction.pdf

Niyarin

July 06, 2019
Tweet

More Decks by Niyarin

Other Decks in Programming

Transcript

  1. SchemeのS式正規表現は良いぞ
    (本当はClojureに移植した話をするつもりだった)
    Niyarin

    View Slide

  2. SREとは
    ・正規表現をS式で表現したもの
    [ABC]+[0-9]{0,3}.?
    `(: (+ ,char-set:ABC)
    (repeated 0 3 num)
    (? any))
    1

    View Slide

  3. ・SRFI115 あるいは R7RS large (scheme regex)
    Sagittarius Scheme、Chibi Schemeとか
    ・Guileのirregex
    文法はSREとだいたい同じ
    SREの仕様
    2

    View Slide

  4. ・たとえば、1文字以上の繰り返しは、+だけでなく、
    one-or-moreという表現ができる
    --> 不慣れでも読みやすい正規表現が書ける
    SREの紹介(1)シンボルが使えるメリット1
    (+ “abc”)
    (one-or-more “abc”)
    3

    View Slide

  5. ・文字列とシンボルの2つあるのはいいことだ
    ・無制限に名前付けができる
    SREの紹介(2)シンボルが使えるメリット2
    任意の一文字: any
    アルファベット:alphabetic
    16進数文字:hex-digit
    単語:word
    4

    View Slide

  6. ・部分的にSchemeコードを挿入して評価で展開できる
    SREの紹介(3)quasi-quote
    `(one-or-more
    “abc”
    ,something
    “def”)
    5

    View Slide

  7. ・SRFI44(scheme set char) 文字の集合データ構造
    ・[ ] ⇐よりも自由に文字の集合を使える
    SREの紹介(4)データ構造の挿入ができる
    (char-set #\a #\b #\c) ;a,b,cの文字の集合
    (char-set-filter
    (lambda (c ) (not (char=? c #\z)))
    char-set:letter) ;z以外のレターの集合
    6

    View Slide

  8. ・のんびりしていたから
    ・当初SRE->Clojure(Java)正規表現をやるつもりだった
    マッチングは実装しなくてよいしすぐ終わると思っていた..
    X SREの表現力の幅のほうが大きかった
    Clojureへの移植が遅れた言い訳
    無理ではないけど、表現を落とす実装コストがかかる
    7

    View Slide

  9. ・S式なのでパーサ実装コストは省ける
    ・マッチングはNFA/DFA、VM 、微分型とかで実装できる
    “正規表現技術入門 ――最新エンジン実装と理論的背景”
    という本が良い
    → CLに移植しませんか?
    それでも実装は楽
    8

    View Slide

  10. ・S式で表現するとのはよいこと
    ・実装遅れたのはSREが良すぎたせい
    ・暇な人は実装しよう
    まとめ

    View Slide

  11. ・S式にするとよいものは他になにがあるのか?
    SXML(S式XML文法)
    おわり
    (tag (@ (attr1 "value1")
    (attr2 "value2"))
    (nested "Text node")
    (empty))
    DBクエリとか?
    SXQL

    View Slide