Antlr找不到符号

Antlr找不到符号,antlr,antlrworks,Antlr,Antlrworks,我正在从事一个ANTLR项目,该项目基本上应该实现以下简单语法: WS : ' ' ; MINUS : '-' ; DIGIT : '0'..'9' ; int4 @init{ int n = 0; } : (({n<4}?=> WS {n++;})* (MINUS{n++;})?({n<4}?=> DIGIT{n++;})*){n==4}? ; numbers : (int4)

我正在从事一个ANTLR项目,该项目基本上应该实现以下简单语法:

WS  :   ' '
    ;


MINUS   : '-'   ;



DIGIT  :   '0'..'9'
    ;

int4    
@init{
 int n = 0;
}
:     (({n<4}?=> WS {n++;})* (MINUS{n++;})?({n<4}?=> DIGIT{n++;})*){n==4}?      ;



numbers
    :   (int4)*;
WS:'
;
减:'-';
数字:“0”…'9'
;
int4
@初始化{
int n=0;
}
:({n-WS{n++;})*(减去{n++;})({n位{n++;})*{n==4});
数字
:(int4)*;
int4遵循Fortran的I4格式(表示宽度为4的整数)

此代码给了我以下错误:

[10:17:20] C:\Users\guille\Documents\output\testParser.java:277: cannot find symbol
[10:17:20] symbol  : variable n
[10:17:20] location: class testParser
[10:17:20]                     if ( (evalPredicate(n==4,"n==4")) ) {
[10:17:20]                                         ^
[10:17:20] C:\Users\guille\Documents\output\testParser.java:283: cannot find symbol
[10:17:20] symbol  : variable n
[10:17:20] location: class testParser
[10:17:20]                 else if ( (LA4_0==WS) && (evalPredicate(n<4,"n<4"))) {
[10:17:20]                                                         ^
[10:17:20] C:\Users\guille\Documents\output\testParser.java:289: cannot find symbol
[10:17:20] symbol  : variable n
[10:17:20] location: class testParser
[10:17:20]                 else if ( (LA4_0==DIGIT) && (evalPredicate(n<4,"n<4"))) {
[10:17:20]                                                            ^
[10:17:20] 3 errors
[10:17:20]C:\Users\guille\Documents\output\testParser.java:277:找不到符号
[10:17:20]符号:变量n
[10:17:20]位置:类testParser
[10:17:20]如果((evalPredicate(n==4,“n==4”)){
[10:17:20]                                         ^
[10:17:20]C:\Users\guille\Documents\output\testParser.java:283:找不到符号
[10:17:20]符号:变量n
[10:17:20]位置:类testParser

[10:17:20]否则如果((LA4_0==WS)&&(evalPredicate)(n局部变量
n
未传递到谓词求值的位置。您需要定义一个可在谓词内部使用的范围:

int4
scope { int n; }
@init { $int4::n = 0; }
 : ( {$int4::n < 4}?=> WS {$int4::n++;} )*
   ( MINUS {$int4::n++;} )?
   ( {$int4::n < 4}?=> DIGIT{$int4::n++;} )*
   {$int4::n == 4}?
 ;
int4
作用域{int n;}
@init{$int4::n=0;}
:({$int4::n<4}?=>WS{$int4::n++;})*
(减去{$int4::n++;})?
({$int4::n<4}?=>数字{$int4::n++;})*
{$int4::n==4}?
;
相关的:


为了更好地理解,请查看生成的语法源代码,以及使用作用域生成的语法代码。

@BartKiers basicali这是我的语法,可能在标题中添加
语法测试;
。我没有使用选项{…}。我没有使用驱动程序类,因为我仅使用ANTLRWorks进行了测试。此错误由ANTLRWorks引发tool@BartKiers语法生成成功,问题是当我运行调试编译器失败并抛出问题中出现的错误时。啊,误解了。我在生成语法时考虑过。现在我看到它们确实是mpiler错误。请尝试v3(3.5.2)的最新版本,如果这仍然是一个问题,请检查:感谢您的回答,回答我的问题。尽管我发现了另一个问题,并做了另一个与相同语法相关的问题