我正在使用 ANTLR4 生成 java 源代码的 AST,但我不得不转向 ANTLR3,因为我没有得到太多帮助和文档,而且确实很难继续。我设法生成 AST,但不是以可视格式生成。然后我遇到了一个很棒的答案 ,我确实能够在 DOT 文件中生成 AST,但有一个小问题。
我的代码:
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.tree.CommonTree;
import org.antlr.runtime.tree.DOTTreeGenerator;
import org.antlr.stringtemplate.StringTemplate;
class Main {
public static void main(String[] args) throws Exception {
parseFile("/home/satnam-sandhu/Workstation/ASTGenerator/resource/java/Blabla.java");
}
public static void parseFile(String f)throws Exception {
JavaLexer lexer = new JavaLexer(new ANTLRFileStream(f));
CommonTokenStream tokens = new CommonTokenStream(lexer);
JavaParser parser = new JavaParser(tokens);
CommonTree tree = (CommonTree)parser.compilationUnit().getTree();
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 gradle,所以我通过以下方式构建项目:
gradle clean …Run Code Online (Sandbox Code Playgroud) 我希望逻辑上没有缺陷。
步骤1:呼叫者创建报价
步骤2:呼叫者设置localDescription
步骤3:呼叫者将描述发送给被呼叫者
// ------------------------------------------------ ------ //
步骤4:被叫方收到要约集的远程描述
步骤5:被叫方创建答案
步骤6:被叫方设置本地描述
步骤7:被呼叫者将说明发送给呼叫者
// ------------------------------------------------ ------ //
步骤8:呼叫者收到答案并设置远程描述
这是上面的代码
const socket = io();
const constraints = {
audio: true,
video: true
};
const configuration = {
iceServers: [{
"url": "stun:23.21.150.121"
}, {
"url": "stun:stun.l.google.com:19302"
}]
};
const selfView = $('#selfView')[0];
const remoteView = $('#remoteView')[0];
var pc = new RTCPeerConnection(configuration);
pc.onicecandidate = ({
candidate
}) => {
socket.emit('message', {
to: $('#remote').val(),
candidate: candidate
}); …Run Code Online (Sandbox Code Playgroud) 我正在寻找使用java debug interface构建调试器。
我的目标是设置断点并获取变量的值。
我发现这个答案接近我正在寻找的答案,我知道我必须使用以下接口:- VirtualMachineManager, LaunchingConnector, ClassPrepareEvent, ClassPrepareRequest. 但我无法弄清楚,如何在特定行设置断点并获取变量的值或应以何种顺序使用接口。
例如在下面的代码中,我如何继续运行它以jdi获取变量的值S
import java.io.*;
class Hello {
public static void main(String args[]) {
String S = "Hello World";
int a = 12;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑在线a = 12或在方法结束时设置调试点, main以便我获得S