Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANTLR树语法->;生成的java类有错误(getText)_Java_Antlr_Antlr3_Antlrworks - Fatal编程技术网

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;
}