本文简要介绍ruby语言中 Ripper类
的用法。
Ripper
是一个 Ruby 脚本解析器。
您可以使用基于事件的样式从解析器获取信息。 Ruby 程序的抽象语法树或简单词法分析等信息。
用法
Ripper
提供了一个简单的接口,用于将程序解析为符号表达式树(或 S-expression)。
理解解析器的输出可能是一个挑战,建议您使用 PP
来格式化输出以便于阅读。
require 'ripper' require 'pp' pp Ripper.sexp('def hello(world) "Hello, #{world}!"; end') #=> [:program, [[:def, [:@ident, "hello", [1, 4]], [:paren, [:params, [[:@ident, "world", [1, 10]]], nil, nil, nil, nil, nil, nil]], [:bodystmt, [[:string_literal, [:string_content, [:@tstring_content, "Hello, ", [1, 18]], [:string_embexpr, [[:var_ref, [:@ident, "world", [1, 27]]]]], [:@tstring_content, "!", [1, 33]]]]], nil, nil, nil]]]]
您可以在上面的示例中看到,表达式以 :program
开头。
从这里开始,在 :def
的方法定义,后跟方法的标识符 :@ident
。在方法标识符之后是括号 :paren
和 :params
下的方法参数。
接下来是方法体,从:bodystmt
(stmt
含义语句)开始,其中包含方法的完整定义。
在我们的例子中,我们只是返回一个 String
,所以接下来我们有 :string_literal
表达式。
在我们的 :string_literal
中,您会注意到两个 @tstring_content
,这是 Hello,
和 !
的文字部分。在两个 @tstring_content
语句之间是一个 :string_embexpr
,其中 embexpr
是一个嵌入式表达式。我们的表达式由一个局部变量或 var_ref
组成,其标识符 (@ident
) 为 world
。
资源
要求
-
ruby 1.9(仅支持 CVS HEAD)
-
bison 1.28 或更高版本(其他 yacc 不起作用)
相关用法
- Ruby Ripper.sexp用法及代码示例
- Ruby Ripper.slice用法及代码示例
- Ruby Ripper.tokenize用法及代码示例
- Ruby Ripper.sexp_raw用法及代码示例
- Ruby Ripper.lex用法及代码示例
- Ruby RingServer类用法及代码示例
- Ruby RingFinger类用法及代码示例
- Ruby RingServer.new用法及代码示例
- Ruby Range.end用法及代码示例
- Ruby Regexp named_captures()用法及代码示例
- Ruby Ractor.receive_if用法及代码示例
- Ruby Range new()用法及代码示例
- Ruby Rational.inspect用法及代码示例
- Ruby Random.bytes用法及代码示例
- Ruby Random hex()用法及代码示例
- Ruby RFC2396_Parser.parse用法及代码示例
- Ruby Range.size用法及代码示例
- Ruby Rational.rational <=>用法及代码示例
- Ruby Recorder类用法及代码示例
- Ruby Ruby.parse_method_parameters用法及代码示例
- Ruby RFC2396_Parser.new用法及代码示例
- Ruby Regexp to_s()用法及代码示例
- Ruby Regexp.eql?用法及代码示例
- Ruby Row.delete用法及代码示例
- Ruby Rational to_i()用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Ripper类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。