ANTLR树语法->;生成的java类有错误(getText)
当我生成树解析器时,我得到的错误表明类型对象的方法ANTLR树语法->;生成的java类有错误(getText),java,antlr,antlr3,antlrworks,Java,Antlr,Antlr3,Antlrworks,当我生成树解析器时,我得到的错误表明类型对象的方法getText()未定义。不能在这里输入整个类,因为它大约有500000个字符 但这些是我得到的类似的错误线 public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TreeNodeStream input = (TreeNodeStream)_input; int _s = s;
getText()
未定义。不能在这里输入整个类,因为它大约有500000个字符
但这些是我得到的类似的错误线
public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
TreeNodeStream input = (TreeNodeStream)_input;
int _s = s;
switch ( s ) {
case 0 :
int LA3_11 = input.LA(1);
int index3_11 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_11);
if ( s>=0 ) return s;
break;
case 1 :
int LA3_16 = input.LA(1);
int index3_16 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_16);
if ( s>=0 ) return s;
break;
case 2 :
int LA3_20 = input.LA(1);
int index3_20 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_20);
if ( s>=0 ) return s;
break;
case 3 :
int LA3_22 = input.LA(1);
int index3_22 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_22);
if ( s>=0 ) return s;
break;
case 4 :
int LA3_23 = input.LA(1);
int index3_23 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_23);
if ( s>=0 ) return s;
break;
case 5 :
int LA3_24 = input.LA(1);
int index3_24 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_24);
if ( s>=0 ) return s;
break;
case 6 :
int LA3_25 = input.LA(1);
int index3_25 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_25);
if ( s>=0 ) return s;
break;
case 7 :
int LA3_26 = input.LA(1);
int index3_26 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_26);
if ( s>=0 ) return s;
break;
case 8 :
int LA3_27 = input.LA(1);
int index3_27 = input.index();
input.rewind();
s = -1;
if ( ((synpred5_Walker()&&(isTypeName(input.LT(1).getText())))) ) {s = 1;}
else if ( (true) ) {s = 8;}
input.seek(index3_27);
if ( s>=0 ) return s;
break;
}
if (state.backtracking>0) {state.failed=true; return -1;}
NoViableAltException nvae =
new NoViableAltException(getDescription(), 3, _s, input);
error(nvae);
throw nvae;
}
}
我的树语法
测试文件
int main(无效){
int n;
int i;
int标志;
printf(“输入N>的值”);
scanf(“%d”和“&n”);
flag=1;
对于(i=2;(i您需要指定AST节点类型。如果未指定,则生成的代码中使用的默认值仅为Object
options {
ASTLabelType=CommonTree;
}
谢谢你的建议,这已经存在了。所以我现在要做的是删除语法中的一些isTypeName。我想问一个关于在树语法中使用重写规则的问题。我可以在树语法中同时使用重写规则和树运算符规则吗?我不会将它们混合在一个规则中,而是将它们用于不同的ru目前我的Parser还行,在语法分析器中改写规则的AST是可以的。但是树语法给出了错误。你知道我如何解决这个问题吗?我正在研究C.G语法。TrimeBar Bug BuffeTebug树语法不支持AST运算符。在完成重写规则之后,你需要使用重写SythActudio。在我的树语法中,我得到了一个错误:第3:0行输入'void'Walker时没有可行的替代。g:第0:0行的节点输入'void function1(){\n\tprintf-----这里的整个程序------在对树语法进行了大量重写之后,我现在真的很困惑
int main(void) {
int n;
int i;
int flag;
printf("Enter value of N > ");
scanf("%d", &n);
flag = 1;
for (i=2; (i<(n/2)) && flag; ) { /* May be we do not need to test
values of i greater than the square root of n? */
if ((n % i) == 0) /* If true n is divisible by i */
flag = 0;
else
i=i+1;
}
if (flag)
printf("%d is prime\n", n);
else
printf("%d has %d as a factor\n", n, i);
return 0;
}
options {
ASTLabelType=CommonTree;
}