【问题标题】:Run ANTLR grammar from Java Swing GUI text area从 Java Swing GUI 文本区域运行 ANTLR 语法
【发布时间】:2012-10-31 22:27:52
【问题描述】:

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

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

我没有找到任何将 ANTLR 与 JavaSwing GUI 相关联的内容,或者任何说明如何从 Java Swing GUI 的 JTextArea 运行 ANTLR 语法的内容。

有任何想法/建议/简单示例/演示吗?
EDIT-Solution
下面是我的 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:非常感谢您的帮助。

谢谢

【问题讨论】:

  • 如果您不使用 Swing,您将如何运行它?除了在 ActionListener 代码中以及可能使用 SwingWorker 之外,您也会这样做。

标签: java swing user-interface antlr jtextarea


【解决方案1】:

您可以使用ProcessBuilder 唤起ANTLR,就像使用command line 一样。有一个相关的例子here。您可以使用JTextAreaappend() 方法来显示来自stdout 的结果。

【讨论】:

  • 另见使用append()example
  • 我已经浏览了 ProcessBuilder 类以及您提到的各种资源。我尝试了一个在 Windows7 中启动记事本进程的简单示例。请参阅我的编辑我仍然不确定如何在我的情况下使用它。已查看您提供的链接示例,但这是针对 Mac 的。
  • 示例中使用的字符串是特定于 Mac 的,但代码是可移植的。尝试替换为dir 之类的DOS 命令,这样您就可以阅读stdout
  • 明天可以吗?我很难掌握那些流程的东西
  • 您可能想先自己处理几个examples
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2013-09-03
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多