2017-04-17 5 views
0

私はANTLR 4.5でレクサーを書くことを学び始めています。ドキュメントとして機能するthis pageから、more、pushMode(x)、popMode、type(x)、channel(x)、mode(x)、skipというLexerコマンドが存在することがわかりました。ANTLR4でのさまざまなLexerコマンドの機能。私の解釈は正しいのですか?それぞれは何をしていますか?

私はその機能をはっきりと理解できませんでした。

これは、現在のトークンに読み込まれているすべての文字をスキップし

スキップ:以下は、それらのそれぞれが何をするかの私の理解です。過去のトークンは変更されません。

レクサーは、いくつかの文字aを読んでいて、それが次のbを読み込み、

SOME_RULE : 'b' -> skip; 

に対応するのであれば、それはabの両方を捨てて次のトークンに移動します。

さらに

これは何かわかりません。ドキュメントには、読み込まれたテキストが破棄されることはありませんが、最終的にはどのトークンがそこに存在するかについては何も記載されていません。意味値ab、またはRULE_1 RULE_2RULE_2への結果のトークン対応させていただきます、または何か他のもの、aを読むと、私は

RULE_1 : 'a' -> more; 
RULE_2 : 'b'; 

を持っていると仮定して、b

I型

RULE_1 : 'a' -> type(TOKEN_1); 
RULE_2 : 'b'; 

のみaTOKEN_1のセマンティック値とする持って、またはすべての文字が右からではなく、トークンたルールに対応する場合は(X)

最後のトークンは、意味値と見なされますか? baが到着した場合、TOKEN_1の値はaまたはbaとなりますか?

モード(X)

これは新しいmodeにモードを切り替えます。しかし、ここでは、スイッチのポイントが保持されるか破棄されるまで文字が読み込まれますか?トークンはどうですか?各モードに別々のスタックがありますか?

pushMode(x)の

これはどのようにmodeは異なるのですか?既に読み込まれた文字が、それが起こっているモードにプッシュされるのは、modeで起こらないのでしょうか?

popMode

ポップアウトとは何ですか?もしあれば、私は、トークンbapopMode原因だけaが返されるか、またはba、またはを取得する場合、私は

RULE_1 : 'a' -> popMode; 
RULE_2 : 'b' ; 

を持っている場合は?スタックが空のために時折エラーが発生するのはなぜですか?

チャンネル(x)

私はこれに関する説明を見つけることができませんでした。チャンネルとは何ですか?

可能であれば、これらのコマンドのそれぞれの機能を明確にしてください。

これが広すぎる場合は教えてください。

ありがとうございます。

答えて

関連する問題