HackThisSite - ExtBasic Mission 03
Challenge
playit 型关卡,题面给出一段用作者自造语言写的 5 行程序,要求给出它的输出:
1 | BEGIN notr.eal |
Solution
BEGIN notr.eal只是程序头,notr.eal读作not real,这门语言本身是虚构的,没有任何公开语法可查。CREATE、DESTROY、ANS、TO在这个语言里都只是普通标识符,是一组自指单词;它们的字面含义(创建 / 销毁 / 答案 / 到)是纯粹的误导。以下是一种用于解释该短程序的假设,不是官方语言规范;未绑定标识符默认零、大小写归一化及
out 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,所以 \(\mathrm{ANS} = 2 + 0 = 2\)。out TO:out是输出语句,行尾的TO指出输出通道而不是变量,打印当前答案。
下面的最小解释器演示上述解释下的数值流,不是该语言的官方解释器,也不能单独证明平台语义:
1 | import re |
运行输出
1 | CREATE int AS 2 => 2 |