如何从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());
}