用例:我正在为类似正则表达式但功能更强大的 Lispy 字符串处理系统编写域特定语言 (DSL),该系统专注于条件替换(例如为语言学家/语言学家模拟语言进化),而不是像正则表达式那样匹配。像往常一样,我在真正写下代码之前写下了规格。
然而,由于一个有点愚蠢但难以修复的错误,我最终得到了一个只能一次处理一个字符的系统。因此,重写规则可能是(在伪代码中)change 'a' to 'e' when last char is 's' and next char is 'd'
。字符也可以删除:delete 'a' when ...
.
由于 DSL 的解释器有点像意大利面(不是非结构化的意义上,而是从某种意义上说 1. 我还没有为我的实现 lang Chicken Scheme 找到 OO 2. 没有 IDE,所以必须记住 20+变量名并使用 emacs)我不想碰它,而是将“无糖”字符串替换为条件字符替换。
简单的例子:change "ab" to "cd" unconditionally
重写为change 'a' to 'c' when followed by 'b'; change 'b' to 'd' when preceded by a
. 但是,当有条件时,事情很快就会变得非常丑陋。是否有一些简单的递归方法来进行重写,或者这在重写阶段几乎是不可能的,我应该修复我的 DSL 解释器?(注意:我的 DSL 有办法获取当前字符前后的第 n 个字母)