【问题标题】:(E)BNF Parsing to XML(E)BNF 解析为 XML
【发布时间】:2009-09-26 14:03:07
【问题描述】:

是否有任何 (E)BNF 解析器能够生成 AST 的 XML 树?

改写:将 (E)BNF 定义的语言编译成某种 XML 的最快方法是什么?

奖励:使用 Javascript :-)

【问题讨论】:

  • 你能澄清一下吗?你想要什么样的 XML 作为输出?
  • 我最近写了一个,但那是封闭源代码;)那里有很多免费/开放的解析器生成器。其中之一是绑定输出XML。
  • 生成的解析树。截图示例: ::= 将产生:.........

标签: javascript xml parsing bnf ebnf


【解决方案1】:

目前看来我最好的选择是使用AntLR 和 StringTemplate 接口。它还支持JavaScript target

【讨论】:

    【解决方案2】:

    不是免费的,但会生成 XML:DMS Software Reengineering Toolkit。提供多种预定义的语言定义(C、C++、C#、Java、COBOL、Javascript、XML,...)。

    问题是,你会用它做什么?如果您正在认真处理某些语言,那么您需要的不仅仅是 AST(几乎总是需要一个符号表)。

    【讨论】:

    • 问题是我正在尝试与具有 XML DSL 的系统进行互操作,该系统有很多冗余,并且几乎不可读。我假设如果我可以获得 XML AST,XSLT 将解决我的问题(尽管我没有考虑符号表:-\)
    • DSL 的重点是使其对人们可读。当我听到人们同时说“DSL”和“XML”时,我几乎想哭。解析器的重点是阅读人们写的东西,并将其变成机器可以处理的东西。 XML DSL 是“我懒得写解析器”的简写。
    • 你误解了我的意思。 DSL 不是 XML,但解释引擎只接受 XML。我正在尝试制作一个人类可读的 DSL,它在编译后输出引擎可以读取的详细 XML。
    • 好的,是的,我误解了。抱歉,“XML DSL”这个短语似乎是非常致命的证据。那么……有一个接受 XML 的现有解释器吗?它必须接受一个特定的 XML DTD,其中的标签意味着什么,否则它不知道该做什么。因此,您需要的不是生成 XML 解析树的 DSL 解析器,而是生成现有 XML 解释引擎可以解释的东西的解析器。你需要一个翻译器,而不是一个解析器,这要困难得多,因为它可能需要你的 DSL 语义和现有解释引擎之间的任意映射。
    • 真的!我理所当然地认为 XSLT 最终会成功,但它显示出的复杂性比我预期的要复杂得多。为此,我最终使用了 AntLR 和 StringTemplate,语法中有很多逻辑交织在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多