Antlr找不到符号
我正在从事一个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)
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)的最新版本,如果这仍然是一个问题,请检查:感谢您的回答,回答我的问题。尽管我发现了另一个问题,并做了另一个与相同语法相关的问题