使用例: 正規表現のようなマッチングではなく、条件付き置換 (コンランジャー/言語学者の言語進化のシミュレーションなど) に焦点を当てた、正規表現に似ているがより強力な Lispy 文字列処理システム用のドメイン固有言語 (DSL) を作成しています。いつものように、実際にコードを書き留める前に仕様を書き留めました。
しかし、ややばかげているが修正が難しい間違いのために、一度に 1 文字しか処理できないシステムになってしまいました。したがって、書き換えルールは (疑似コードで) になる可能性がありますchange 'a' to 'e' when last char is 's' and next char is 'd'
。文字も削除できます: delete 'a' when ...
.
DSL のインタープリターは少しスパゲッティっぽいので (構造化されていないという意味ではなく、1. 実装用の OO がわかりませんでした。Chicken Scheme 2. IDE がないため、覚えておく必要があります 20+変数名を変更し、emacs を使用します) 私はそれに触れたくありませんが、条件付きの char 置換への "unsugar" 文字列置換を行います。
些細な例:change "ab" to "cd" unconditionally
に書き換えchange 'a' to 'c' when followed by 'b'; change 'b' to 'd' when preceded by a
ます。ただし、条件がある場合、物事は非常に急速に非常に醜くなります。書き換えを行うための簡単な再帰的な方法はありますか、それとも書き換えフェーズではこれはほぼ不可能であり、おそらく DSL インタープリターを修正する必要がありますか? (注: 私の DSL には、現在の文字の前後に n 番目の文字を取得する方法があります)