有谁知道可以将 ANTLR v4 语法文件(.g4 扩展名)转换为 tree-sitter 语法文件(.js 扩展名)的任何工具?如果我必须将几个转换工具链接在一起也很好。例如,从
foo.g4
(antlr4)到foo.ebnf
(中间格式)再到foo.js
(树保姆)。谢谢!
我试过使用这个工具从g4到ebnf,然后这个工具从ebnf到tree-sitter js,但无济于事。第一个工具似乎在文件底部创建了一些垃圾,这给第二个工具带来了麻烦。此外,第二个工具似乎期望每个定义都完全在一行上(并且第一个工具将每个定义分成多行以便于阅读)。
此任务需要一个转译器,也称为源到源编译器。这种转译器的早期版本是我的lezer-parser-import(lezer-parser 和 tree-sitter 非常相似)
转译基本语法是微不足道的......
挑战:
!some_token
。这在 tree-sitter 或 lezer-parser 中不起作用,因此您可能需要为外部扫描器生成代码(tree-sitter 的 C 代码,lezer-parser 的 JavaScript 代码)BlockComment: '/*' .*? '*/' -> skip;
来词法块注释。在 tree-sitter 和 lezer-parser 中,.*? '*/'
部分需要一个外部扫描仪