Class: CodeMiner::Parser
- Inherits:
-
Ripper
- Object
- Ripper
- CodeMiner::Parser
show all
- Includes:
- ArgumentProcessor, ArrayProcessor, AssignmentProcessor, BinaryProcessor, CallProcessor, ClassProcessor, CommandProcessor, ConditionProcessor, DefaultProcessor, HashProcessor, LoopProcessor, MethodProcessor, ParamsProcessor, RangeProcessor, RegexpProcessor, ReturnProcessor, StringProcessor, SymbolProcessor, TokenProcessor, VariableProcessor
- Defined in:
- lib/codeminer/parser.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#compile_error(msg) ⇒ Object
-
#initialize(src, *args) ⇒ Parser
constructor
A new instance of Parser.
-
#on_alias(left, right) ⇒ Object
-
#on_begin(body) ⇒ Object
-
#on_bodystmt(body, rescue_exp, else_exp, ensure_exp) ⇒ Object
-
#on_break(args) ⇒ Object
-
#on_defined(body) ⇒ Object
-
#on_ensure(body) ⇒ Object
-
#on_int ⇒ Object
-
#on_magic_comment(key, value) ⇒ Object
-
#on_next(args) ⇒ Object
-
#on_operator_ambiguous(value, msg) ⇒ Object
-
#on_program(body) ⇒ Object
-
#on_redo ⇒ Object
-
#on_rescue(constants, assign, body, d) ⇒ Object
-
#on_retry ⇒ Object
-
#on_stmts_add(body, statement) ⇒ Object
-
#on_stmts_new ⇒ Object
-
#on_super(body) ⇒ Object
-
#on_unary(value, receiver) ⇒ Object
-
#on_undef(symbols) ⇒ Object
-
#on_void_stmt ⇒ Object
-
#on_yield(args) ⇒ Object
-
#on_yield0 ⇒ Object
-
#on_zsuper ⇒ Object
#on_assign, #on_massign, #on_opassign
#on_aref, #on_aref_field, #on_call, #on_fcall, #on_vcall
#on_class, #on_module, #on_sclass
#on_arg_paren, #on_blockarg, #on_brace_block, #on_def, #on_defs, #on_do_block, #on_lambda, #on_method_add_arg, #on_method_add_block, #on_tlambda
#on_regexp_add, #on_regexp_beg, #on_regexp_literal, #on_regexp_new
#on_kw, #on_lbrace, #on_lbracket, #on_lparen, tokens
#on_embexpr_beg, #on_heredoc_beg, #on_heredoc_end, #on_string_add, #on_string_concat, #on_string_content, #on_string_embexpr, #on_string_literal, #on_tstring_beg, #on_tstring_content, #on_tstring_end, #on_xstring_add, #on_xstring_literal, #on_xstring_new
#on_case, #on_else, #on_elsif, #on_if, #on_if_mod, #on_ifop, #on_unless, #on_unless_mod, #on_when
#on_binary
#on_return, #on_return0
#on_block_var, #on_mlhs_add, #on_mlhs_new, #on_mlhs_paren, #on_mrhs_add, #on_mrhs_add_star, #on_mrhs_new, #on_mrhs_new_from_args, #on_params, #on_paren, #on_rest_param
#on_args_add, #on_args_add_block, #on_args_add_star, #on_args_new
#on_assoc_new, #on_assoclist_from_args, #on_bare_assoc_hash, #on_hash, #on_label
#on_dyna_symbol, #on_symbeg, #on_symbol, #on_symbol_literal
#on_backref, #on_const_path_ref, #on_cvar, #on_field, #on_gvar, #on_ivar, #on_top_const_ref, #on_var_ref
#on_array, #on_qsymbols_add, #on_qsymbols_beg, #on_qsymbols_new, #on_qwords_add, #on_qwords_beg, #on_qwords_new, #on_symbols_add, #on_symbols_beg, #on_symbols_new, #on_word_add, #on_word_new, #on_words_add, #on_words_beg, #on_words_new
#on_command, #on_command_call
#on_for, #on_until, #on_until_mod, #on_while, #on_while_mod
#on_dot2, #on_dot3
Constructor Details
#initialize(src, *args) ⇒ Parser
Returns a new instance of Parser.
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/codeminer/parser.rb', line 39
def initialize(src, *args)
@src = src
@keywords = []
@begin_regex = []
@embexpr = []
@string_begin = []
@string_end = []
@symbol_begin = []
@string_content = []
@parens_begin = []
@qwords = []
@qsymbols = []
@lambda = []
@symbols = []
@words = []
@processors = []
@lbrace = []
@formatters = {}
super
end
|
Instance Attribute Details
Returns the value of attribute formatters.
37
38
39
|
# File 'lib/codeminer/parser.rb', line 37
def formatters
@formatters
end
|
#processors ⇒ Object
Returns the value of attribute processors.
37
38
39
|
# File 'lib/codeminer/parser.rb', line 37
def processors
@processors
end
|
Class Method Details
.process(rb, processors) ⇒ Object
60
61
62
63
64
65
|
# File 'lib/codeminer/parser.rb', line 60
def self.process(rb, processors)
parser = new(rb).extend(ExpressionProcessor)
parser.processors = processors
parser.parse
processors
end
|
.sexp(rb, formatters = {}) ⇒ Object
67
68
69
70
71
|
# File 'lib/codeminer/parser.rb', line 67
def self.sexp(rb, formatters={})
parser = new(rb).extend(SexpProcessor)
parser.formatters = formatters
parser.parse
end
|
Instance Method Details
#compile_error(msg) ⇒ Object
173
174
175
|
# File 'lib/codeminer/parser.rb', line 173
def compile_error(msg)
raise CodeMiner::ParseError, msg
end
|
#on_alias(left, right) ⇒ Object
99
100
101
|
# File 'lib/codeminer/parser.rb', line 99
def on_alias(left, right)
AliasExpression.new(left, right, (pop_keyword('alias')))
end
|
#on_begin(body) ⇒ Object
128
129
130
|
# File 'lib/codeminer/parser.rb', line 128
def on_begin(body)
BeginExpression.new(body, (pop_keyword('begin')))
end
|
#on_bodystmt(body, rescue_exp, else_exp, ensure_exp) ⇒ Object
143
144
145
|
# File 'lib/codeminer/parser.rb', line 143
def on_bodystmt(body, rescue_exp, else_exp, ensure_exp)
BodystmtExpression.new(body, rescue_exp, else_exp, ensure_exp, src: (body, body))
end
|
#on_break(args) ⇒ Object
73
74
75
|
# File 'lib/codeminer/parser.rb', line 73
def on_break(args)
BreakExpression.new(args, (pop_keyword('break')))
end
|
#on_defined(body) ⇒ Object
156
157
158
|
# File 'lib/codeminer/parser.rb', line 156
def on_defined(body)
DefinedExpression.new(body, (pop_keyword('defined?'),body))
end
|
#on_ensure(body) ⇒ Object
139
140
141
|
# File 'lib/codeminer/parser.rb', line 139
def on_ensure(body)
EnsureExpression.new(body, (pop_keyword('ensure'), body))
end
|
#on_int ⇒ Object
115
116
117
118
|
# File 'lib/codeminer/parser.rb', line 115
def on_int(*)
token = super
IntExpression.new(token, (token))
end
|
169
170
171
|
# File 'lib/codeminer/parser.rb', line 169
def (key, value)
.new(key, value, (lineno(), column()))
end
|
#on_next(args) ⇒ Object
77
78
79
|
# File 'lib/codeminer/parser.rb', line 77
def on_next(args)
NextExpression.new(args, (pop_keyword('next')))
end
|
#on_operator_ambiguous(value, msg) ⇒ Object
164
165
166
167
|
# File 'lib/codeminer/parser.rb', line 164
def on_operator_ambiguous(value, msg)
token = Token.new(:op, value.to_s, (value))
AmbiguousOperatorExpression.new(token, msg, (token))
end
|
#on_program(body) ⇒ Object
160
161
162
|
# File 'lib/codeminer/parser.rb', line 160
def on_program(body)
RootExpression.new(body, @src)
end
|
#on_redo ⇒ Object
81
82
83
|
# File 'lib/codeminer/parser.rb', line 81
def on_redo
RedoExpression.new((pop_keyword('redo')))
end
|
#on_rescue(constants, assign, body, d) ⇒ Object
132
133
134
135
136
137
|
# File 'lib/codeminer/parser.rb', line 132
def on_rescue(constants, assign, body, d)
constants ||= []
rescue_body = RescueBodyExpression.wrap(body)
src = (pop_keyword('rescue'), rescue_body)
RescueExpression.new(constants.each.to_a, assign, rescue_body, d, src)
end
|
#on_retry ⇒ Object
85
86
87
|
# File 'lib/codeminer/parser.rb', line 85
def on_retry
RetryExpression.new((pop_keyword('retry')))
end
|
#on_stmts_add(body, statement) ⇒ Object
151
152
153
154
|
# File 'lib/codeminer/parser.rb', line 151
def on_stmts_add(body, statement)
assert body.kind_of?(BodyExpression), "Expected body #{body} to be type of BodyExpression"
body.add(statement)
end
|
#on_stmts_new ⇒ Object
147
148
149
|
# File 'lib/codeminer/parser.rb', line 147
def on_stmts_new
BodyExpression.new((lineno(), column()))
end
|
#on_super(body) ⇒ Object
94
95
96
97
|
# File 'lib/codeminer/parser.rb', line 94
def on_super(body)
token = pop_keyword('super')
SuperExpression.new(body, (*[token, body].compact))
end
|
#on_unary(value, receiver) ⇒ Object
120
121
122
|
# File 'lib/codeminer/parser.rb', line 120
def on_unary(value, receiver)
UnaryExpression.new(value.to_s.chomp('@'), receiver, (receiver.line, receiver.column - value.length - unary_offset(value), receiver.end_line, receiver.end_column))
end
|
#on_undef(symbols) ⇒ Object
111
112
113
|
# File 'lib/codeminer/parser.rb', line 111
def on_undef(symbols)
UndefExpression.new(symbols, (pop_keyword('undef')))
end
|
#on_void_stmt ⇒ Object
124
125
126
|
# File 'lib/codeminer/parser.rb', line 124
def on_void_stmt
VoidExpression.new((lineno(), column()))
end
|
#on_yield(args) ⇒ Object
103
104
105
|
# File 'lib/codeminer/parser.rb', line 103
def on_yield(args)
YieldExpression.new(args, (pop_keyword('yield')))
end
|
#on_yield0 ⇒ Object
107
108
109
|
# File 'lib/codeminer/parser.rb', line 107
def on_yield0
YieldExpression.new(nil, (pop_keyword('yield')))
end
|
#on_zsuper ⇒ Object
89
90
91
92
|
# File 'lib/codeminer/parser.rb', line 89
def on_zsuper
token = pop_keyword('super')
SuperExpression.new(nil, (token))
end
|