5
2次元構文を解析する
バックグラウンド アリスとボブは、すべてのPPCGチャレンジに勝つためにゴルフ言語を作成しています。アリスは> <>のような2次元言語を作成したいと考えていますが、ボブはJのようなプレフィックスとインフィックスの構文を好みます。妥協として、2次元のプレフィックスとインフィックスの言語を作成することにしました。パーサーは書くのが面倒で、あなたの助けが必要です! 構文仕様 アリスとボブの言語には、小文字のASCII文字で表される変数と、大文字のASCII文字で表される関数があります。関数は、1つまたは2つの引数で呼び出すことができます。プログラムは、文字の矩形グリッドで、スペース、および左上隅には、スペースを含めることはできません。これは有効なプログラムの例です:a-zA-Za-zA-Z F Gy H R x プログラムが解析されると、1文字の変数と形式<func>(<arg>)またはの関数呼び出しを含むCスタイル言語(C、Java、Python ...)の式に変換されます<func>(<arg1>,<arg2>)。たとえば、上記のプログラムは次の式になります。 F(H(R(x)),G(x,y)) 解析プロセスの詳細は次のとおりです。 スペースは単なるフィラーであるため、解析されません。 すべての変数a-zは常にそれ自体として解析されます。 すべての関数A-Zは、関数呼び出しとして解析されます。その引数は、グリッドの下でこの順序で右にある最も近い式です。これらのいずれかのみが存在する場合は、それが唯一の引数として与えられます。すべての関数には、グリッドに少なくとも1つの引数があると仮定できます。 上記の例では、変数xとyはそれ自体として解析されます。この関数Rはx、その下とその右に何もないので、1引数呼び出しとして解析されますR(x)。同様に、の下にあるため、Hとして解析されます。関数はその下と右にあるため、として解析され、同様にのために解析されます。左上隅で解析される式は、解析プロセスの結果です。H(R(x))RGxyG(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 …