Представление дерева синтаксического анализа с использованием JavaCC

Я построил парсер в JavaCC, который дал, например: let a: int = 5 + 4; он отображает:

Start
 Sxl
  Statement
   VariableDecl
    Identifier
    Type
    Expression
     SimpleExpression
      Term
       Factor
        Literal
         IntegerLiteral
      AdditiveOp
      Term
       Factor
        Literal
         IntegerLiteral
 Parsed.

это работает нормально, однако мне нужно улучшить этот синтаксический анализатор для вывода в файл xml и вывода следующего вывода для вышеуказанного ввода:

letNode( Identier(X), ExprNode( PlusNode( IntegerLiteral(8), IntegerLiteral(2) )))

Как это сделать, нужно ли мне использовать обычную Java или в JavaCC есть какие-то функции?


person user3599420    schedule 03.05.2014    source источник
comment
JavaCC не сделает этого за вас. Вам придется пройти через AST и выплюнуть XML самостоятельно. Вы можете увидеть аналогичный результат с другим инструментом по адресу: stackoverflow.com/a/7882118/120163 [Я отмечаю, что вывод вы выставляете не XML].   -  person Ira Baxter    schedule 03.05.2014


Ответы (1)


Мне кажется, что вы используете JJT. Вот 3 способа преобразовать входной файл в файл XML с помощью JavaCC или JJT.

  1. Сгенерированный класс SimpleNode легко отредактировать, чтобы он выводил XML - или любой другой формат, который вы хотите.

  2. Альтернативой является использование JavaCC вместо JJT и выполнение вызовов SAX, чтобы ваш синтаксический анализатор создавал XML-документ. Тогда легко вывести XML-документ.

  3. Третий вариант - придерживаться JJT и модифицировать класс SimpleNode для создания XML-документа (с использованием SAX или DOM). Затем XML-документ может быть выведен.

person Theodore Norvell    schedule 03.05.2014
comment
Варианты 1 и 3 разные? - person Ira Baxter; 04.05.2014
comment
Например, я не могу использовать этот формат? void Identifier () #MyID: - person user3599420; 04.05.2014
comment
@IraBaxter Под (1) я имел в виду то, что он / она может напрямую создавать строку или печатать в файл. Под (2) и (3) я имел в виду то, что он / она может сначала создать объект XML, а затем использовать стандартные методы для вывода его в файл. - person Theodore Norvell; 04.05.2014
comment
@ user3599420 Я думаю, вы спрашиваете, можете ли вы использовать JJT. Если да, то да. Варианты (1) и (3) используют JJT. Только вариант (2) позволяет избежать JJT. - person Theodore Norvell; 04.05.2014
comment
Я начал работать над этим, спасибо! пожалуйста, посмотрите мою проблему здесь stackoverflow.com/questions / 23457951 / - person user3599420; 04.05.2014