字符串层面:add(35, 2)写成+352不行,得+35空格2, +35 2. 3+5空格*2=8*2=16; 3+空格5*2=3+10=13. 3+5 *2, 3 +5*2,机器无所谓,人主子受不了“喵了个去,这有个空格?!”
token流层面:+ opnd * opnd opnd和opnd + opnd * opnd相比,确实不需要规定+和*的优先级或用()来消除歧义。
再底层:
struct op { opr; opnd1; opnd2; }和struct op { opnd1; opr; opnd2; }又没啥区别了。
消除if-else的歧义也可以:
if (x > 1) if (x > 2) y = 0; else ; else y = 1;
我们一开始说的空格和上面的;性质类似吧?3+空格5*2 add(3, 空格),空格待会换成mul(5, 2). add(3, mul(5, 2))好吗?贼费括号。
请注意标题的...啥高档的 ?,?前面有个空格。语调tone和长短也能改变语义。
浙公网安备 33010602011771号