【问题标题】:Parse tree representation using JavaCC使用 JavaCC 解析树表示
【发布时间】:2014-05-03 15:20:11
【问题描述】:

我在 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中有一些功能?

【问题讨论】:

  • JavaCC 不会为您执行此操作。您必须自己走过 AST 并吐出 XML。您可以在以下位置使用另一个工具看到类似的结果:stackoverflow.com/a/7882118/120163 [我注意到您展示的输出不是 XML]。

标签: java xml parsing tree javacc


【解决方案1】:

在我看来,您好像在使用 JJT。以下是使用 JavaCC 或 JJT 将输入文件转换为 XML 文件的 3 种方法。

  1. 很容易编辑生成的SimpleNode 类,以便它输出 XML 或您想要的任何格式。

  2. 另一种方法是使用 JavaCC 而不是 JJT 并进行 SAX 调用,以便您的解析器构造 XML 文档。然后就很容易输出XML文档了。

  3. 第三种选择是坚持使用 JJT 并修改 SimpleNode 类以生成 XML 文档(使用 SAX 或 DOM)。然后可以输出 XML 文档。

【讨论】:

  • 选项 1 和 3 不同吗?
  • 例如我不能使用这种格式?无效标识符()#MyID:
  • @IraBaxter 我的意思是(1)是他/她可以直接生成字符串或打印到文件。我所说的 (2) 和 (3) 的意思是他/她可以先生成一个 XML 对象,然后使用标准方法将其输出到文件中。
  • @user3599420 我想你是在问你是否可以使用JJT。如果是这样,是的。选项 (1) 和 (3) 使用 JJT。只有选项 (2) 避免了 JJT。
  • 我开始努力了,谢谢!请在这里查看我的问题stackoverflow.com/questions/23457951/…
猜你喜欢
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多