Class: Treetop::Compiler::ParsingExpression
Instance Attribute Summary collapse
#elements, #input, #interval, #parent
Instance Method Summary
collapse
#empty?, #extension_modules, #initialize, #inspect, #nonterminal?, #terminal?, #text_value
Instance Attribute Details
#address ⇒ Object
Returns the value of attribute address.
4
5
6
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 4
def address
@address
end
|
#builder ⇒ Object
Returns the value of attribute builder.
4
5
6
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 4
def builder
@builder
end
|
#parent_expression ⇒ Object
Returns the value of attribute parent_expression.
4
5
6
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 4
def parent_expression
@parent_expression
end
|
#subexpression_address ⇒ Object
Returns the value of attribute subexpression_address.
4
5
6
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 4
def subexpression_address
@subexpression_address
end
|
#var_symbols ⇒ Object
Returns the value of attribute var_symbols.
4
5
6
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 4
def var_symbols
@var_symbols
end
|
Instance Method Details
#accumulate_subexpression_result ⇒ Object
61
62
63
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 61
def accumulate_subexpression_result
builder.accumulate accumulator_var, subexpression_result_var
end
|
#accumulator_var ⇒ Object
41
42
43
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 41
def accumulator_var
var(:accumulator)
end
|
#assign_failure(start_index_var) ⇒ Object
89
90
91
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 89
def assign_failure(start_index_var)
assign_result("nil")
end
|
#assign_result(value_ruby) ⇒ Object
65
66
67
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 65
def assign_result(value_ruby)
builder.assign result_var, value_ruby
end
|
125
126
127
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 125
def (expression)
end
|
#compile(address, builder, parent_expression) ⇒ Object
6
7
8
9
10
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 6
def compile(address, builder, parent_expression)
@address = address
@builder = builder
@parent_expression = parent_expression
end
|
#declared_module_name ⇒ Object
16
17
18
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 16
def declared_module_name
parent_expression && parent_expression.node_class_name
end
|
129
130
131
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 129
def (expression)
end
|
#epsilon_node ⇒ Object
85
86
87
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 85
def epsilon_node
"instantiate_node(SyntaxNode,input, index...index)"
end
|
#extend_result(module_name) ⇒ Object
69
70
71
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 69
def extend_result(module_name)
builder.extend result_var, module_name
end
|
#extend_result_with_declared_module ⇒ Object
73
74
75
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 73
def extend_result_with_declared_module
extend_result declared_module_name if declared_module_name
end
|
#extend_result_with_inline_module ⇒ Object
77
78
79
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 77
def extend_result_with_inline_module
extend_result inline_module_name if inline_module_name
end
|
#init_value(var_symbol) ⇒ Object
117
118
119
120
121
122
123
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 117
def init_value(var_symbol)
case var_symbol
when :accumulator then '[]'
when :start_index then 'index'
else nil
end
end
|
#inline_module_name ⇒ Object
20
21
22
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 20
def inline_module_name
parent_expression && parent_expression.inline_module_name
end
|
#node_class_name ⇒ Object
12
13
14
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 12
def node_class_name
parent_expression && parent_expression.node_class_name || 'SyntaxNode'
end
|
#obtain_new_subexpression_address ⇒ Object
57
58
59
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 57
def obtain_new_subexpression_address
@subexpression_address = builder.next_address
end
|
#on_one_line(expression) ⇒ Object
133
134
135
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 133
def on_one_line(expression)
expression.text_value.tr("\n", ' ')
end
|
#optional_arg(arg) ⇒ Object
24
25
26
27
28
29
30
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 24
def optional_arg(arg)
if arg
", #{arg}"
else
''
end
end
|
#reset_index ⇒ Object
81
82
83
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 81
def reset_index
builder.assign '@index', start_index_var
end
|
#result_var ⇒ Object
37
38
39
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 37
def result_var
var(:result)
end
|
#start_index_var ⇒ Object
45
46
47
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 45
def start_index_var
var(:start_index)
end
|
#subexpression_result_var ⇒ Object
49
50
51
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 49
def subexpression_result_var
"r#{subexpression_address}"
end
|
#subexpression_success? ⇒ Boolean
53
54
55
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 53
def subexpression_success?
subexpression_result_var
end
|
#use_vars(*var_symbols) ⇒ Object
32
33
34
35
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 32
def use_vars(*var_symbols)
@var_symbols = var_symbols
builder << var_initialization
end
|
#var(var_symbol) ⇒ Object
108
109
110
111
112
113
114
115
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 108
def var(var_symbol)
case var_symbol
when :result then "r#{address}"
when :accumulator then "s#{address}"
when :start_index then "i#{address}"
else raise "Unknown var symbol #{var_symbol}."
end
end
|
#var_initialization ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/treetop/compiler/node_classes/parsing_expression.rb', line 93
def var_initialization
left, right = [], []
var_symbols.each do |symbol|
if init_value(symbol)
left << var(symbol)
right << init_value(symbol)
end
end
if left.empty?
""
else
left.join(', ') + ' = ' + right.join(', ')
end
end
|