2

文法ファイルを(netbeansの)Javaプロジェクトにロードし、レクサークラスとパーサークラスを生成/ビルドし、リフレクションを介してロードしてから、解析する必要があるものを解析できます。

私が欲しいのは、JOptionPaneのようなポップアップにエラーを配置できるように、レクサーとパーサーの生成/ビルドからの結果を文字列にリダイレクトする簡単な例です。ANTLRworksがCTRL-Rを実行したときと同じように(少なくともWindowsでは)Error(123)grammar.g:100:12:...警告...などを表示します。

現在、私はすでに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");
            }

ありがとう

4

1 に答える 1

2

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.outToolSystem.setErrSystem.setOut

于 2012-12-14T22:48:30.717 に答える