背景
爱丽丝(Alice)和鲍勃(Bob)正在创造一种高尔夫语言,以赢得每一个PPCG挑战。爱丽丝想制作一种二维语言(如> <>),但鲍勃(Bob)更喜欢像J中那样的前缀-前缀语法。作为一种折衷,他们决定创建一种二维前缀-前缀语言。解析器很难编写,他们需要您的帮助!
语法规范
在Alice和Bob的语言中,有变量(由小写ASCII字母表示a-z
)和函数(由大写ASCII字母表示)A-Z
。可以使用一个或两个参数来调用一个函数。一个方案是字母矩形网格a-zA-Z
和空间,以及左上角不能包含空格。这是一个有效程序的示例:
F Gy
H
R x
解析程序后,它将转换为C风格语言(C,Java,Python ...)的表达式,其中包含单字母变量和函数调用,格式为<func>(<arg>)
或<func>(<arg1>,<arg2>)
。例如,上面的程序产生以下表达式:
F(H(R(x)),G(x,y))
解析过程的详细信息如下:
- 这些空格只是填充符,因此不会被解析。
- 每个变量
a-z
始终被解析为自身。 - 每个函数都
A-Z
被解析为一个函数调用。它的参数是它下面和右边在网格中最接近的表达式(按此顺序)。如果仅存在其中之一,则将其作为唯一参数。您可以假设所有函数在网格中至少有一个参数。
在上面的示例中,变量x
和y
被解析为自身。该函数在其R
下方和x
右侧没有任何内容,因此将其解析为单参数调用R(x)
。同样,由于位于下方,因此H
被解析为。该功能具有以下,并在其右侧,所以它解析为,和类似的。左上角解析的表达式是解析过程的结果。H(R(x))
R
G
x
y
G(x,y)
F
输入输出
您的输入是一个非空的矩形字符数组。它始终是Alice和Bob语言的有效程序,但是它可能包含未在输出中使用的表达式。您的输出应为上述过程产生的解析表达式。
规则和计分
您可以编写功能的完整程序。最低字节数获胜,并且不允许出现标准漏洞。
测试用例
这些以格式提供grid <newline> expression
,大小写---
之间带有连字符。SE格式将某些行留空,但应使用空格填充。
x
x
---
x y
z
x
---
Fx
F(x)
---
Fx
y
F(y,x)
---
ABu
A(B(u))
---
G
H
k
G(H(k))
---
ABCA
x xs
DFk
A(x,B(D(F(k)),C(x,A(s))))
---
A B
C D x
A(C(D(x)),B(D(x)))
---
RT Hq
I xR k
R(I(x),T(H(R(k),q)))
---
A A A a
S A b
B C Dx
d X u f
A(B(d,C(D(f,x))),A(X(u),A(u,a)))
(A (B (D x)) (C (D x)))
是否合适或格式是否固定?