【发布时间】:2020-08-14 12:59:14
【问题描述】:
我想从描述FTL syntax 的grammar 生成一个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