#P3201. Little Quilt
Little Quilt
描述
小被子(Little Quilt)是由Ravi Sethi在其著作《编程语言》中提出的一种小型语言。这里介绍的是其受限版本。
该语言由以下BNF语法定义:
<QUILT> ::= A | B | turn(<QUILT>) | sew(<QUILT>,<QUILT>)
A和B代表两种原始被子。每种原始被子对应一个的字符矩阵排列。turn()和sew()是对被子的操作。
指令turn(x)将被子x顺时针旋转90度。下表展示了原始被子及turn()操作的效果示例:
相应地,指令将被子缝在被子的左侧。和必须具有相同的高度,否则会生成错误。下图展示了的结果:
//||
/+||
而会生成错误信息。
你的任务是构建一个小被子语言的解释器。
输入
输入文件是一个文本文件,包含多个小被子表达式,每个表达式以分号(;)结尾。空格和换行符必须被忽略;这意味着一个表达式可以跨越多行。
输出
输出文件包含解释输入表达式后生成的被子。
每个被子前必须有一行左对齐的格式:
Quilt i:
其中是被子的编号,从开始。如果表达式解释过程中生成错误,则必须打印:
输入数据 1
sew(turn(sew(B,turn(B))),
turn(sew(turn(B),B))) ;
sew(turn(sew(B,turn(B))),A);
sew(turn(sew(A,turn(A))),
turn(turn(
turn(sew(A,turn(A))))))
;
输出数据 1
Quilt 1:
||--
||--
--||
--||
Quilt 2:
error
Quilt 3:
\\//
+\/+
+/\+
//\\
来源
哥伦比亚2006