Ruby中的运算符和方法
大多数看起来像运算符的东西都是
Ruby中的方法; 1 2是1的语法糖(2).
即使和*是程序可以重新定义的方法,Ruby也有特殊的魔力来评估1 2 * 3为1.(2. *(3))而不是1.(2).*(3). 我想知道这个特殊魔法在Ruby中的位置 – 如果它与解释器连接起来很困难. 阿里. 解决方法
在所有Ruby实现中,运算符优先级由解析器处理.由于几乎所有现有的Ruby实现都使用相同的解析器,或者使用相同的YACC语法生成的解析器,
parse.y in YARV is the file you want to look at.(例如,在JRuby中,该文件基本相同:
src/org/jruby/parser/Ruby19Parser.y .与IronRuby相同:
Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.y .)
没有直接使用YARV解析器或使用YARV的parse.y中的YACC克隆生成解析器的唯一四个Ruby实现是Cardinal,tinyrb,RubyGoLightly和XRuby. Cardinal是Parrot虚拟机的Ruby实现,由于Parrot包含Parrot Grammar Engine,Cardinal自然会使用它.有趣的文件是 Tinyrb使用了一个使用Ian Piumarta腿部库的PEG解析器.正如PEG解析器的典型情况一样,没有运算符优先级表,而优先级隐含在语法的层次结构中.有关详细信息,请参阅 XRuby使用ANTLR作为其解析器.这里有趣的文件是 Rubinius使用墨尔本解析器,它本质上是YARV的解析器,打包为C扩展. MagLev使用ruby_parser(见下文). 除了Ruby实现之外,还有其他Ruby解析器可用. Ryan Davis的ruby_parser源自YARV YACC语法.它使用racc作为解析器生成器.见 Caleb Clausen的RedParse使用Caleb自己的手写编译器解释器.有趣的文件是 这就是我所知道的所有解析器,它实际上处理运算符优先级. RDoc中内置了另一个解析器,YARD中曾经有一个解析器(它现在使用RedParse),但那些只处理Ruby的语法足以查找模块,类和方法,注释和提取方法参数列表.它们不处理运算符优先级. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |