ラムダ計算を解析するために、LL1 パーサー ジェネレーターであるTinyPGを使用しています。(a b)
関数の適用などを解析するルールを書こうとしてい(a b c)
ます。
これまでのところ、次のルールがあります (少し単純化されています)。
APPLICATION -> LPARENTHESES VARIABLE (SPACE+ VARIABLE)+ RPARENTHESES;
しかし、それは、左括弧の後と右括弧の前にスペースがある用語を解析できません: ( a b )
. 次のように、開始ブラケットの後にスペースを許可できます。
APPLICATION -> LPARENTHESES SPACE* VARIABLE (SPACE+ VARIABLE)+ RPARENTHESES;
しかし、閉じ括弧の前にスペースを許可するように設定するのに問題があります。私はこれを思いついたが、うまくいくようだ:
ARG_LIST -> (RPARENTHESES | (SPACE+ (RPARENTHESES | (VARIABLE ARG_LIST))));
APPLICATION -> LPARENTHESES SPACE* VARIABLE ARG_LIST;
しかし、面倒で再帰的であるため、ノードの読み取りとコンパイルが難しくなります。これを解析するための非再帰的または少なくともより簡単な方法はありますか?