我在 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
谁能帮我解决这个问题?提前致谢。
问候, 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