Запустите грамматику ANTLR из текстовой области Java Swing GUI

У меня есть парсер ANTLR и древовидная грамматика, которые работают нормально. Я хочу, чтобы пользователь вводил грамматику в JTextarea (я использую Java Swing для разработки графического интерфейса). Как только грамматика находится в JTextarea, пользователь должен нажать кнопку (выполнить), и результат грамматики (действия) должен быть показан в другой текстовой области.

Для простоты можно использовать простейшую грамматику HelloWorld ANTLR (парсер и древовидную грамматику), чтобы продемонстрировать, как мы можем запустить грамматику ANTLR из JTextarea графического интерфейса Java Swing.

Я не нашел ничего, что связывало бы ANTLR с графическим интерфейсом JavaSwing или что-либо, что говорило бы о том, как запускать грамматику ANTLR из JTextArea графического интерфейса Java Swing.

Есть мысли/предложения/простой пример/демонстрация?
РЕДАКТИРОВАТЬ-решение
Ниже приведен фрагмент кода из моего класса GUI, который имеет дело с кнопкой имитации. Пользователь вводит грамматику ANTLR в JTextarea.

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);

                     }

Приведенный выше код также захватывает вывод и вставляет его в другую область JTextarea в моем графическом интерфейсе. @trashgod: Большое спасибо за помощь.

Спасибо


person Rizwan Abbasi    schedule 31.10.2012    source источник
comment
Как вы запускаете его, если вы не используете Swing? Вы бы сделали то же самое, за исключением кода ActionListener и, возможно, использования SwingWorker.   -  person Hovercraft Full Of Eels    schedule 01.11.2012


Ответы (1)


Вы можете вызвать ANTLR с помощью ProcessBuilder точно так же, как из командной строки. Похожий пример есть здесь. Вы можете использовать метод append() для JTextArea, чтобы отобразить результат из stdout.

person trashgod    schedule 01.11.2012
comment
См. также этот пример, в котором используется append(). - person trashgod; 01.11.2012
comment
Я прошел через класс ProcessBuilder, а также различные ресурсы, как вы упомянули. Я попробовал простой пример запуска процесса блокнота в Windows7. пожалуйста, посмотрите мой РЕДАКТИРОВАТЬ, я все еще не уверен, как использовать его в моем случае. Изучили приведенный вами пример ссылки, но это было для Mac. - person Rizwan Abbasi; 01.11.2012
comment
Строки, используемые в примере, специфичны для Mac, но код является переносимым. Попробуйте заменить команду DOS, например dir, чтобы вы могли прочитать stdout. - person trashgod; 01.11.2012
comment
Можно завтра? Мне становится трудно понять, что это за процессы - person Rizwan Abbasi; 01.11.2012
comment
Возможно, вы захотите сначала самостоятельно изучить несколько примеров. - person trashgod; 01.11.2012
comment
Да, конечно, и я дам вам знать тогда. - person Rizwan Abbasi; 01.11.2012
comment
Привет @trashgod: Большое спасибо за вашу помощь. - person Rizwan Abbasi; 09.11.2012
comment
Пожалуйста, и позвольте мне сказать, что я восхищаюсь вашим усердием. - person trashgod; 09.11.2012