从Gem覆盖Ruby的基本C代码

4
为了实验,我正在寻找一种修改Ruby基础代码的方式,具体来说是解析器。我想知道这是否可能实现,甚至是否可以使用Gem。
我已经确定需要更改的代码为parser.c中的static int yylex()。我本来打算尝试使用别名,但似乎需要更改parser.h,而这在Gem中是不可能实现的。
这可以从一个Gem中完成吗?

1
就我对 Ruby 的理解而言,你无法从 Gem 中执行此操作,因为 Gems 运行在 Ruby 解释器之上。你可以向你的 Gem 添加 C 扩展,但是你无法影响已经运行的解释器。 有关带有 C 扩展的 Gems 的更多信息,请参阅:http://guides.rubygems.org/gems-with-extensions/ - Maru
1个回答

1

不行。

宝石可以访问的唯一基本C代码是由 Ruby headers暴露出来的。解析/词法分析代码在那里没有暴露。

如果您想定义自定义语法,我建议尝试以下方法(按顺序):

  1. 放松一下要求,定义一个DSL。Ruby具有非常强大的元编程功能,可以在运行时动态执行任何您可能在脚本中静态执行的操作。
  2. 用Ruby编写自定义解析器并生成有效的Ruby代码,然后进行eval。这样做可能有些丑陋且可能有点慢,但允许您做任何您想做的事情。
  3. 修改mruby解析器。mr

2
糟糕,我本来想在那里加上++ --的,只是出于恶意。哎呀。 - omikes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接