问题提出
首先声明!我是个计算机小白。
最近打算自己做个简易的C++-Py翻译器。
问题来了。现在有一段布尔运算式,其中,!为非,!=为不等。现在需要把“!”转换为“not”,而“!=”不要转换,不然Python语法就不对了。怎么实现呢?
化学知识的灵感
在有机化学的化学合成中,有一种做法叫“官能团的保护”。说得通俗一点,就是在合成的过程中,先将某个容易被变化(但是我们不想让它变化)的部分先反应掉,在一系列反应之后再通过反应把它转化回来。(参考:《普通高中教科书 人教版 化学 选修3 有机化学基础》)
用符号表示:R-F→R-F'→……→R'-F'→R'-F。(R、R'表示某基团,F、F'表示官能团)
在这个问题中,“!”就是R,“!=”就是F。在这个思维方法的引领下,我们需要把F变成不会被“反应掉”的F',然后对“!”进行修改。
解决
s = s.replace("!=", "$$$") #F -> F'
s = s.replace("!", " not ") #R -> R'
s = s.replace("$$$", "!=") #F' -> F
其中,“$$$”可以是任何一个特殊的字符串。
于是,问题解决。