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

Where can I find Ruby's parse.y file on my system?

我正在阅读有关如何解析和编译 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 内的行。不是这样吗?

您没有说明您正在使用哪种 Ruby 实现。并非所有 Ruby 实现都使用 Bison 来生成解析器。并非所有 Ruby 实现都能够执行 C 代码,这是 Bison 生成的。例如,XRuby 使用 ANTLR。 JRuby 使用从 parse.c 手动翻译成 Java 的解析器,即由 Bison 从 [=] 生成的 generated C 代码11=].

使用 Bison 的 Ruby 实现中,none 发布了 parse.y。它毕竟是源代码,不是二进制文件的一部分。事实上,在编译过程中 parse.y 首先被编译为 C,然后与实现的其余部分一起被编译为二进制文件,那个 二进制文件就是交付的。

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

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

此外,parse.y 文件与您的特定 Ruby 版本在编译时使用的文件没有任何不同。您可以在官方 Ruby 存储库中搜索您的版本并从那里读取文件。