プロジェクトのクラス名がわかっているなど、いくつかの既知の識別子名を文法に埋め込みたいのですが、どの識別子が実際にクラス名トークンに属する既知のキーワードであるかをレクサーに伝えたいと考えています。しかし、クラス名の長いリスト (何百もの名前) があるため、ルール内のすべての既知のクラス名キーワードをリストしてクラス名レクサー ルールを作成したくありません。これにより、文法ファイルが大きくなりすぎます。
キーワードを別のファイルに入れることはできますか? 私が考えている 1 つの可能性は、生成されたレクサー クラスによってサブクラス化される Java クラスにキーワードを配置することです。その場合、レクサーのセマンティック述語は、カスタム レクサー スーパークラスのメソッドを呼び出すだけで、入力トークンが名前の長いリストと一致するかどうかを確認できます。私の長いリストは、そのスーパークラスの src コード内に配置できます。
ただし、ANTLR4の本では、組み合わせた文法の文法オプション「superClass」はパーサーのスーパークラスのみを設定すると述べています。複合文法を使用したい場合、レクサーのスーパークラスを設定するにはどうすればよいですか。または、キーワードの長いリストを別の「キーワード ファイル」に入れるための他のより良い方法はありますか。