私はしばらくの間立ち往生していて、できるだけ助けていただきたいと思います。 ANTLRテキスト属性のNullPointerException
私はANTLR ツリー内のいくつかのルールがあり文法:私は、私は彼らが私のソースの冒頭で宣言されているように私のすべての変数を挿入するJavaクラスVarTableを書かれているblock
: compoundstatement
| ^(VAR declarations) compoundstatement
;
declarations
: (^(t=type idlist))+
;
idlist
: IDENTIFIER+
;
type
: REAL
| i=INTEGER
;
ファイル。テーブルには、変数タイプ(つまり、実数または整数)も保持されます。この変数テーブルを使って、宣言されていない変数や宣言の重複をチェックすることもできます。
基本的に、変数型を '宣言'ルールから 'idlist'ルールidlistルール内のすべての識別子をループして、それらを変数テーブルに1つずつ追加します。
私が得ている大きな問題は、 '宣言'ルールの$ t変数(これは型を参照するもの)が 'text'属性にアクセスしようとするとNullPointerExceptionが発生することです。
また、 'type'ルールで$ i変数の 'text'属性にアクセスしようとしても、問題はありません。
NullPointerExceptionが生成されているJavaファイル内の場所を調べましたが、それでも私には意味がありません。それはルールが
(^(typeidlist))+
があるので、複数の種類があるかもしれないという事実と問題
です??
idlistルールに到達したときに同じ問題が発生します。見つかったすべてのIDENTIFIERトークンをループするアクションをどのように書くことができるかわからないためです。
ヘルプやコメントに感謝します。
乾杯
これは木文法であり、パーサー文法ではありません。正しい? –
そうです。それは木文法です。あいまいさを残して申し訳ありません。 – Joe
問題ありませんジョー、私は思ったほどですが、答える前に確かめたいと思っていました。 –