从Java Swing GUI文本区域运行ANTLR语法

时间:2012-10-31 22:27:52

标签: java swing user-interface antlr jtextarea

我有一个正常工作的ANTLR解析器和树语法。我希望用户在JTextarea中输入语法(我使用java swing进行gui开发)。一旦语法在JTextarea中,用户应按下按钮(运行),语法结果(动作)将显示在另一个文本区域中。

为简单起见,最简单的HelloWorld ANTLR语法(解析器和树语法)可用于演示如何从Java Swing gui的JTextarea运行ANTLR语法。

我没有发现任何与ANSR相关的内容与JavaSwing GUI或任何说明如何从Java Swing GUI的JTextArea运行ANTLR语法的内容。

任何想法/建议/简单示例/演示?
修改的溶液
下面是我的GUI类中的一部分代码,用于处理模拟按钮。用户在JTextarea中输入ANTLR语法。

private void addReRunButtonListener() {
        btnReRun.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                 try {
                     //for Random Simulation
                     if(rdbtnRandomWithSeed.isSelected())
                     {
                      String line = "";
                      String nl ;

                      Process p = Runtime.getRuntime().exec("java org.antlr.Tool protocol.g protocolWalker.g");
                      p.waitFor();
                      p = Runtime.getRuntime().exec("javac protocolLexer.java protocolParser.java protocolWalker.java SimulatorRandom.java");
                      p.waitFor();
                      p = Runtime.getRuntime().exec("java RandomSimulator");

                      OutputStreamWriter stdin = new OutputStreamWriter(p.getOutputStream ());

                      stdin.write(simAlgoEdit.getText()+"\n");

                              stdin.close();

                      BufferedReader bri = new BufferedReader
                        (new InputStreamReader(p.getInputStream()));
                      nl = bri.readLine();
                      while (nl != null) {
                          line = line + nl + "\n";
                          nl = bri.readLine();

                      }
                      bri.close();

                      System.out.println("Done.");
                      simGraphicsArea.setText(line);
                      graphicsArea.setText(line);

                     }

上面的代码也抓取输出并将其插入我的GUI中的另一个JTextarea中。 @trashgod:非常感谢你的帮助。

谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用ProcessBuilder唤起ANTLR,就像使用command line一样。有一个相关的例子here。您可以使用append()的{​​{1}}方法显示JTextArea的结果。