转换W3C';s EBNF至ANTLR

转换W3C';s EBNF至ANTLR,antlr,antlr4,bnf,ebnf,project-fluent,Antlr,Antlr4,Bnf,Ebnf,Project Fluent,我想从中生成一个Swift解析器,它描述了 是否有任何工具可以自动进行EBNF->ANTLR转换?或者这两个语法语法至少是可转换的 语法本身是由JavaScript编写的脚本自动生成的。另一种可能的解决方案是更新rules->EBNF以输出ANTLR语法。但我是语言新手,不确定这能不能解决 是否有任何工具可以自动进行EBNF->ANTLR转换 哎呀,没有这样的工具 或者这两个语法语法至少是可转换的 否。EBNF允许间接左递归规则,而ANTLR不支持这种规则(尽管它支持直接左递归规则)。这种语法没

我想从中生成一个Swift解析器,它描述了

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

语法本身是由JavaScript编写的脚本自动生成的。另一种可能的解决方案是更新
rules->EBNF
以输出ANTLR语法。但我是语言新手,不确定这能不能解决

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

哎呀,没有这样的工具

或者这两个语法语法至少是可转换的


否。EBNF允许间接左递归规则,而ANTLR不支持这种规则(尽管它支持直接左递归规则)。

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