Фон
Аліса та Боб створюють мову для гри в гольф, щоб виграти кожен виклик PPCG. Аліса хоче створити двовимірну мову, як> <>, але Боб віддає перевагу синтаксису префікса-інфікса, як у J. Як компроміс, вони вирішують створити двовимірну мову-інфіксацію префікса. Парсер - це біль писати, і їм потрібна ваша допомога!
Специфікація синтаксису
У мові Аліси та Боба є змінні , які представлені малими літерами 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
. Вираз, проаналізований у верхньому лівому куті, є результатом процесу розбору.
Вхід і вихід
Ваш вхід - це порожній прямокутний масив символів. Це завжди буде дійсною програмою мовою Аліси та Боба, але вона може містити вирази, які не використовуються у висновку. Вашим результатом має бути проаналізований вираз, отриманий в результаті вищевказаного процесу.
Правила та оцінка
Ви можете написати повну програму функції. Виграє найменший кількість байтів, а стандартні лазівки заборонені.
Тестові справи
Вони наведені у форматі 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)))
підходить результат, як-от, чи форма фіксована?