您好我想要做一個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