0
BLOCK_COMMENT : '/*' .*? '*/' -> skip;
EOL_COMMENT : '//' ~[\r\n]* -> skip;
WS: [ \n\t\r]+ -> skip;
program: usingDirectives? EOF;
usingDirectives: usingDirective+;
usingDirective: USING
fullyQualifiedType
(usingAlias | USING_ALL)?
END;
USING: 'using';
fullyQualifiedType: identifier (DOT identifier)*;
identifier: (LETTER | UNDERSCORE)
(LETTER | DIGIT | UNDERSCORE)*;
DOT: '.';
usingAlias: AS identifier;
USING_ALL: '.*';
AS: 'as';
END: ';';
LETTER: [a-zA-Z];
DIGIT: [0-9];
UNDERSCORE: '_';
これは私の文法です。Antlr4 - 識別子を単一のトークンとして一致させる
using IO.Console.Print as Print;
using IO.Console; // same as using IO.Console as Console;
using IO.Console.*;
これは私のテストデータです。
文法は意図どおりに動作しますが、識別子の各文字は単一のトークンになりますが、これは少し役に立たないものです。
私は、識別子レクサー・ルール(識別子)を作成しようとした場合、テストを実行しているとき、私は、次のエラーを取得する:
line 1:23 extraneous input 'as' expecting {'.', '.*', 'as', ';'}
私は識別子は唯一のこと持ってしようとした場合でも、[-はZa - Z]、サブルールなしで、同じことが起こります。
問題がある場合は、Python3をターゲット言語として使用しています。 Antlrを使った私の最初のプロジェクトであるので、他のルーキーの間違いも指摘してください。ありがとう!
ありがとうございます。私はあなたのアドバイスを受け、文法を単純化しました。また、Antlrの仕組みについての私の基本的な理解が欠けていたことが判明しました。ルールの順序が重要であり、パーザの規則の前にレクサーのルールがすべて評価されたことを理解したら、すべてが意味をなさないようになった。 – MackThax
あなたの問題を解決するのを助けてくれてうれしい。 – Yevgeniy