0

Terence Parr自身がantlr3について次のように述べています。「残念ながら、従来のlexのようなアプローチよりも、ANTLRを使用してトークナイザーを構築することは依然として難しいようです」。pygmentsには、考えられるほとんどすべての言語のレクサーがありますが、http://pygments.org/languages/

誰かがantlrpythonターゲットでpygmentsレクサーを使用しようとしましたか?antlr2には、cppターゲットでflexを使用する例がありましたが、残念ながら、antlr3にはそのような例はありません。
antlrパーサーがインポートできるgrammarname.tokensファイルを手書きで書くことはできますか?antlrレクサーを使用すると、匿名トークンがたくさんありますが、それらを削除できますか?あるいは、トークンのantlr.tokensファイルを受け入れるようにpygmentsを変更することもできます。pygmentsトークンストリームは、antlrトークンストリームインターフェイスを実装する必要があります。

4

2 に答える 2

1

Naveen さんが書きました:

誰かが antlr python ターゲットで pygments lexer を使用しようとしましたか?

疑わしい。少なくとも、ここ SO や ANTLR メーリング リスト (かなり長い間監視しています) でこれについて言及している人を見たことがありません。

Naveen さんが書きました:

antlr パーサーがインポートできる grammarname.tokens ファイルを手書きすることはできますか?

いいえ。パーサーはLexer、(Python) ランタイムに存在するオブジェクトのインスタンスを想定しています。ファイルを手動で編集する.tokensことは想定されていません。

Naveen さんが書きました:

Antlr lexer を使用すると、匿名のトークンがたくさんあります。それらを削除することはできますか?

あなたが何を意味するのかよくわかりませんが、生成されたコードを削除することは私には悪い考えのようです. 前に述べたように、ファイルを参照している場合.tokens: 手動で編集することは想定されていません。

外部のレクサー文法や完全なレクサーを ANTLR に「接着」しようとすることは本当に気にしません。これにより、ANTLR lexer 文法を自分で記述するよりも、実装に多くの時間を費やすことができると確信しています。結局のところ、レクサー規則を定義することは、ほとんどの場合、言語の最も簡単な部分です。

于 2011-09-05T07:53:49.363 に答える
0

この他の q/a は非常に役に立ちました:手動レクサーを備えた ANTLR パーサーは 、stax および jflex スニペットも読みます: http://www.antlr.org/wiki/display/ANTLR3/Interfacing+StAX+to+ANTLR http:// www.antlr.org/pipermail/antlr-interest/2007-October/023957.html

生成されたパーサー ファイルからトークン タイプをインポートする場合、トークン ファイルは問題になりません。残念ながら、私は最初に .tokens ファイルを解析しようとしましたが、トークンの種類を整数に変換するのを忘れていたため、長いバグチェイスが発生しました...

しかし、私は最終的にそれを理解しました:私はそれを理解しました: http://github.com/tinku99/antlr-pygments

于 2011-10-25T20:49:42.880 に答える