lex(src, filename = '-', lineno = 1) -> [[Integer, Integer], Symbol, String, Ripper::Lexer::State]
[permalink][rdoc][edit] [added by ripper/lexer]-
Ruby プログラム str をトークンに分割し、そのリストを返します。ただし Ripper.tokenize と違い、トークンの種類と位置情報も付属します。
- [PARAM] src:
- Ruby プログラムを文字列か IO オブジェクトで指定します。
- [PARAM] filename:
- src のファイル名を文字列で指定します。省略すると "-" になります。
- [PARAM] lineno:
- src の開始行番号を指定します。省略すると 1 になります。
require 'ripper' pp Ripper.lex("def m(a) nil end") # => [[[1, 0], :on_kw, "def", EXPR_FNAME], # [[1, 3], :on_sp, " ", EXPR_FNAME], # [[1, 4], :on_ident, "m", EXPR_ENDFN], # [[1, 5], :on_lparen, "(", EXPR_BEG|EXPR_LABEL], # [[1, 6], :on_ident, "a", EXPR_ARG], # [[1, 7], :on_rparen, ")", EXPR_ENDFN], # [[1, 8], :on_sp, " ", EXPR_BEG], # [[1, 9], :on_kw, "nil", EXPR_END], # [[1, 12], :on_sp, " ", EXPR_END], # [[1, 13], :on_kw, "end", EXPR_END]]
Ripper.lex は分割したトークンを詳しい情報とともに返します。返り値の配列の要素は 4 要素の配列 (概念的にはタプル) です。その内訳を以下に示します。
- 位置情報 (Integer,Integer)
-
トークンが置かれている行 (1-origin) と桁 (0-origin) の 2 要素の配列です。
- 種類 (Symbol)
-
トークンの種類が「:on_XXX」の形式のシンボルで渡されます。
- トークン (String)
-
トークン文字列です。
- ステート (Ripper::Lexer::State)
-
トークンの状態を表す Ripper::Lexer::State のインスタンスです。