参考までに、ここに私のコードがあります:http://hpaste.org/86949
次の式を解析しようとしています: if (a[1].b[2].c.d[999].e[1+1].f > 3) { }
. 再生中のメソッドvarExpr
は、変数メンバー チェーンを解析する です。
環境
私が解析している言語では、ドットはメンバー変数へのアクセスを指定できます。メンバー変数は別のオブジェクトになる可能性があるため、チェーンを生成できa.b.c
ます(a.b).c
。ドットが関数構成であると想定しないでください。
実装
ロジックは次のようになります。
最初に、
before <- many vocc
すべてのインスタンスvarname .
とそれらのオプションの配列式を収集し、単一の識別子のみを残しますthis <- vtrm
残りの識別子と配列式を収集します -- ドットで始まらない唯一の識別子
問題
私は2つの問題を抱えています:
まず、最初の用語 [私には判断できない理由で] は、パーサーがそれを受け入れるために常に角かっこで囲む必要があるようです。つまり、(a[1]).b[2].c...
次の用語ではこれは必要ありません。
次に、many vocc
解析が停止しません。常に別の識別子と別のドットが必要であり、最後の をキャッチするために式を終了できませんvtrm
。
問題や頭痛の解決に役立つヒントや解決策を探しています。ありがとう。