Ruby Under a Microscope
来自Dennis的知识库
2016年12月9日 (五) 00:02Dennis zhuang(讨论 | 贡献)的版本
分词与语法解析
- 使用 Ripper 输出 lex 结果。
<code> require 'ripper' require 'pp' #ripper is not parser, it can't find error. code = <<STR 10.times do |n| puts n end STR puts code pp Ripper.lex(code) </code>
- Ripper.sexp 输出 parse 结果,也可以使用命令行 ruby --dump parsetree xxxx.rb 得到。前者是 Ripper 的 AST 展示格式,后者是实际内部的 c 语言 node 节点信息。
- Ruby 使用手写的 tokenizer ,以及 bison 写的 parser,parse.y