treetop 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +3 -0
- data/Rakefile +35 -0
- data/bin/tt +25 -0
- data/lib/treetop.rb +10 -6
- data/lib/treetop/compiler.rb +7 -0
- data/lib/treetop/compiler/grammar_compiler.rb +21 -0
- data/lib/treetop/compiler/lexical_address_space.rb +17 -0
- data/lib/treetop/compiler/load_grammar.rb +7 -0
- data/lib/treetop/compiler/metagrammar.rb +2441 -0
- data/lib/treetop/compiler/metagrammar.treetop +384 -0
- data/lib/treetop/compiler/node_classes.rb +18 -0
- data/lib/treetop/compiler/node_classes/anything_symbol.rb +10 -0
- data/lib/treetop/compiler/node_classes/atomic_expression.rb +9 -0
- data/lib/treetop/compiler/node_classes/character_class.rb +10 -0
- data/lib/treetop/compiler/node_classes/choice.rb +31 -0
- data/lib/treetop/compiler/node_classes/declaration_sequence.rb +24 -0
- data/lib/treetop/compiler/node_classes/grammar.rb +28 -0
- data/lib/treetop/compiler/node_classes/inline_module.rb +27 -0
- data/lib/treetop/compiler/node_classes/nonterminal.rb +11 -0
- data/lib/treetop/compiler/node_classes/optional.rb +19 -0
- data/lib/treetop/compiler/node_classes/parenthesized_expression.rb +9 -0
- data/lib/treetop/compiler/node_classes/parsing_expression.rb +132 -0
- data/lib/treetop/compiler/node_classes/parsing_rule.rb +55 -0
- data/lib/treetop/compiler/node_classes/predicate.rb +45 -0
- data/lib/treetop/compiler/node_classes/repetition.rb +56 -0
- data/lib/treetop/compiler/node_classes/sequence.rb +64 -0
- data/lib/treetop/compiler/node_classes/terminal.rb +10 -0
- data/lib/treetop/compiler/node_classes/treetop_file.rb +9 -0
- data/lib/treetop/compiler/ruby_builder.rb +109 -0
- data/lib/treetop/ruby_extensions.rb +2 -0
- data/lib/treetop/ruby_extensions/string.rb +19 -0
- data/lib/treetop/runtime.rb +9 -0
- data/lib/treetop/runtime/compiled_parser.rb +66 -0
- data/lib/treetop/runtime/node_cache.rb +27 -0
- data/lib/treetop/runtime/parse_cache.rb +19 -0
- data/lib/treetop/runtime/parse_failure.rb +32 -0
- data/lib/treetop/runtime/parse_result.rb +30 -0
- data/lib/treetop/runtime/syntax_node.rb +53 -0
- data/lib/treetop/runtime/terminal_parse_failure.rb +33 -0
- data/lib/treetop/runtime/terminal_syntax_node.rb +12 -0
- data/test/compilation_target/target.rb +143 -0
- data/test/compilation_target/target.treetop +15 -0
- data/test/compilation_target/target_test.rb +56 -0
- data/test/compiler/and_predicate_test.rb +33 -0
- data/test/compiler/anything_symbol_test.rb +24 -0
- data/test/compiler/character_class_test.rb +45 -0
- data/test/compiler/choice_test.rb +49 -0
- data/test/compiler/circular_compilation_test.rb +20 -0
- data/test/compiler/failure_propagation_functional_test.rb +20 -0
- data/test/compiler/grammar_compiler_test.rb +58 -0
- data/test/compiler/grammar_test.rb +33 -0
- data/test/compiler/nonterminal_symbol_test.rb +15 -0
- data/test/compiler/not_predicate_test.rb +35 -0
- data/test/compiler/one_or_more_test.rb +30 -0
- data/test/compiler/optional_test.rb +32 -0
- data/test/compiler/parsing_rule_test.rb +30 -0
- data/test/compiler/sequence_test.rb +68 -0
- data/test/compiler/terminal_symbol_test.rb +35 -0
- data/test/compiler/test_grammar.treetop +7 -0
- data/test/compiler/zero_or_more_test.rb +51 -0
- data/test/composition/a.treetop +11 -0
- data/test/composition/b.treetop +11 -0
- data/test/composition/c.treetop +10 -0
- data/test/composition/d.treetop +10 -0
- data/test/composition/grammar_composition_test.rb +23 -0
- data/test/parser/syntax_node_test.rb +53 -0
- data/test/parser/terminal_parse_failure_test.rb +22 -0
- data/test/ruby_extensions/string_test.rb +33 -0
- data/test/screw/Rakefile +16 -0
- data/test/screw/unit.rb +37 -0
- data/test/screw/unit/assertion_failed_error.rb +14 -0
- data/test/screw/unit/assertions.rb +615 -0
- data/test/screw/unit/auto_runner.rb +227 -0
- data/test/screw/unit/collector.rb +45 -0
- data/test/screw/unit/collector/dir.rb +107 -0
- data/test/screw/unit/collector/objectspace.rb +28 -0
- data/test/screw/unit/error.rb +48 -0
- data/test/screw/unit/failure.rb +45 -0
- data/test/screw/unit/sugar.rb +25 -0
- data/test/screw/unit/test_case.rb +176 -0
- data/test/screw/unit/test_result.rb +73 -0
- data/test/screw/unit/test_suite.rb +70 -0
- data/test/screw/unit/ui.rb +4 -0
- data/test/screw/unit/ui/console/test_runner.rb +118 -0
- data/test/screw/unit/ui/fox/test_runner.rb +268 -0
- data/test/screw/unit/ui/gtk/test_runner.rb +416 -0
- data/test/screw/unit/ui/gtk2/testrunner.rb +465 -0
- data/test/screw/unit/ui/test_runner_mediator.rb +58 -0
- data/test/screw/unit/ui/test_runner_utilities.rb +46 -0
- data/test/screw/unit/ui/tk/test_runner.rb +260 -0
- data/test/screw/unit/util.rb +4 -0
- data/test/screw/unit/util/backtrace_filter.rb +40 -0
- data/test/screw/unit/util/observable.rb +82 -0
- data/test/screw/unit/util/proc_wrapper.rb +48 -0
- data/test/test_helper.rb +89 -0
- metadata +127 -69
- data/lib/treetop/api.rb +0 -3
- data/lib/treetop/api/load_grammar.rb +0 -16
- data/lib/treetop/api/malformed_grammar_exception.rb +0 -9
- data/lib/treetop/grammar.rb +0 -7
- data/lib/treetop/grammar/grammar.rb +0 -48
- data/lib/treetop/grammar/grammar_builder.rb +0 -35
- data/lib/treetop/grammar/parsing_expression_builder.rb +0 -5
- data/lib/treetop/grammar/parsing_expression_builder_helper.rb +0 -121
- data/lib/treetop/grammar/parsing_expressions.rb +0 -18
- data/lib/treetop/grammar/parsing_expressions/and_predicate.rb +0 -17
- data/lib/treetop/grammar/parsing_expressions/anything_symbol.rb +0 -20
- data/lib/treetop/grammar/parsing_expressions/character_class.rb +0 -24
- data/lib/treetop/grammar/parsing_expressions/node_instantiating_parsing_expression.rb +0 -14
- data/lib/treetop/grammar/parsing_expressions/node_propagating_parsing_expression.rb +0 -4
- data/lib/treetop/grammar/parsing_expressions/nonterminal_symbol.rb +0 -42
- data/lib/treetop/grammar/parsing_expressions/not_predicate.rb +0 -18
- data/lib/treetop/grammar/parsing_expressions/one_or_more.rb +0 -12
- data/lib/treetop/grammar/parsing_expressions/optional.rb +0 -14
- data/lib/treetop/grammar/parsing_expressions/ordered_choice.rb +0 -27
- data/lib/treetop/grammar/parsing_expressions/parsing_expression.rb +0 -36
- data/lib/treetop/grammar/parsing_expressions/predicate.rb +0 -25
- data/lib/treetop/grammar/parsing_expressions/repeating_parsing_expression.rb +0 -29
- data/lib/treetop/grammar/parsing_expressions/sequence.rb +0 -41
- data/lib/treetop/grammar/parsing_expressions/terminal_parsing_expression.rb +0 -11
- data/lib/treetop/grammar/parsing_expressions/terminal_symbol.rb +0 -31
- data/lib/treetop/grammar/parsing_expressions/zero_or_more.rb +0 -11
- data/lib/treetop/grammar/parsing_rule.rb +0 -10
- data/lib/treetop/metagrammar.rb +0 -2
- data/lib/treetop/metagrammar/metagrammar.rb +0 -14
- data/lib/treetop/metagrammar/metagrammar.treetop +0 -320
- data/lib/treetop/parser.rb +0 -11
- data/lib/treetop/parser/node_cache.rb +0 -25
- data/lib/treetop/parser/parse_cache.rb +0 -17
- data/lib/treetop/parser/parse_failure.rb +0 -22
- data/lib/treetop/parser/parse_result.rb +0 -26
- data/lib/treetop/parser/parser.rb +0 -24
- data/lib/treetop/parser/sequence_syntax_node.rb +0 -14
- data/lib/treetop/parser/syntax_node.rb +0 -31
- data/lib/treetop/parser/terminal_parse_failure.rb +0 -18
- data/lib/treetop/parser/terminal_syntax_node.rb +0 -7
- data/lib/treetop/protometagrammar.rb +0 -16
- data/lib/treetop/protometagrammar/anything_symbol_expression_builder.rb +0 -13
- data/lib/treetop/protometagrammar/block_expression_builder.rb +0 -17
- data/lib/treetop/protometagrammar/character_class_expression_builder.rb +0 -25
- data/lib/treetop/protometagrammar/grammar_expression_builder.rb +0 -38
- data/lib/treetop/protometagrammar/nonterminal_symbol_expression_builder.rb +0 -45
- data/lib/treetop/protometagrammar/ordered_choice_expression_builder.rb +0 -21
- data/lib/treetop/protometagrammar/parsing_rule_expression_builder.rb +0 -23
- data/lib/treetop/protometagrammar/parsing_rule_sequence_expression_builder.rb +0 -14
- data/lib/treetop/protometagrammar/prefix_expression_builder.rb +0 -25
- data/lib/treetop/protometagrammar/primary_expression_builder.rb +0 -71
- data/lib/treetop/protometagrammar/protometagrammar.rb +0 -25
- data/lib/treetop/protometagrammar/sequence_expression_builder.rb +0 -37
- data/lib/treetop/protometagrammar/suffix_expression_builder.rb +0 -33
- data/lib/treetop/protometagrammar/terminal_symbol_expression_builder.rb +0 -52
- data/lib/treetop/protometagrammar/trailing_block_expression_builder.rb +0 -30
- data/lib/treetop/ruby_extension.rb +0 -11
@@ -1,29 +0,0 @@
|
|
1
|
-
module Treetop
|
2
|
-
class RepeatingParsingExpression < Sequence
|
3
|
-
attr_reader :repeated_expression
|
4
|
-
|
5
|
-
def initialize(repeated_expression)
|
6
|
-
super
|
7
|
-
@repeated_expression = repeated_expression
|
8
|
-
end
|
9
|
-
|
10
|
-
def parse_at(input, start_index, parser)
|
11
|
-
results = []
|
12
|
-
next_index = start_index
|
13
|
-
|
14
|
-
while true
|
15
|
-
result = repeated_expression.parse_at(input, next_index, parser)
|
16
|
-
break if result.failure?
|
17
|
-
results << result
|
18
|
-
next_index = result.interval.end
|
19
|
-
end
|
20
|
-
|
21
|
-
if enough? results
|
22
|
-
interval = start_index...next_index
|
23
|
-
return success(input, interval, results, results + [result])
|
24
|
-
else
|
25
|
-
return failure_at(start_index, results + [result])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Treetop
|
2
|
-
class Sequence < NodeInstantiatingParsingExpression
|
3
|
-
attr_reader :elements, :node_class
|
4
|
-
|
5
|
-
def initialize(elements)
|
6
|
-
super()
|
7
|
-
@elements = elements
|
8
|
-
end
|
9
|
-
|
10
|
-
def node_superclass
|
11
|
-
SequenceSyntaxNode
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
parenthesize((@elements.collect {|elt| elt.to_s}).join(" "))
|
16
|
-
end
|
17
|
-
|
18
|
-
def parse_at(input, start_index, parser)
|
19
|
-
results = []
|
20
|
-
next_index = start_index
|
21
|
-
|
22
|
-
for elt in elements
|
23
|
-
result = elt.parse_at(input, next_index, parser)
|
24
|
-
results << result
|
25
|
-
return failure_at(start_index, results) if result.failure?
|
26
|
-
next_index = result.interval.end
|
27
|
-
end
|
28
|
-
|
29
|
-
success(input, start_index...next_index, results, results)
|
30
|
-
end
|
31
|
-
|
32
|
-
protected
|
33
|
-
|
34
|
-
def success(input, interval, results, encountered_child_results)
|
35
|
-
return node_class.new(input,
|
36
|
-
interval,
|
37
|
-
results,
|
38
|
-
collect_nested_failures(encountered_child_results))
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Treetop
|
2
|
-
class TerminalSymbol < TerminalParsingExpression
|
3
|
-
attr_accessor :prefix
|
4
|
-
|
5
|
-
def self.epsilon
|
6
|
-
@epsilon ||= self.new("")
|
7
|
-
end
|
8
|
-
|
9
|
-
def initialize(prefix)
|
10
|
-
super()
|
11
|
-
self.prefix = prefix
|
12
|
-
end
|
13
|
-
|
14
|
-
def epsilon?
|
15
|
-
prefix.blank?
|
16
|
-
end
|
17
|
-
|
18
|
-
def to_s
|
19
|
-
"\"#{prefix}\""
|
20
|
-
end
|
21
|
-
|
22
|
-
def parse_at(input, start_index, parser)
|
23
|
-
|
24
|
-
if input.index(prefix, start_index) == start_index
|
25
|
-
return node_class.new(input, start_index...(prefix.length + start_index))
|
26
|
-
else
|
27
|
-
TerminalParseFailure.new(start_index, self)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/treetop/metagrammar.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
module Treetop
|
2
|
-
metagrammar_parser = Protometagrammar.new.new_parser
|
3
|
-
|
4
|
-
File.open(File.expand_path('metagrammar.treetop', File.dirname(__FILE__)), 'r') do |file|
|
5
|
-
metagrammar_text = file.read
|
6
|
-
result = metagrammar_parser.parse(metagrammar_text)
|
7
|
-
|
8
|
-
unless result.success?
|
9
|
-
raise 'unable to parse metagrammar'
|
10
|
-
end
|
11
|
-
|
12
|
-
Metagrammar = result.value
|
13
|
-
end
|
14
|
-
end
|
@@ -1,320 +0,0 @@
|
|
1
|
-
grammar Metagrammar
|
2
|
-
rule grammar
|
3
|
-
('grammar' space grammar_name? parsing_rule_sequence space? 'end') {
|
4
|
-
def value
|
5
|
-
grammar = Grammar.new(grammar_name)
|
6
|
-
parsing_rules(grammar).each do |parsing_rule|
|
7
|
-
grammar.add_parsing_rule(parsing_rule)
|
8
|
-
end
|
9
|
-
return grammar
|
10
|
-
end
|
11
|
-
|
12
|
-
def grammar_name
|
13
|
-
if elements[2].epsilon?
|
14
|
-
nil
|
15
|
-
else
|
16
|
-
elements[2].value
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def parsing_rules(grammar)
|
21
|
-
elements[3].value(grammar)
|
22
|
-
end
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
rule grammar_name
|
27
|
-
([A-Z] alphanumeric_char*) space {
|
28
|
-
def value
|
29
|
-
elements[0].text_value.to_sym
|
30
|
-
end
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
34
|
-
rule parsing_rule_sequence
|
35
|
-
(parsing_rule (space parsing_rule)*) {
|
36
|
-
def value(grammar)
|
37
|
-
[head.value(grammar)] + tail_values(grammar)
|
38
|
-
end
|
39
|
-
|
40
|
-
def head
|
41
|
-
elements[0]
|
42
|
-
end
|
43
|
-
|
44
|
-
def tail_elements
|
45
|
-
elements[1].elements
|
46
|
-
end
|
47
|
-
|
48
|
-
def tail_values(grammar)
|
49
|
-
tail_elements.collect {|tail_element| tail_element.elements[1].value(grammar)}
|
50
|
-
end
|
51
|
-
}
|
52
|
-
/
|
53
|
-
'' {
|
54
|
-
def value(grammar)
|
55
|
-
[]
|
56
|
-
end
|
57
|
-
}
|
58
|
-
end
|
59
|
-
|
60
|
-
rule parsing_rule
|
61
|
-
('rule' space nonterminal_symbol space ordered_choice space 'end') {
|
62
|
-
def value(grammar)
|
63
|
-
ParsingRule.new(nonterminal_symbol.value(grammar),
|
64
|
-
parsing_expression.value(grammar))
|
65
|
-
end
|
66
|
-
|
67
|
-
def nonterminal_symbol
|
68
|
-
elements[2]
|
69
|
-
end
|
70
|
-
|
71
|
-
def parsing_expression
|
72
|
-
elements[4]
|
73
|
-
end
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
rule ordered_choice
|
78
|
-
(sequence (space? '/' space? sequence)+) {
|
79
|
-
def value(grammar)
|
80
|
-
OrderedChoice.new(alternatives(grammar))
|
81
|
-
end
|
82
|
-
|
83
|
-
def alternatives(grammar)
|
84
|
-
[head.value(grammar)] + tail_values(grammar)
|
85
|
-
end
|
86
|
-
|
87
|
-
def head
|
88
|
-
elements[0]
|
89
|
-
end
|
90
|
-
|
91
|
-
def tail_elements
|
92
|
-
elements[1].elements
|
93
|
-
end
|
94
|
-
|
95
|
-
def tail_values(grammar)
|
96
|
-
tail_elements.map {|tail_element| tail_element.elements[3].value(grammar)}
|
97
|
-
end
|
98
|
-
}
|
99
|
-
/
|
100
|
-
sequence
|
101
|
-
end
|
102
|
-
|
103
|
-
rule sequence
|
104
|
-
(primary (space primary)+ trailing_block) {
|
105
|
-
def value(grammar)
|
106
|
-
trailing_block.value(Sequence.new(sequence_elements(grammar)))
|
107
|
-
end
|
108
|
-
|
109
|
-
def trailing_block
|
110
|
-
elements[2]
|
111
|
-
end
|
112
|
-
|
113
|
-
def sequence_elements(grammar)
|
114
|
-
[head.value(grammar)] + tail_values(grammar)
|
115
|
-
end
|
116
|
-
|
117
|
-
def head
|
118
|
-
elements[0]
|
119
|
-
end
|
120
|
-
|
121
|
-
def tail_elements
|
122
|
-
elements[1].elements
|
123
|
-
end
|
124
|
-
|
125
|
-
def tail_values(grammar)
|
126
|
-
tail_elements.map {|tail_element| tail_element.elements[1].value(grammar)}
|
127
|
-
end
|
128
|
-
}
|
129
|
-
/
|
130
|
-
primary
|
131
|
-
end
|
132
|
-
|
133
|
-
rule parenthesized_ordered_choice
|
134
|
-
'(' space? ordered_choice space? ')' trailing_block {
|
135
|
-
def value(grammar)
|
136
|
-
nested_value = nested_expression.value(grammar)
|
137
|
-
unless trailing_block.epsilon? || nested_value.kind_of?(NodeInstantiatingParsingExpression)
|
138
|
-
raise "Blocks can only follow node-instantiating parsing expressions such as sequences and terminal symbols."
|
139
|
-
end
|
140
|
-
return trailing_block.value(nested_expression.value(grammar))
|
141
|
-
end
|
142
|
-
|
143
|
-
def nested_expression
|
144
|
-
elements[2]
|
145
|
-
end
|
146
|
-
|
147
|
-
def trailing_block
|
148
|
-
elements[5]
|
149
|
-
end
|
150
|
-
}
|
151
|
-
end
|
152
|
-
|
153
|
-
rule primary
|
154
|
-
(prefix? ((parenthesized_ordered_choice / terminal_symbol / nonterminal_symbol) suffix?)) {
|
155
|
-
def value(grammar)
|
156
|
-
value = primary_expression.value(grammar)
|
157
|
-
value = suffix.value(value) unless suffix.epsilon?
|
158
|
-
value = prefix.value(value) unless prefix.epsilon?
|
159
|
-
value
|
160
|
-
end
|
161
|
-
|
162
|
-
def prefix
|
163
|
-
elements[0]
|
164
|
-
end
|
165
|
-
|
166
|
-
def primary_expression
|
167
|
-
elements[1].elements[0]
|
168
|
-
end
|
169
|
-
|
170
|
-
def suffix
|
171
|
-
elements[1].elements[1]
|
172
|
-
end
|
173
|
-
}
|
174
|
-
end
|
175
|
-
|
176
|
-
rule prefix
|
177
|
-
'&' {
|
178
|
-
def value(parsing_expression)
|
179
|
-
parsing_expression.and_predicate
|
180
|
-
end
|
181
|
-
}
|
182
|
-
/
|
183
|
-
'!' {
|
184
|
-
def value(parsing_expression)
|
185
|
-
parsing_expression.not_predicate
|
186
|
-
end
|
187
|
-
}
|
188
|
-
end
|
189
|
-
|
190
|
-
rule suffix
|
191
|
-
'*' {
|
192
|
-
def value(parsing_expression)
|
193
|
-
parsing_expression.zero_or_more
|
194
|
-
end
|
195
|
-
}
|
196
|
-
/
|
197
|
-
'+' {
|
198
|
-
def value(parsing_expression)
|
199
|
-
parsing_expression.one_or_more
|
200
|
-
end
|
201
|
-
}
|
202
|
-
/
|
203
|
-
'?' {
|
204
|
-
def value(parsing_expression)
|
205
|
-
parsing_expression.optional
|
206
|
-
end
|
207
|
-
}
|
208
|
-
end
|
209
|
-
|
210
|
-
rule nonterminal_symbol
|
211
|
-
(!(keyword !alphanumeric_char) (alpha_char alphanumeric_char*)) {
|
212
|
-
def value(grammar)
|
213
|
-
grammar.nonterminal_symbol(name)
|
214
|
-
end
|
215
|
-
|
216
|
-
def name
|
217
|
-
elements[1].text_value.to_sym
|
218
|
-
end
|
219
|
-
}
|
220
|
-
end
|
221
|
-
|
222
|
-
rule alpha_char
|
223
|
-
[A-Za-z_]
|
224
|
-
end
|
225
|
-
|
226
|
-
rule alphanumeric_char
|
227
|
-
alpha_char / [0-9]
|
228
|
-
end
|
229
|
-
|
230
|
-
rule terminal_symbol
|
231
|
-
terminal_symbol_prefix trailing_block {
|
232
|
-
def value(grammar = nil)
|
233
|
-
trailing_block.value(terminal_symbol.value)
|
234
|
-
end
|
235
|
-
|
236
|
-
def terminal_symbol
|
237
|
-
elements[0]
|
238
|
-
end
|
239
|
-
|
240
|
-
def trailing_block
|
241
|
-
elements[1]
|
242
|
-
end
|
243
|
-
}
|
244
|
-
end
|
245
|
-
|
246
|
-
rule terminal_symbol_prefix
|
247
|
-
single_quoted_string / double_quoted_string / character_class / anything_symbol
|
248
|
-
end
|
249
|
-
|
250
|
-
rule double_quoted_string
|
251
|
-
('"' (!'"' ('\"' / .))* '"') {
|
252
|
-
def value
|
253
|
-
TerminalSymbol.new(elements[1].text_value)
|
254
|
-
end
|
255
|
-
}
|
256
|
-
end
|
257
|
-
|
258
|
-
rule single_quoted_string
|
259
|
-
("'" (!"'" ("\'" / .))* "'") {
|
260
|
-
def value
|
261
|
-
TerminalSymbol.new(elements[1].text_value)
|
262
|
-
end
|
263
|
-
}
|
264
|
-
end
|
265
|
-
|
266
|
-
rule trailing_block
|
267
|
-
space block {
|
268
|
-
def value(parsing_expression)
|
269
|
-
parsing_expression.node_class_eval(block.value)
|
270
|
-
return parsing_expression
|
271
|
-
end
|
272
|
-
|
273
|
-
def block
|
274
|
-
elements[1]
|
275
|
-
end
|
276
|
-
}
|
277
|
-
/
|
278
|
-
'' {
|
279
|
-
def value(parsing_expression)
|
280
|
-
parsing_expression
|
281
|
-
end
|
282
|
-
}
|
283
|
-
end
|
284
|
-
|
285
|
-
rule block
|
286
|
-
('{' (block / ![{}] .)* '}') {
|
287
|
-
def value
|
288
|
-
elements[1].text_value
|
289
|
-
end
|
290
|
-
}
|
291
|
-
end
|
292
|
-
|
293
|
-
rule character_class
|
294
|
-
('[' (!']' ('\]'/.))+ ']') {
|
295
|
-
def value(grammar = nil)
|
296
|
-
CharacterClass.new(characters)
|
297
|
-
end
|
298
|
-
|
299
|
-
def characters
|
300
|
-
elements[1].text_value
|
301
|
-
end
|
302
|
-
}
|
303
|
-
end
|
304
|
-
|
305
|
-
rule keyword
|
306
|
-
'rule' / 'end'
|
307
|
-
end
|
308
|
-
|
309
|
-
rule anything_symbol
|
310
|
-
'.' {
|
311
|
-
def value(grammar = nil)
|
312
|
-
AnythingSymbol.new
|
313
|
-
end
|
314
|
-
}
|
315
|
-
end
|
316
|
-
|
317
|
-
rule space
|
318
|
-
[ \t\n\r]+
|
319
|
-
end
|
320
|
-
end
|