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