-
TRRE: 変換正規表現
-
要約
- テキスト編集や
grep に似たコマンドラインツール向けの正規表現の拡張。
- プロトタイプなので、実運用では使用しないこと。
-
紹介
- 正規表現は、テキスト内のパターンを検索するのに便利なツール。
- テキスト編集には不自然だと感じられるため、拡張を提案する。
- 変換正規表現、または
trre と呼ぶ。
: 記号を使って変換を定義する。
a:b は a を b に置き換える最も単純な形式。
trre というコマンドラインツールを作成し、この概念を実演している。
-
例
-
基本
cat を dog に変更:
$ echo 'cat' | trre 'c:da:ot:g'
dog
sed のように、文字列内のすべての一致を置換:
$ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
Mary had a little cat.
- 削除:
$ echo 'xor' | trre '(x:)or'
or
- 挿入:
$ echo 'or' | trre '(:x)or'
xor
-
変換による正規表現
-
範囲変換
-
ジェネレーター
-
言語仕様
trre は パターンマッチング:パターン生成 の組として定義される。
パターンマッチング は文字列または正規表現になれる。
パターン生成 は通常は文字列だが、regex にすることもできる。
-
なぜ動くのか
trre は 有限状態変換器 (FST) という特別なオートマトンを構築する。
- FST は入力と出力の組を処理する。
-
設計上の選択と未解決の問い
: の結合性、優先順位、暗黙のイプシロンなど、さまざまな決定が必要。
-
モードと貪欲性
trre は 2 つのモードをサポートする:
- スキャンモード (デフォルト): 変換を順番に適用する。
- マッチモード: 式に対して文字列全体を検証する。
-
決定化
- 非決定性オートマトンを決定性オートマトンに変換する過程が重要。
-
性能
- NFT (非決定的) 版は
sed よりわずかに遅い。
- 複雑な作業では、
trre_dft (決定版) が sed より高性能になる可能性がある。
-
TODO
- ERE 機能セットの完成、完全な Unicode サポート、効率的な範囲処理など。
-
参考文献
- Russ Cox の記事と Cyril Allauzen、Mehryar Mohri の論文から着想を得ている。
1件のコメント
Hacker Newsのコメント
いいね、このプロジェクトの発展に期待
cat:dogが(cat):(dog)よりもca(t:d)ogと解釈されるのは奇妙XFST (Xerox Finite-State Transducer) を推薦
標準的な正規表現の代替として Rosie Pattern Language を推薦
1997年に有限状態変換器に関する論文を書いた経験を共有
:がabより強く結合するように設定するのが正しいのかと質問構造的置換を行うには十分ではないと感じる
正規表現がテキスト編集には不自然だという主張に疑問を持つ
Cコードがとてもきれいだと称賛
theory.pdfリンクが壊れており、修正が必要*や+を使うなという助言に疑問を持つ最初の例がおかしいと感じる
echo 'cat' | trre 'c:da:ot:g'の結果が奇妙例が本当にプログラムの出力なのか疑問
echo 'cat dog' | trre 'c:bat|d:hog'の結果がおかしい