HackThisSite - ExtBasic Mission 03
Challenge
playit 型关卡,题面给出一段用作者自造语言写的 5 行程序,要求给出它的输出:
1 | BEGIN notr.eal |
Solution
BEGIN notr.eal只是程序头,notr.eal读作not real,这门语言本身是虚构的,没有任何公开语法可查。CREATE、DESTROY、ANS、TO在这个语言里都只是普通标识符,是一组自指单词;它们的字面含义(创建 / 销毁 / 答案 / 到)是纯粹的误导。真正起作用的语法骨架只有三点:
<标识符> <类型> AS <表达式>做声明赋值、+做整数加法、out做输出。AS是赋值分隔符,int/var只是类型标注,不参与数值。CREATE int AS 2:把2绑定到标识符CREATE。DESTROY int AS 0:把0绑定到标识符DESTROY。ANS var AS Create + TO:计算Create + TO。标识符归一化后Create就是第 2 行的CREATE(值为 2),TO从未被赋值、按未绑定标识符计 0,所以ANS = 2 + 0 = 2。out TO:out是输出语句,行尾的TO指出输出通道而不是变量,打印当前答案。
把上面的规则写成一个最小解释器,复现整条数值流:
1 | import re |
运行输出
1 | CREATE int AS 2 => 2 |