gpt4 book ai didi

java - 如何将 ANTLR 语法构建输出到屏幕(例如输出到 JOptionPane,如 ANTLRworks CTRL-r)

转载 作者:行者123 更新时间:2023-11-30 09:28:44 26 4
gpt4 key购买 nike

我可以将语法文件加载到我的 java 项目(在 netbeans 中)并生成/构建我的词法分析器和解析器类,通过反射加载它们,然后解析我需要解析的内容。

我想要的是一个简单的例子,将词法分析器和解析器的生成/构建的结果重定向到一个字符串,这样我就可以把错误放到像 JOptionPane 这样的弹出窗口中。就像 ANTLRworks 在您执行 CTRL-R 时(至少在 Windows 中)显示 Error(123) grammar.g:100:12: ...Warning...etc...

现在我已经在使用 DiagnosticCollector,但这并不总是像 ANTLRworks 中的 CTRL-r 那样提供足够的细节。用户纠正语法以纠正错误的想法。

这是我的代码片段

            Tool tool = new Tool(new String[]{userDir + grammarPath + grammarName + ".g"});
//tool.setOutputDirectory(userDir + grammarPath );
tool.process();
if(tool.getNumErrors()>0) {
errors=true;
unableToLoadGrammar_AddLine("1. Detected "+tool.getNumErrors()+" Error(s)"+tool.toString()+"\n");
}

谢谢

最佳答案

调用org.antlr.tool.ErrorManagersetErrorListener方法:

public class ToolTest {
public static void main(String[] args) {


org.antlr.Tool tool = new org.antlr.Tool(new String[] { "GrammarWithErrors.g" });

final ArrayList<String> messages = new ArrayList<String>();

ErrorManager.setErrorListener(new ANTLRErrorListener() {

@Override
public void warning(Message msg) {
messages.add("Warning: " + msg.toString());
}

@Override
public void info(String msg) {
messages.add("Info: " + msg.toString());
}

@Override
public void error(ToolMessage msg) {
messages.add("Tool Error: " + msg.toString());
}

@Override
public void error(Message msg) {
messages.add("General Error: " + msg.toString());
}
});

tool.process();

System.out.println("Done processing...");

for (String msg : messages) {
System.out.println(msg);
}
}
}

将错误的语法传递给上面的代码会产生以下输出:

Done processing...
General Error: error(100): GrammarWithErrors.g:1:14: syntax error: antlr: MismatchedTokenException(74!=52)
Tool Error: error(150): grammar file GrammarWithErrors.g has no rules
General Error: error(100): GrammarWithErrors.g:82:7: syntax error: assign.types: NoViableAltException(0@[])

请注意,Tool 仍然直接在 System.errSystem.out 上运行。如果你想处理 Tool一切,你必须调用 System.setErrSystem.setOut以及。

关于java - 如何将 ANTLR 语法构建输出到屏幕(例如输出到 JOptionPane,如 ANTLRworks CTRL-r),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com