我在哪里可以找到我系统上的Ruby的parse.y文件?

时间:2015-12-11 15:21:38

标签: ruby parsing bison

我正在阅读如何解析和编译Ruby,我想看看正在使用的parse.y文件。我还没有在我的系统(OS X)的任何地方找到它。我没有运气就试过find / -name parse.y

运行ruby -y myfile.rb显示正在使用的parse.y中的行号,这让我觉得它确实存在于某个地方,我只是不知道在哪里。我看过parse.y online,但我想看看我的本地副本。

例如,给定:

# myfile.rb
puts 'hi'

当我运行ruby -y myfile.rb时,我看到了:

Starting parse
Entering state 0
Reducing stack by rule 1 (line 859):
...

我一直在假设行号,如上面的859,指的是parse.y中的行。那不是这样吗?

2 个答案:

答案 0 :(得分:4)

parse.y属于Ruby源代码。当您在计算机上安装Ruby时,源代码将被编译到Ruby解释器中,因此,除非您保留编译工件,否则您无法访问单个parse.y文件。

此外,parse.y文件与编译时特定Ruby版本使用的文件完全不同。您可以在ufficial Ruby存储库中搜索您的版本,然后从那里读取文件。

答案 1 :(得分:2)

您没有说明您正在使用哪种Ruby实现。并非所有Ruby实现都使用Bison来生成解析器。并非所有Ruby实现都能够执行C代码,这是Bison生成的代码。例如,XRuby使用了ANTLR。 JRuby使用一个从parse.c手工转换为Java的解析器,即由<{1}}生成的生成的 C代码。

使用Bison的那些Ruby实现中,没有一个发布parse.y。毕竟,源代码不是二进制文件的一部分。事实上,在编译期间parse.y首先被编译为C,然后将其与实现的其余部分一起编译成二进制文件,而 二进制文件是随附的。

如果您想知道用于编译Ruby可执行文件的精确parse.y文件,您将不得不询问编译Ruby可执行文件的人。假设您使用的Ruby实现甚至完全使用parse.y