Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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
如何从EclipseJDT解析器中从解析的java源代码中获取行?_Java_Eclipse_Parsing_Abstract Syntax Tree_Eclipse Jdt - Fatal编程技术网

如何从EclipseJDT解析器中从解析的java源代码中获取行?

如何从EclipseJDT解析器中从解析的java源代码中获取行?,java,eclipse,parsing,abstract-syntax-tree,eclipse-jdt,Java,Eclipse,Parsing,Abstract Syntax Tree,Eclipse Jdt,在我的硬盘中,我有以下来源: package DAO; import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file

在我的硬盘中,我有以下来源:

package DAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.CountDownLatch;


public abstract class A {
public class A4{
    public String teste4(int i){
        return (new String("teste"));
    }
}
public class A3{
    public String teste3(int i){
        return (new String("teste"));
    }
    public A4 teste33(int i){
        return (new A4());
    }       
}
public class A2{
    public A3 teste2(int i){
        return (new A3());
    }
}
public class A1{
    public A2 teste1(int i){
        return (new A2());
    }
}


  public int[] toIntArray(List<Integer> list) {
     A1 q=new A1();

     Integer t=q.teste1(
                (new A1()).
                teste1(0).
                teste2(0).
                teste33(0).
                teste4(0).
                length() ).
            teste2(0).
            teste3(0).
            length();
  } 
}
但是命令“getLineNumber”返回硬盘中源文件中的行号,而不是AST结构中的行号。在本例中,对于行“q.teste1((new…)”,命令“getLineNumber”返回行44和45,但希望仅返回行44。
那么,如何在“AST结构”中获取de行编号?

编译单元。toString方法只是使用
NaiveAstFlatter
类对内部AST进行粗略格式化


AST的实际内部结构只是大量的类实例,例如
注释
语句
,…因此AST本身没有行号。AST知道的唯一行号是原始源代码中的行。

编译单元.toString方法只是使用
NaiveASTFlatter
类对内部AST进行粗略格式化


AST的实际内部结构只是大量的类实例,例如
注释
语句
,…因此AST本身没有行号。AST知道的唯一行号是原始源代码中的行。

我们可以从将AST扩展到“抽象语法树”,它强调我们与源代码级(=具体)语法没有(直接)联系。你可以称之为“模型”,它捕获语义相关的方面,同时省略诸如空格之类的意外细节。语言甚至可以在不更改抽象语法的情况下重命名其关键字等


用户很方便,
编译单元
额外存储行尾的位置,因此它可以将AST节点映射回其在源代码中的原始位置。

我们可以从将AST扩展到“抽象语法树”开始,这强调我们与源代码层(=具体)没有(直接)连接语法。你可以称之为“模型”,它捕获语义相关的方面,同时省略诸如空白之类的意外细节。语言甚至可以在不改变抽象语法的情况下重命名其关键字等


对用户来说很方便,
编译单元
额外存储行尾的位置,因此它可以将AST节点映射回其在源代码中的原始位置。

在这种情况下,就行而言,预期返回如下:44,45,46,….53。
teste1
的方法调用仅是第44到45行该语句的其余部分是对其他方法的调用。在本例中,就行而言,预期会有以下返回:44,45,46,….53。
teste1
的方法调用只是第44到45行。该语句的其余部分是对其他方法的调用。为什么要在“AST结构”中使用“行号”而不是外部文件?外部文件是用户唯一关心、看到或会识别的东西。她对AST结构没有兴趣,更不用说知道它的存在了。这有什么意义?为什么要在“AST结构”中使用“行号”而不是外部文件?外部文件是用户唯一关心、看到或会识别的东西。她对AST结构没有兴趣,更不用说知道它的存在了。那么这有什么意义呢?
package DAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.CountDownLatch;
public abstract class A {
public class A4 {
    public String teste4(    int i){
      return (new String("teste"));
    }
  }
public class A3 {
    public String teste3(    int i){
      return (new String("teste"));
    }
    public A4 teste33(    int i){
      return (new A4());
    }
  }
public class A2 {
    public A3 teste2(    int i){
      return (new A3());
    }
  }
public class A1 {
    public A2 teste1(    int i){
      return (new A2());
    }
  }
  public int[] toIntArray(  List<Integer> list){
    A1 q=new A1();
    Integer t=q.teste1((new A1()).teste1(0).teste2(0).teste33(0).teste4(0).length()).teste2(0).teste3(0).length();
  }
}
public boolean visit(final CompilationUnit node) {
this.CompilationUnit=node;
}
public boolean visit(final MethodInvocation node) {
Integer LineInFile=this.CompilationUnit.getLineNumber(node.getStartPosition());
}