“Ruby Under a Microscope”的版本间的差异

来自Dennis的知识库
跳转到: 导航搜索
第21行: 第21行:
 
</pre>
 
</pre>
  
* Ripper.sexp 输出 parse 结果,也可以使用命令行 ruby --dump parsetree xxxx.rb 得到。
+
* Ripper.sexp 输出 parse 结果,也可以使用命令行 ruby --dump parsetree xxxx.rb 得到。前者是 Ripper 的 AST 展示格式,后者是实际内部的 c 语言 node 节点信息。
 +
* Ruby 使用手写的 tokenizer ,以及 bison 写的 parser,[https://github.com/ruby/ruby/blob/510f0ec86912e31babaadf1f66bf2a82351c1359/parse.y parse.y]

2016年12月9日 (五) 00:02的版本


分词与语法解析

  • 使用 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
个人工具
名字空间

变换
操作
导航
工具箱