【发布时间】:2012-03-13 07:39:04
【问题描述】:
您好,我想做一个 java 或 c# 方法,它将根据给定的输入返回一个布尔表达式 true 或 false。例如:
if(输入匹配 antlr 语法) 返回真; 别的 返回假; 所以问题是我不知道如何检查公共树是否有任何不匹配的令牌。我试图遍历树,但它没有给出任何 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"
在控制台中。
【问题讨论】:
标签: java compiler-construction antlr finite-automata antlrworks