我有與EBNF語法的問題ANTLRWorks:EBNF文法(ANTLR)
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
誰能幫我解決這個問題呢? 在此先感謝。
問候, Hladeo
編輯:
所以我應該使用片段關鍵字,如果它不指代幣?用這種方式使用fragment關鍵字會出錯?
tokens {
PUBLIC = '+';
PRIVATE = '-';
PROTECTED = '=';
}
fragment ACCESSOR
: PUBLIC
| PRIVATE
| PROTECTED
;
和另一個問題。
OBJECTNAME
: UPPER_LOWER_CASE (UPPER_LOWER_CASE | DIGIT)*
;
OBJECTNAME應該至少包含一個字母(大寫或小寫套管無所謂)和可選的另一個字母或數字 - 有什麼錯的代碼的一部分?當我嘗試鍵入例如variable
- 這是好的,但是當我開始用大寫字母Variable
我得到一個錯誤:
line 1:15 mismatched input 'Variable' expecting OBJECTNAME
感謝響應。你能回答我的新問題嗎?我編輯了第一篇文章。 – Hladeo 2013-05-13 17:13:40
那麼有沒有可能區分CLASSNAME和OBJECTNAME?我寫了一個簡單的Java類生成器,我可以輸入:'create ClassName + name:String,-age:int;'其中變量,年齡,字符串和int是OBJECTNAME。 – Hladeo 2013-05-13 17:55:07
@Hladeo請參閱編輯2在我的答案:) – 2013-05-13 18:08:30