我需要使用Antlr4生成一个Ruby解析器我在https://github.com/antlr/grammars-v4/tree/master/ruby中找到的语法甚至不会假装是完整的引用“用ANTLR v4编写的类Ruby语言(刚玉)语法”
有没有人知道我能用到的ruby语法和lexer?有没有一个内在的原因,为什么有这么多的文法可用于Antlr4,而Ruby不是-语言中的一些东西,使其难以解析?
发布于 2020-03-22 22:28:40
据我所知,唯一完整的Ruby解析器是部分用Bison编写,部分用C编写,并用C手写的lexer,这是YARV的一部分。
即使是其他Ruby实现的解析器也是这种解析器的重新打包成库,或者是逐行移植到Java、C#或ECMAScript。我相信XRuby的解析器是基于ANTLR的,但是它从来没有完整的特性。Ruby.NET的解析器基于MRI的Bison语法,该语法被提供给专门为理解MRI的Bison语法而编写的解析器生成器,称为Gardens Point parser Generator。然后,将生成的解析器授权给微软用于IronRuby。
简而言之:到目前为止,还没有人能够在不基于YARV源代码的基础上开发出产品级的、完整的解析器。
我不确定原因是否一定是Ruby很难解析,我认为问题更多的是它被低估了。有ISO Ruby Language Specification,但它是专门为编写有用的程序所需的Ruby 1.8和Ruby 1.9交集的绝对最小子集而编写的。换句话说,它没有指定Ruby1.8或Ruby1.9的完整语法。它甚至没有指定Ruby1.8和Ruby1.9交集的完整语法。它只指定了能够编写有用的Ruby程序所需的绝对最小值。
我确实相信MRuby编译器(mruby-compiler)的parse.y可能是独立开发的,但a)它仍然是Bison,而不是ANTLR,b) MRuby只实现了ISO Ruby的一个子集,它是Ruby1.8和Ruby1.9交集的一个子集。
https://stackoverflow.com/questions/60799065
复制相似问题