模块 RDoc::Parser::RubyTools
用于编写解析器的方法集合
公共实例方法
add_token_listener(obj) 点击切换源代码
添加一个令牌监听器 obj
,但您可能应该使用 token_listener
# File rdoc/parser/ruby_tools.rb, line 10 def add_token_listener(obj) @token_listeners ||= [] @token_listeners << obj end
get_tk() 点击切换源代码
从扫描器中获取下一个令牌
# File rdoc/parser/ruby_tools.rb, line 18 def get_tk tk = nil if @tokens.empty? then if @scanner_point >= @scanner.size return nil else tk = @scanner[@scanner_point] @scanner_point += 1 @read.push tk[:text] end else @read.push @unget_read.shift tk = @tokens.shift end if tk == nil || :on___end__ == tk[:kind] tk = nil end return nil unless tk # inform any listeners of our shiny new token @token_listeners.each do |obj| obj.add_token(tk) end if @token_listeners tk end
get_tk_until(*tokens) 点击切换源代码
读取并返回所有令牌,直到遇到 tokens
中的一个。将匹配的令牌留在令牌列表中。
# File rdoc/parser/ruby_tools.rb, line 52 def get_tk_until(*tokens) read = [] loop do tk = get_tk case tk when *tokens then unget_tk tk break end read << tk end read end
get_tkread() 点击切换源代码
检索已读取令牌的字符串表示形式
# File rdoc/parser/ruby_tools.rb, line 73 def get_tkread read = @read.join("") @read = [] read end
peek_read() 点击切换源代码
与 get_tkread
等效的窥视操作
# File rdoc/parser/ruby_tools.rb, line 82 def peek_read @read.join('') end
peek_tk() 点击切换源代码
窥视下一个令牌,但不要将其从流中移除
# File rdoc/parser/ruby_tools.rb, line 89 def peek_tk unget_tk(tk = get_tk) tk end
remove_token_listener(obj) 点击切换源代码
移除令牌监听器 obj
# File rdoc/parser/ruby_tools.rb, line 97 def remove_token_listener(obj) @token_listeners.delete(obj) end
reset() 点击切换源代码
重置工具
# File rdoc/parser/ruby_tools.rb, line 104 def reset @read = [] @tokens = [] @unget_read = [] @nest = 0 @scanner_point = 0 end
skip_tkspace() 点击切换源代码
跳过包括换行符在内的空白令牌
# File rdoc/parser/ruby_tools.rb, line 115 def skip_tkspace tokens = [] while (tk = get_tk) and (:on_sp == tk[:kind] or :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]) do tokens.push(tk) end unget_tk(tk) tokens end
skip_tkspace_without_nl() 点击切换源代码
跳过不包括换行符的空白令牌
# File rdoc/parser/ruby_tools.rb, line 129 def skip_tkspace_without_nl tokens = [] while (tk = get_tk) and :on_sp == tk[:kind] do tokens.push(tk) end unget_tk(tk) tokens end
token_listener(obj) { || ... } 点击切换源代码
使 obj
监听令牌
# File rdoc/parser/ruby_tools.rb, line 143 def token_listener(obj) add_token_listener obj yield ensure remove_token_listener obj end
unget_tk(tk) 点击切换源代码
将 tk
返回到扫描器
# File rdoc/parser/ruby_tools.rb, line 153 def unget_tk(tk) @tokens.unshift tk @unget_read.unshift @read.pop # Remove this token from any listeners @token_listeners.each do |obj| obj.pop_token end if @token_listeners nil end