2

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
4

1 に答える 1