压缩转义符到只剩一个反斜线

Perl语言中,有这样的句子:
"hello $name"
Python语言中,相似的功能要这么写:
f"hello {name}"
公共命名空间是一个给程序员讨论的空间,在这里程序员可以畅所欲言。例如,程序员A就发现,应该让字符串中的转义字符尽可能少,只剩一个反斜线即可。所以,有这样的句子:
"hello \name"
熟悉C语言的程序员B,和Java语言程序员C立即发现,这么写不对。程序员A解释说:\n是换行,这种解释方式可以改进。在反斜线后边进行词法分析,解析出一个单词符号,在这个例子中是name。
有些时候,变量名后边紧跟着其他内容,导致词法分析出错。
"hello \nameboy"
Perl语言的解决方案是:
"hello ${name}boy"
程序员A的解决方案是:
"hello \(name)boy"
程序员D发现,存在如下句子:
"n=\n"
变量名从name变成了n,再加上反斜线后就和换行符一样了。这是因为转义符要求尽可能少,以至于只剩下一个反斜线,这时,应该添加一个符号。
程序员E建议用Excel格式,在变量名前边加一个等于号,成为这个样子:
"n=\=n"
程序员A同意这种写法,并补充:这是省略了小括号的写法。完整的描述应该是:
"hello \(=name)"
反斜线加小括号,小括号里是一门微型语言。这可以扩充C语言转义符,从\n\(new line),语义更明确了,还能表达更多内容。
"hello \(=name.upper())"
有的时候,能够正确解析出变量名,就可以省略小括号;
有的时候,变量名可以和换行符、制表符等区分开来,就可以省略等于号。
所以就有了上文的:
"hello \name"
程序员A说:TeX中就是这么写的。
总有一天,我们需要向学生展示\(...)的写法,这需要显示反斜线本身,和后边括号里的内容。只需这么写:\\(...)
仔细讨论一下小括号内部的情况。小括号可以嵌套,例如上文中upper的例子。可以包含另一个字符串,这是从Excel公式中得到的启发。
程序员A说:正则表达式里定义了12个转义符,能否压缩成一个?理论上可以,因为反斜线加小括号里是一门微型语言,可以表达这12个,甚至更多意思。只不过击键次数会略有上升,正则表达式变得比以前更长了。
至此,关于转义字符的讨论就告一段落了。公共命名空间允许程序员进行讨论,再由语言的制作者来实现。在实现的过程中,会用到新编译原理。例如,引入了新的转义字符的字符串,就不可能用一个正则表达式来描述,词法分析要创新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值