嗨,我想做一个 java 或 c# 方法,它将根据给定的输入返回一个布尔表达式 true 或 false。例如:
if(输入匹配 antlr 语法)返回 true;否则返回假;所以问题是我不知道如何检查公共树是否有任何不匹配的令牌。我试图遍历树,但它没有给出任何 mismatchetoken 作为树的节点。问题可能在于 AST 仅在解析树中不显示不匹配的标记。如果有人告诉我如何从解析器中获取解析树,它也会有所帮助?
我已经完成了 ANTLR .g 文件,它运行良好,现在我需要执行以下操作:我必须检查输入是否正确,我已经这样做了,但它不起作用:
public static boolean check() {
String file = "test.txt";
ANTLRReaderStream input;
try{
input = new ANTLRReaderStream(new FileReader(file));
regExLexer lexer = new regExLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
regExParser parser = new regExParser(tokens);
CommonTree root = (CommonTree)parser.goal().getTree();
return true;}
catch{
return false;}
}
因此,我希望我的方法仅在输入字符串正确时返回 true,否则返回 false。我这样做的方式总是返回true,但是当字符串不正确时它会打印
“第 1:4 行无关输入 '+' 期待 EOF”
在控制台中。