Hintergrund
Alice und Bob erschaffen eine Golfsprache, um jede einzelne PPCG-Herausforderung zu gewinnen. Alice möchte eine zweidimensionale Sprache wie> <> erstellen, aber Bob bevorzugt eine Präfix-Infix-Syntax wie in J. Als Kompromiss entscheiden sie sich, eine zweidimensionale Präfix-Infix-Sprache zu erstellen. Der Parser ist eine Qual zum Schreiben, und sie brauchen Ihre Hilfe!
Syntaxspezifikation
In der Sprache von Alice und Bob gibt es Variablen , die durch ASCII-Kleinbuchstaben dargestellt werden a-z
, und Funktionen , die durch ASCII-Großbuchstaben dargestellt werden A-Z
. Eine Funktion kann mit einem oder zwei Argumenten aufgerufen werden. Ein Programm ist ein rechteckiges Gitter aus Buchstaben a-zA-Z
und Leerzeichen. Die linke obere Ecke darf kein Leerzeichen enthalten. Dies ist ein Beispiel für ein gültiges Programm:
F Gy
H
R x
Wenn das Programm analysiert wird, wird es in einen Ausdruck einer C-artigen Sprache (C, Java, Python ...) umgewandelt, die Variablen mit einem Buchstaben und Funktionsaufrufe im Format <func>(<arg>)
oder enthält <func>(<arg1>,<arg2>)
. Das obige Programm führt zum Beispiel zu folgendem Ausdruck:
F(H(R(x)),G(x,y))
Die Details des Analyseprozesses lauten wie folgt:
- Die Leerzeichen sind nur Füllzeichen, daher werden sie nicht analysiert.
- Jede Variable
a-z
wird immer als sich selbst analysiert. - Jede Funktion
A-Z
wird als Funktionsaufruf analysiert. Seine Argumente sind die engsten Ausdrücke darunter und rechts davon im Raster, in dieser Reihenfolge. Wenn nur eines davon vorhanden ist, wird es als einziges Argument angegeben. Sie können davon ausgehen, dass alle Funktionen mindestens ein Argument im Raster haben.
Im obigen Beispiel werden die Variablen x
und y
als sich selbst analysiert. Die Funktion R
hat nichts unter sich und x
rechts davon, daher wird sie als Aufruf mit einem Argument analysiert R(x)
. Ebenso H
wird analysiert, wie H(R(x))
, da es R
darunter hat. Die Funktion G
befindet sich rechts x
darunter und wird y
analysiert als G(x,y)
und in ähnlicher Weise für F
. Der in der oberen linken Ecke analysierte Ausdruck ist das Ergebnis des Analyseprozesses.
Ein- und Ausgabe
Ihre Eingabe ist ein nicht leeres rechteckiges Zeichenfeld. Es ist immer ein gültiges Programm in der Sprache von Alice und Bob, es kann jedoch Ausdrücke enthalten, die in der Ausgabe nicht verwendet werden. Ihre Ausgabe soll der analysierte Ausdruck sein, der sich aus dem obigen Prozess ergibt.
Regeln und Wertung
Sie können ein vollständiges Programm einer Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
Diese werden im Format grid <newline> expression
mit Bindestrichen ---
zwischen den Fällen angegeben. Das SE-Format lässt einige Zeilen leer, sie sollten jedoch mit Leerzeichen gefüllt sein.
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)))
passend oder ist das Format festgelegt?