Contexte
Alice et Bob créent un langage de golf pour gagner chaque défi PPCG. Alice veut faire un langage bidimensionnel, comme> <>, mais Bob préfère une syntaxe préfixe-infixe comme dans J. Comme compromis, ils décident de créer un langage préfixe-infixé bidimensionnel. L'analyseur est une douleur à écrire, et ils ont besoin de votre aide!
Spécification de syntaxe
Dans le langage d'Alice et de Bob, il existe des variables , qui sont représentées par des lettres ASCII minuscules a-z
, et des fonctions , qui sont représentées par des lettres ASCII majuscules A-Z
. Une fonction peut être invoquée avec un ou deux arguments. Un programme est une grille rectangulaire de lettres a-zA-Z
et d'espaces, et le coin supérieur gauche ne doit pas contenir d'espace. Voici un exemple de programme valide:
F Gy
H
R x
Lorsque le programme est analysé, il est transformé en une expression d'un langage de style C (C, Java, Python ...) contenant des variables à une lettre et des appels de fonction au format <func>(<arg>)
ou <func>(<arg1>,<arg2>)
. Par exemple, le programme ci-dessus donne cette expression:
F(H(R(x)),G(x,y))
Les détails du processus d'analyse sont les suivants:
- Les espaces sont juste remplis, donc ils ne sont pas analysés.
- Chaque variable
a-z
est toujours analysée comme elle-même. - Chaque fonction
A-Z
est analysée comme un appel de fonction. Ses arguments sont les expressions les plus proches en dessous et à sa droite dans la grille, dans cet ordre. Si un seul d'entre eux est présent, il est donné comme seul argument. Vous pouvez supposer que toutes les fonctions ont au moins un argument dans la grille.
Dans l'exemple ci-dessus, les variables x
et y
sont analysées comme elles-mêmes. La fonction R
n'a rien en dessous et x
à sa droite, elle est donc analysée comme l'invocation à un argument R(x)
. De même, H
est analysé comme H(R(x))
, car il a en R
dessous. La fonction G
a en x
dessous et y
à droite, donc elle est analysée comme G(x,y)
, et de même pour F
. L'expression analysée dans le coin supérieur gauche est le résultat du processus d'analyse.
Entrée et sortie
Votre entrée est un tableau rectangulaire de caractères non vide. Ce sera toujours un programme valide dans le langage d'Alice et de Bob, mais il peut contenir des expressions qui ne sont pas utilisées dans la sortie. Votre sortie doit être l'expression analysée résultant du processus ci-dessus.
Règles et notation
Vous pouvez écrire un programme complet d'une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
Ceux-ci sont donnés dans le format grid <newline> expression
, avec des tirets ---
entre les cas. Le format SE laisse certaines lignes vides, mais elles doivent être remplies d'espaces.
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)))
elle convenir ou le format est-il fixe?