【问题标题】:Convert W3C's EBNF to ANTLR将 W3C 的 EBNF 转换为 ANTLR
【发布时间】:2020-08-14 12:59:14
【问题描述】:

我想从描述FTL syntaxgrammar 生成一个Swift 解析器。

是否有任何工具可以自动进行EBNF -> ANTLR 转换?或者这两种语法至少是可以转换的?

语法本身是从用 JavaScript 编写的 set of rules 自动生成的。另一种可能的解决方案是更新 rules -> EBNF serializer 以输出 ANTLR 语法。但我是语言新手,不确定是否可以处理。

【问题讨论】:

  • 这个语法没有定义lexer和parser之间的分工,也没有遵循一致的命名约定来表示分工。因此,为了将其转换为 Antlr,您需要定义符号的分区。 Antlrvsix 可以修复间接左递归,但这里不存在。 “-”运算符必须转换为语义谓词。
  • here。完全未经测试。
  • 虽然本质上并没有阻止 EBNF 语法到 Antlr4 语法的转换,但是这种语法在词法分析器和解析器之间没有明确的界限。为了让它“工作”,我将词法分析器更改为按字符词法分析器,并将所有 EBNF 规则转换为 Antlr 解析器规则。 Antlr 还不能很好地处理其他一些令人讨厌的问题,例如低级规则中的 EOF。虽然是一个很好的练习,但显然不适合 Antlr。
  • 感谢您的出色工作和解释!要了解所有问题,我可能需要阅读 ANTRL 书。但是现在,我决定尝试手动移植参考解析器。似乎现有的库使用相同的方法:目标语言上的自定义解析器 + 用于验证的综合测试套件。

标签: antlr antlr4 bnf ebnf project-fluent


【解决方案1】:

是否有任何工具可以自动进行 EBNF -> ANTLR 转换?

AFAIK,没有这样的工具。

或者这两种语法至少可以转换?

没有。 EBNF 允许使用 ANTLR 不支持的间接左递归规则(但它确实支持直接左递归规则)。

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多