最終的に、SQL の小さなサブセット用のパーサーを作成しました。文法には多くの通常のトークン (SELECT、CREATE など) と、いくつかの一般的なトークン (例: S_GEN_IDENTIFIER の match [A-Z_.\d]|\"(~[\n, \r, \"])*\")
.
問題は、「SELECT col AS type ...」が解析されないことです。これは、<S_GEN_IDENTIFIER>
「type」の代わりに列エイリアスが として一致するため<T_TYPE>
です。
トークンを同じ名前のルールに置き換えて、対象のトークンがトークンの範囲内にあることを確認するというアイデアがありました ( [<T_AS> - <T_KEEP_DUPLICATES>]
.新しいルール内のすべてのトークンをコピーして貼り付けることができますが、明らかな理由でそれを行いたくありません。
トークンが事前定義されたトークンの範囲内にあるかどうかを確認する方法はありますか?