2

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

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

我还没有找到任何将 ANTLR 与 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:非常感谢您的帮助。

谢谢

4

1 回答 1

3

ProcessBuilder您可以像从命令行一样使用 ANTLR 。这里有一个相关的例子。您可以使用 的append()方法JTextArea显示来自 的结果stdout

于 2012-11-01T00:46:19.903 回答