您好我想要做一个java或c#方法,它将基于给定的输入返回布尔表达式true或false。例如:ANTLR检查commontree是否正确或如何检查给定的输入是否匹配ANTLR语法?
if(输入与antlr语法匹配) 返回true; else return false; 所以问题是我不知道如何检查commontree是否有任何mismatchetoken。我试图遍历树,但它没有给任何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期待”
。
谢谢,这非常好。现在我还有一个问题。我的语法接受例如这个字符串a * b,但不接受a ** b,这部分工作正常,但是当我添加一个不属于语言部分的字符串时,它会抛出一个异常,但返回true,例如a * b_。在这种情况下,'_'不是我的语言的一部分。任何建议 – sm13294 2012-02-23 18:29:33
哦,我忘了在我的词法分析器中添加@Override。非常感谢你。 – sm13294 2012-02-23 18:31:05