Class: Depager::ActionExtension
Instance Attribute Summary
Attributes inherited from Extension
#d_parser, #g_parser
Instance Method Summary
collapse
Methods inherited from Extension
#decorator_name, #extension_registered
#expand_inline_code, #generate_action_decorator_code, #generate_decorator_code, #parse_block
#error_exit, #error_message, #expanded_code_delimiter, #file, #full_target_name, #input_path, #inspect, #target_name, #target_namespace, #warning
Instance Method Details
#init_extension ⇒ Object
2
3
4
5
|
# File 'lib/depager/plugins/action.rb', line 2
def init_extension
@action_code = ""
@on_reduce = []
end
|
#modify_action_code(code) ⇒ Object
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/depager/plugins/action.rb', line 37
def modify_action_code(code)
let_code = " # empty rule\n"
unless g_parser.rhs_names.empty?
vars = g_parser.rhs_names.map do |i|
/[a-zA-Z][a-zA-Z0-9_]*/.match?(i) ? "_#{i}" : "_"
end
let_code = " #{vars.join(', ')}, = *val\n"
end
let_code << code
end
|
#post_rhs ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/depager/plugins/action.rb', line 23
def post_rhs
return unless /\s*\{/.match?(g_parser.line)
@original_line = g_parser.original_line
@line = g_parser.line
lineno = g_parser.file.lineno
code = modify_action_code(parse_block)
n = g_parser.rules.size - 1
@action_code <<
expand_inline_code(code, lineno, wrap: "def _act_#{n} val", delta: 1)
g_parser.update_context @line
@on_reduce[n] = ":_act_#{n}"
end
|
#pre_rule_list ⇒ Object
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/depager/plugins/action.rb', line 12
def pre_rule_list
return unless /^%ACTION\{\s*$/.match?(g_parser.original_line)
while (line = file.gets)
break if /^%\}\s*$/.match?(line)
@action_code << line
end
g_parser.update_context ""
end
|
#term_extension ⇒ Object
7
8
9
10
|
# File 'lib/depager/plugins/action.rb', line 7
def term_extension
g_parser.outer_code <<
generate_action_decorator_code(@on_reduce, @action_code)
end
|