用法案例:我正在为类似正则表达式编写领域特定语言(DSL),但是更强大的Lispy字符串处理系统专注于条件替换(如模拟语言演变,用于哄骗/语言学家)而不是匹配作为正则表达式做。像往常一样,我在写下代码之前写下了规范。
然而,由于一个有点愚蠢但很难修复的错误,我最终得到的系统一次只能做一个char。因此,重写规则可能是(伪代码)change 'a' to 'e' when last char is 's' and next char is 'd'
。字符也可以删除:delete 'a' when ...
。
由于DSL的解释器有点意大利面(不是非结构化的意义上,但在某种意义上说,1。我没有想出OO用于我的实现lang Chicken Scheme 2.没有IDE,所以必须记住20多个变量名并使用emacs)我不想触摸它,而是将“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个字母)