从Gem覆盖Ruby的基本C代码

时间:2017-11-22 00:11:45

标签: c ruby parsing

为了实验,我正在寻找一种方法来修改一些Ruby的基本代码,特别是解析器。我想知道这是否可行,更不用说使用宝石了。

我已将我需要更改的代码缩小到var obj = document.getElementById("swf-obj"); obj.data = obj.data; // trigger update 内的static int yylex()。我打算尝试使用别名,但这似乎要求我改变parser.c,这是我无法在Gem中完成的。

这可以从Gem完成吗?

1 个答案:

答案 0 :(得分:1)

没有

gem可以访问的唯一基本C代码是Ruby headers公开的代码。 解析/ lexing代码不会在那里公开。

如果你想定义自定义语法,我会尝试(按顺序):

  1. 稍微放宽您的要求并定义DSL。 Ruby具有疯狂强大的元编程功能,可以在脚本中静态执行任何操作,而不是在运行时动态执行它
  2. 在Ruby中编写自定义解析器并发出有效的Ruby,然后eval。丑陋,可能有点慢,但会让你做任何你想做的事。
  3. 改为修改mruby解析器。 mruby专为希望能够高度自定义VM功能的嵌入式应用程序而设计。我怀疑他们是否考虑过解析器,但它仍然比使用MRI更加可行。