ANTLRWorks の EBNF 文法に問題があります。
line 37:
upper_lower_case
: LOWER_CASE
| UPPER_CASE
;
line 42:
CLASSNAME
: UPPER_CASE (DIGITS | upper_lower_case )*
;
line 51:
UPPER_CASE
: 'A'..'Z'
;
line 55:
LOWER_CASE
: 'a'..'z'
;
line 60:
DIGITS : '0'..'9'
;
CLASSNAME は常に大文字で開始し、数字、大文字または小文字で構成することができます。
エラーログ:
[13:11:59] warning(200): classgenerator.g:43:42:
Decision can match input such as "'0'..'9'" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
[13:11:59] warning(200): classgenerator.g:43:42:
Decision can match input such as "<EOT>" using multiple alternatives: 2, 3
As a result, alternative(s) 3 were disabled for that input
[13:11:59] error(201): classgenerator.g:43:42: The following alternatives can never be
matched: 3
[13:11:59] error(208): classgenerator.g:60:1: The following token definitions can never
be matched because prior tokens match the same input: UPPER_CASE,DIGITS
誰かがこの問題を解決するのを手伝ってくれますか? 前もって感謝します。
よろしく、フラデオ
編集:
トークンを参照していない場合は、fragment キーワードを使用する必要がありますか? このようにfragmentキーワードを使うのは間違っているでしょうか?
tokens {
PUBLIC = '+';
PRIVATE = '-';
PROTECTED = '=';
}
fragment ACCESSOR
: PUBLIC
| PRIVATE
| PROTECTED
;
そして別の質問。
OBJECTNAME
: UPPER_LOWER_CASE (UPPER_LOWER_CASE | DIGIT)*
;
OBJECTNAME は、少なくとも 1 つの文字 (大文字または小文字は関係ありません) と、必要に応じて別の文字または数字で構成される必要があります。コードのその部分の何が問題なのですか? たとえば、入力しようとするとvariable
問題ありませんが、大文字で始めるとVariable
エラーが発生します。
line 1:15 mismatched input 'Variable' expecting OBJECTNAME