ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

ズンドコしたい

ストリーム上の 0 と 1 の並びを sed に取り込んで、00001 かどうかを DFA っぽく検査する。

$ cat /dev/urandom \
 | LANG=C tr -dc "01" \
 | fold -w1 \
 | (sed -nf dfa.sed; echo 2) \
 | perl -ple 'BEGIN { @table = qw/ズン ドコ キ・ヨ・シ!/; } s/(.)/$table[$1]/e;' \
 | paste -sd$'\\0' -
ズンズンドコドコズンドコズンドコドコドコドコズンズンズンズンドコキ・ヨ・シ!

肝心の dfa.sed は下記の通り。 状態をラベルとして表現している。

s1 から始まって、s5 が「ドコ」を判定する状態。「ドコ」であったら、その後 quit に遷移して受理状態となる。

#!/usr/bin/env sed

:s1
          /0/ bs2
          b restart
:s2
          p; n
          /0/ bs3
          b restart
:s3
          p; n
          /0/ bs4
          b restart
:s4
          p; n
          /0/ bs5
          b restart
:s5
          p; n
          /1/ bquit
          bs5
:quit
          p; q
:restart
          p; n
          bs1

MySQL のコメント構文に対応する

MySQL--/* */ だけじゃなくて # スタイルのコメントもサポートしている。 Emacssql-mode だと # スタイルはサポートしていないので、構文テーブルをどうにかする必要がある。

(add-hook 'sql-mode-hook 'mysql-comment-syntax)

(defun mysql-comment-syntax ()
  (setq-local syntax-propertize-function 'mysql-comment-propertize-function))

(defun mysql-comment-propertize-function (begin end)
  (funcall
    (syntax-propertize-rules
      ("\\(#\\).*\\(\n\\)" (1 "<") (2 ">"))) ;; from "#" to newline
    begin
    end))

追記 たぶんこっちのほうがいいと思う。データベースごとの設定が標準で用意されていた。 .dir-locals.el に書いておけばプロジェクトごとの設定にも対応できそうである。

(sql-set-product 'mysql)