我有与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