重写Ruby';来自Gem的s基C代码

重写Ruby';来自Gem的s基C代码,c,ruby,parsing,C,Ruby,Parsing,为了进行实验,我正在寻找一种方法来修改Ruby的一些基本代码,特别是解析器。我想知道这是否有可能做到,更不用说使用宝石了 我已经缩小了需要在parser.c中更改为static int yylex()的代码范围。我打算尝试使用别名,但这似乎要求我更改parser.h,据我所知,这在Gem中是无法完成的 这可以从宝石上完成吗?不可以 gems可以访问的唯一基本C代码是。 这里没有公开解析/词法分析代码 如果您想定义自定义语法,我将尝试(按顺序): 稍微放松你的需求,定义一个新的需求。Ruby具有强

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

我已经缩小了需要在
parser.c
中更改为
static int yylex()
的代码范围。我打算尝试使用别名,但这似乎要求我更改
parser.h
,据我所知,这在Gem中是无法完成的

这可以从宝石上完成吗?

不可以

gems可以访问的唯一基本C代码是。 这里没有公开解析/词法分析代码

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

  • 稍微放松你的需求,定义一个新的需求。Ruby具有强大的元编程特性,可以在脚本中静态执行任何操作,而不是在运行时动态执行
  • 用Ruby编写您的自定义解析器,并发出有效的Ruby,然后
    eval
    。丑陋,可能有点慢,但可以让你做任何你想做的事
  • 改为修改解析器。mruby是为嵌入式应用程序设计的,您希望能够高度定制VM的功能。我怀疑他们脑子里是否有解析器,但这可能比摆弄MRI更可行

  • 就我对ruby的理解而言,您不能从Gem上执行此操作,因为Gem在ruby解释器上运行。您可以向gem添加c扩展,但不能影响已经运行的解释程序。有关带有c扩展名的gems的更多信息:rats。我打算尝试把++--放在那里,只是出于怨恨。哦,好吧。