fabulator-grammar 0.0.1 → 0.0.3

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.
Files changed (37) hide show
  1. data/History.txt +22 -0
  2. data/Rakefile +3 -1
  3. data/VERSION +1 -1
  4. data/features/grammar.feature +116 -12
  5. data/features/step_definitions/expression_steps.rb +2 -2
  6. data/features/step_definitions/grammar_steps.rb +46 -2
  7. data/features/step_definitions/xml_steps.rb +5 -16
  8. data/features/support/env.rb +1 -0
  9. data/lib/fabulator-grammar.rb +1 -0
  10. data/lib/fabulator/grammar.rb +12 -3
  11. data/lib/fabulator/grammar/actions.rb +17 -7
  12. data/lib/fabulator/grammar/actions/context.rb +18 -0
  13. data/lib/fabulator/grammar/actions/grammar.rb +76 -0
  14. data/lib/fabulator/grammar/actions/rule.rb +51 -0
  15. data/lib/fabulator/grammar/actions/token.rb +27 -0
  16. data/lib/fabulator/grammar/actions/when.rb +35 -0
  17. data/lib/fabulator/grammar/cursor.rb +118 -0
  18. data/lib/fabulator/grammar/expr/anchor.rb +28 -0
  19. data/lib/fabulator/grammar/expr/char_set.rb +67 -18
  20. data/lib/fabulator/grammar/expr/look_ahead.rb +44 -0
  21. data/lib/fabulator/grammar/expr/rule.rb +33 -28
  22. data/lib/fabulator/grammar/expr/rule_alternative.rb +45 -0
  23. data/lib/fabulator/grammar/expr/rule_mode.rb +16 -0
  24. data/lib/fabulator/grammar/expr/rule_ref.rb +15 -4
  25. data/lib/fabulator/grammar/expr/rule_sequence.rb +59 -0
  26. data/lib/fabulator/grammar/expr/sequence.rb +7 -1
  27. data/lib/fabulator/grammar/expr/set_skip.rb +16 -0
  28. data/lib/fabulator/grammar/expr/text.rb +8 -0
  29. data/lib/fabulator/grammar/expr/{rules.rb → token.rb} +12 -1
  30. data/lib/fabulator/grammar/expr/token_alternative.rb +42 -0
  31. data/lib/fabulator/grammar/rule_parser.rb +667 -0
  32. data/lib/fabulator/grammar/token_parser.rb +733 -0
  33. data/rules.racc +249 -0
  34. data/tokens.racc +257 -0
  35. metadata +29 -12
  36. data/lib/fabulator/grammar/parser.rb +0 -548
  37. data/regex.racc +0 -183
@@ -0,0 +1,45 @@
1
+ module Fabulator
2
+ module Grammar
3
+ module Expr
4
+ class RuleAlternative
5
+ def initialize
6
+ @sequences = [ ]
7
+ end
8
+
9
+ def add_sequence(s)
10
+ s = [ s ] unless s.is_a?(Array)
11
+ @sequences += s
12
+ end
13
+
14
+ def parse(source)
15
+ results = { }
16
+ @sequences.each do |sequence|
17
+ r = sequence.parse(source)
18
+ return nil if r.nil? # we fail
19
+ nom = (sequence.name rescue nil)
20
+ rr = { }
21
+ if nom.nil?
22
+ rr = r
23
+ elsif !r.nil?
24
+ if !(r.is_a?(Hash) || r.is_a?(Array)) || !r.empty?
25
+ rr[nom] = r
26
+ end
27
+ end
28
+ if rr.is_a?(Hash) && !rr.empty?
29
+ rr.each_pair do |k,v|
30
+ if results[k].nil?
31
+ results[k] = v
32
+ elsif results[k].is_a?(Array)
33
+ results[k] << v
34
+ else
35
+ results[k] = [ results[k], v ]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ results
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ module Fabulator
2
+ module Grammar
3
+ module Expr
4
+ class RuleMode
5
+ def initialize(m)
6
+ @mode = m
7
+ end
8
+
9
+ def parse(s)
10
+ s.mode = @mode
11
+ {}
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,12 +2,23 @@ module Fabulator::Grammar::Expr
2
2
  class RuleRef
3
3
  def initialize(qname)
4
4
  bits = qname.split(/:/,2)
5
- @ns_prefix = bits[0]
6
- @name = bits[1]
5
+ if bits.size > 1
6
+ @ns_prefix = bits[0]
7
+ @name = bits[1]
8
+ else
9
+ @name = qname
10
+ end
7
11
  end
8
12
 
9
- def to_regex
10
- %r{}
13
+ def name
14
+ @name
15
+ end
16
+
17
+ def parse(cursor)
18
+ rule = cursor.find_rule(@name)
19
+ return nil if rule.nil?
20
+ # we have @name as the path prefix for this part?
21
+ cursor.attempt { |c| rule.parse(c) }
11
22
  end
12
23
  end
13
24
  end
@@ -0,0 +1,59 @@
1
+ module Fabulator
2
+ module Grammar
3
+ module Expr
4
+ class RuleSequence
5
+ def initialize(hypo, atom, quant = nil)
6
+ @name = hypo
7
+ @atom = atom
8
+ @quantifier = quant
9
+ end
10
+
11
+ # eventually, this can be the hypo name
12
+ def name
13
+ @name.nil? ? (@atom.name rescue nil) : @name
14
+ end
15
+
16
+ def parse(source)
17
+ if @quantifier.nil?
18
+ return @atom.parse(source)
19
+ end
20
+
21
+ case @quantifier.first
22
+ when '?'.to_sym: return @atom.parse(source) || { }
23
+ when :s:
24
+ ret = [ ]
25
+ r = @atom.parse(source)
26
+ while !r.nil?
27
+ ret << r
28
+ if @quantifier[1].nil?
29
+ r = @atom.parse(source)
30
+ else
31
+ r = @quantifier[1].parse(source)
32
+ if !r.nil?
33
+ r = @atom.parse(source)
34
+ end
35
+ end
36
+ end
37
+ return ret.empty? ? nil : ret
38
+ when 's?'.to_sym:
39
+ ret = [ ]
40
+ r = @atom.parse(source)
41
+ while !r.nil?
42
+ ret << r
43
+ if @quantifier[1].nil?
44
+ r = @atom.parse(source)
45
+ else
46
+ r = @quantifier[1].parse(source)
47
+ if !r.nil?
48
+ r = @atom.parse(source)
49
+ end
50
+ end
51
+ end
52
+ return ret.empty? ? {} : ret
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+
@@ -1,8 +1,9 @@
1
1
  module Fabulator::Grammar::Expr
2
2
  class Sequence
3
- def initialize(sub_seq, count = [ :one ])
3
+ def initialize(hypo, sub_seq, count = [ :one ])
4
4
  @sub_sequence = sub_seq
5
5
  @modifiers = ''
6
+ @hypothetical = hypo
6
7
  case (count - [:min]).first
7
8
  when :zero_or_one: @modifiers = '?'
8
9
  when :one_or_more: @modifiers = '+'
@@ -20,7 +21,12 @@ module Fabulator::Grammar::Expr
20
21
  end
21
22
 
22
23
  def to_regex
24
+ # how do we handle setting the hypothetical?
23
25
  s = %r{#{@sub_sequence.to_regex}#{@modifiers}}
24
26
  end
27
+
28
+ def parse(cursor)
29
+ cursor.match(self.to_regex)
30
+ end
25
31
  end
26
32
  end
@@ -0,0 +1,16 @@
1
+ module Fabulator
2
+ module Grammar
3
+ module Expr
4
+ class SetSkip
5
+ def initialize(skip)
6
+ @skip = skip
7
+ end
8
+
9
+ def parse(cursor)
10
+ cursor.skip = @skip
11
+ {}
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -7,5 +7,13 @@ module Fabulator::Grammar::Expr
7
7
  def to_regex
8
8
  Regexp.escape(@text)
9
9
  end
10
+
11
+ def name
12
+ nil
13
+ end
14
+
15
+ def parse(cursor)
16
+ cursor.match_token(Regexp.quote(@text))
17
+ end
10
18
  end
11
19
  end
@@ -1,5 +1,7 @@
1
1
  module Fabulator::Grammar::Expr
2
- class Rules
2
+ class Token
3
+ attr_accessor :name
4
+
3
5
  def initialize
4
6
  @alternatives = [ ]
5
7
  end
@@ -11,5 +13,14 @@ module Fabulator::Grammar::Expr
11
13
  def to_regex
12
14
  Regexp.union(@alternatives.collect{|a| a.to_regex })
13
15
  end
16
+
17
+ def parse(cursor)
18
+ res = cursor.match_token(self.to_regex)
19
+ if res.nil?
20
+ return nil
21
+ else
22
+ return res
23
+ end
24
+ end
14
25
  end
15
26
  end
@@ -0,0 +1,42 @@
1
+ module Fabulator::Grammar::Expr
2
+ class TokenAlternative
3
+ def initialize
4
+ @sequences = [ ]
5
+ @anchor_start = false
6
+ @anchor_end = false
7
+ end
8
+
9
+ def anchor_start(t)
10
+ @anchor_start = case t
11
+ when '^': '^'
12
+ when '^^': '\A'
13
+ end
14
+ end
15
+
16
+ def anchor_end(t)
17
+ @anchor_end = case t
18
+ when '$': '$'
19
+ when '$$': '\Z'
20
+ end
21
+ end
22
+
23
+ def add_sequence(s)
24
+ @sequences << s
25
+ end
26
+
27
+ def to_regex
28
+ r = %r{#{@sequences.collect{ |s| s.to_regex }}}
29
+ if @anchor_start
30
+ if @anchor_end
31
+ %r{#{@anchor_start}#{r}#{@anchor_end}}
32
+ else
33
+ %r{#{@anchor_start}#{r}}
34
+ end
35
+ elsif @anchor_end
36
+ %r{#{r}#{@anchor_end}}
37
+ else
38
+ r
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,667 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.6
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+ module Fabulator
9
+ module Grammar
10
+ class RuleParser < Racc::Parser
11
+
12
+ module_eval(<<'...end rules.racc/module_eval...', 'rules.racc', 75)
13
+ require 'fabulator/grammar'
14
+
15
+ def parse(t)
16
+ @source = t
17
+ @curpos = 0
18
+ @line = 0
19
+ @col = 0
20
+
21
+ @in_quantifier = false
22
+
23
+ @yydebug = true
24
+
25
+ @last_token = nil
26
+
27
+ do_parse
28
+ end
29
+
30
+ def on_error(*args)
31
+ raise Fabulator::Grammar::ParserError.new("unable to parse '#{args[1]}' near line #{@line + 1}, column #{@col}")
32
+ end
33
+
34
+ @@ops = {
35
+ ':=' => :COLON_EQUAL,
36
+ '[' => :LB,
37
+ ']' => :RB,
38
+ '(' => :LP,
39
+ ')' => :RP,
40
+ '{' => :LC,
41
+ '}' => :RC,
42
+ '?' => :QUESTION,
43
+ '.' => :DOT,
44
+ '..' => :DOT_DOT,
45
+ '...'=> :DOT_DOT_DOT,
46
+ '...!'=> :DOT_DOT_DOT_BANG,
47
+ '|' => :PIPE,
48
+ ',' => :COMMA,
49
+ ':' => :COLON,
50
+ '^' => :CARET,
51
+ '^^' => :CARET_CARET,
52
+ '$' => :DOLLAR,
53
+ '$$' => :DOLLAR_DOLLAR,
54
+ '/' => :SLASH,
55
+ }
56
+
57
+ @@regex = {
58
+ :simple_tokens => %r{^(#{Regexp.union(@@ops.keys.sort_by{|a| a.length}.reverse.collect{ |k| k })})},
59
+ :ncname => %r{(?:[a-zA-Z_][-a-zA-Z0-9_.]*)},
60
+ :integer => %r{(\d+)},
61
+ :literal => %r{((?:"(?:[^\\"]*(?:\\.[^\\"]*)*)")|(?:'(?:[^\\']*(?:\\.[^\\']*)*)'))},
62
+ }
63
+
64
+ @@regex[:general] = Regexp.compile(%{^(#{@@regex[:ncname]})|#{@@regex[:integer]}|#{@@regex[:literal]}})
65
+
66
+ def next_token
67
+ @token = nil
68
+ white_space = 0
69
+ new_line = 0
70
+ while @curpos < @source.length && @source[@curpos..@curpos] =~ /\s/ do
71
+ if @source[@curpos..@curpos] =~ /\n/
72
+ new_line = new_line + 1
73
+ @line = @line + 1
74
+ @col = 0
75
+ else
76
+ @col = @col + 1
77
+ end
78
+ @curpos = @curpos + 1
79
+ white_space = white_space + 1
80
+ end
81
+
82
+ # skip comments delimited by (: :)
83
+ # comments can be nested
84
+ # these are XPath 2.0 comments
85
+ #
86
+
87
+ if @curpos < @source.length && @source[@curpos..@curpos+1] == '(:'
88
+ comment_depth = 1
89
+ @curpos = @curpos + 2
90
+ @col = @col + 2
91
+ while comment_depth > 0 && @curpos < @source.length
92
+ if @source[@curpos..@curpos+1] == '(:'
93
+ comment_depth = comment_depth + 1
94
+ @curpos = @curpos + 1
95
+ @col = @col + 1
96
+ end
97
+ if @source[@curpos..@curpos+1] == ':)'
98
+ comment_depth = comment_depth - 1
99
+ @curpos = @curpos + 1
100
+ @col = @col + 1
101
+ end
102
+ @curpos = @curpos + 1
103
+ @col = @col + 1
104
+ end
105
+ white_space = white_space + 1
106
+ end
107
+
108
+ while @curpos < @source.length && @source[@curpos..@curpos] =~ /\s/ do
109
+ if @source[@curpos..@curpos] =~ /\n/
110
+ new_line = new_line + 1
111
+ @line = @line + 1
112
+ @col = 0
113
+ else
114
+ @col = @col + 1
115
+ end
116
+ @curpos = @curpos + 1
117
+ white_space = white_space + 1
118
+ end
119
+
120
+ if @curpos >= @source.length
121
+ @last_token = nil
122
+ return [ false, false ]
123
+ end
124
+
125
+ res = @@regex[:simple_tokens].match(@source[@curpos..@source.length-1])
126
+ if !res.nil?
127
+ if !res[1].nil?
128
+ @token = [ @@ops[res[1]], res[1] ]
129
+ end
130
+ end
131
+
132
+ if @token.nil?
133
+ res = @@regex[:general].match(@source[@curpos..@source.length-1])
134
+ if res.nil?
135
+ raise "Failed to parse '#{@source}' at #{@curpos}': #{@source[@curpos..@source.length-1]}"
136
+ end
137
+ #ncname, integer, literal
138
+ if !res[1].nil?
139
+ @token = [:NCNAME, res[1].to_s]
140
+ elsif !res[2].nil?
141
+ @token = [:INTEGER, res[2].to_s]
142
+ elsif !res[3].nil?
143
+ @token = [:LITERAL, res[3].to_s]
144
+ @token[1] = @token[1][1..@token[1].size-2]
145
+ @col += 2
146
+ @curpos += 2
147
+ end
148
+ end
149
+
150
+
151
+ if @token.nil?
152
+ puts "Uh oh... we don't know what to do: #{@source[@curpos .. @source.length-1]}"
153
+ return [ nil, nil ]
154
+ else
155
+ @curpos += @token[1].length
156
+ @col += @token[1].length
157
+ end
158
+
159
+ if !@token.nil? && @token[0] == :LP
160
+ # shorthand: if we see '(s[ )]', '(s?[ )]', '(?)', '(\d', then we have
161
+ if @curpos > 1 && ![' ', '('].include?(@source[@curpos-2 .. @curpos-2])
162
+ @token[0] = :LLP
163
+ @in_quantifier = true
164
+ end
165
+ elsif @in_quantifier
166
+ @in_quantifier = false
167
+ if @token[0] == :NCNAME
168
+ @token[0] = case @token[1]
169
+ when 's': :S
170
+ else :NCNAME
171
+ end
172
+ end
173
+ end
174
+
175
+ if !@token.nil? && @token[0] == :LB
176
+ if @curpos == 1 || @source[@curpos-2 .. @curpos - 2] == ' '
177
+ @token[0] = :LLB
178
+ @in_directive = true
179
+ end
180
+ elsif @in_directive && @token[0] == :NCNAME
181
+ @token[0] = @token[1].upcase.to_sym
182
+ @in_directive = false
183
+ end
184
+
185
+ # puts "token: #{@token.join(' => ')}"
186
+ return @token
187
+ end
188
+ ...end rules.racc/module_eval...
189
+ ##### State transition tables begin ###
190
+
191
+ racc_action_table = [
192
+ 12, 57, 16, 64, 37, 58, 12, 62, 16, 6,
193
+ 8, 11, 15, 18, 19, 6, 8, 11, 15, 18,
194
+ 19, 38, 10, 14, 38, 63, 16, 61, 10, 14,
195
+ 38, 3, 16, 4, 38, 59, 66, 38, 34, 33,
196
+ 38, 10, 14, 38, 10, 14, 10, 14, 38, 48,
197
+ 10, 14, 10, 14, 10, 14, 38, 10, 14, 67,
198
+ 10, 14, 4, 10, 14, 34, 75, 45, 10, 14,
199
+ 44, 69, 70, 12, 33, 71, 10, 14, 48, 73,
200
+ 43, 47, 6, 8, 11, 15, 18, 19, 27, 42,
201
+ 77, 28, 29, 30, 31, 26, 55, 37, 52, 53,
202
+ 54, 79, 80, 21, 82, 83, 84 ]
203
+
204
+ racc_action_check = [
205
+ 22, 40, 22, 50, 39, 42, 2, 49, 2, 22,
206
+ 22, 22, 22, 22, 22, 2, 2, 2, 2, 2,
207
+ 2, 52, 22, 22, 75, 50, 8, 49, 2, 2,
208
+ 31, 1, 6, 1, 69, 46, 52, 20, 48, 38,
209
+ 53, 52, 52, 26, 75, 75, 8, 8, 67, 33,
210
+ 31, 31, 6, 6, 69, 69, 66, 20, 20, 53,
211
+ 53, 53, 32, 26, 26, 16, 67, 30, 67, 67,
212
+ 29, 54, 55, 7, 16, 62, 66, 66, 63, 65,
213
+ 28, 32, 7, 7, 7, 7, 7, 7, 12, 27,
214
+ 68, 12, 12, 12, 12, 12, 37, 17, 37, 37,
215
+ 37, 71, 74, 3, 76, 78, 81 ]
216
+
217
+ racc_action_pointer = [
218
+ nil, 31, 3, 103, nil, nil, 27, 70, 21, nil,
219
+ nil, nil, 84, nil, nil, nil, 47, 78, nil, nil,
220
+ 32, nil, -3, nil, nil, nil, 38, 84, 74, 64,
221
+ 61, 25, 60, 44, nil, nil, nil, 76, 12, -15,
222
+ -5, nil, -1, nil, nil, nil, 29, nil, 20, 2,
223
+ -3, nil, 16, 35, 48, 51, nil, nil, nil, nil,
224
+ nil, nil, 46, 73, nil, 58, 51, 43, 69, 29,
225
+ nil, 96, nil, nil, 81, 19, 83, nil, 84, nil,
226
+ nil, 85, nil, nil, nil ]
227
+
228
+ racc_action_default = [
229
+ -3, -47, -1, -47, -3, -4, -47, -5, -47, -6,
230
+ -35, -17, -47, -7, -3, -18, -38, -22, -19, -20,
231
+ -47, 85, -2, -15, -8, -16, -33, -47, -47, -47,
232
+ -47, -33, -47, -47, -25, -37, -21, -47, -38, -24,
233
+ -47, -34, -47, -10, -11, -12, -47, -36, -47, -47,
234
+ -47, -40, -33, -33, -47, -47, -23, -14, -9, -13,
235
+ -43, -44, -45, -42, -39, -47, -33, -33, -47, -33,
236
+ -26, -47, -41, -27, -47, -33, -47, -29, -47, -46,
237
+ -28, -47, -32, -31, -30 ]
238
+
239
+ racc_goto_table = [
240
+ 40, 51, 49, 36, 17, 46, 1, 23, 17, 25,
241
+ 17, 50, 24, 22, 60, nil, nil, nil, nil, nil,
242
+ 32, nil, 39, nil, 17, 56, 65, 68, nil, nil,
243
+ nil, 72, 49, nil, nil, nil, nil, nil, nil, nil,
244
+ 74, 76, nil, 78, nil, nil, nil, nil, nil, 81 ]
245
+
246
+ racc_goto_check = [
247
+ 7, 13, 10, 9, 8, 7, 1, 5, 8, 5,
248
+ 8, 12, 6, 2, 14, nil, nil, nil, nil, nil,
249
+ 1, nil, 8, nil, 8, 9, 7, 7, nil, nil,
250
+ nil, 13, 10, nil, nil, nil, nil, nil, nil, nil,
251
+ 7, 7, nil, 7, nil, nil, nil, nil, nil, 7 ]
252
+
253
+ racc_goto_pointer = [
254
+ nil, 6, 9, nil, nil, 1, 5, -26, 2, -14,
255
+ -31, nil, -22, -32, -35 ]
256
+
257
+ racc_goto_default = [
258
+ nil, nil, 2, 5, 7, 9, 13, nil, 41, nil,
259
+ 20, 35, nil, nil, nil ]
260
+
261
+ racc_reduce_table = [
262
+ 0, 0, :racc_error,
263
+ 1, 31, :_reduce_1,
264
+ 3, 31, :_reduce_2,
265
+ 0, 32, :_reduce_3,
266
+ 2, 32, :_reduce_4,
267
+ 1, 33, :_reduce_none,
268
+ 1, 33, :_reduce_none,
269
+ 1, 34, :_reduce_7,
270
+ 2, 34, :_reduce_8,
271
+ 4, 36, :_reduce_9,
272
+ 3, 36, :_reduce_none,
273
+ 3, 36, :_reduce_none,
274
+ 3, 36, :_reduce_none,
275
+ 4, 36, :_reduce_13,
276
+ 4, 36, :_reduce_14,
277
+ 2, 36, :_reduce_15,
278
+ 2, 36, :_reduce_16,
279
+ 1, 36, :_reduce_17,
280
+ 1, 36, :_reduce_18,
281
+ 1, 36, :_reduce_19,
282
+ 1, 36, :_reduce_20,
283
+ 2, 35, :_reduce_21,
284
+ 1, 35, :_reduce_22,
285
+ 3, 35, :_reduce_23,
286
+ 2, 35, :_reduce_24,
287
+ 2, 40, :_reduce_25,
288
+ 3, 39, :_reduce_26,
289
+ 4, 39, :_reduce_27,
290
+ 5, 39, :_reduce_28,
291
+ 4, 39, :_reduce_29,
292
+ 6, 39, :_reduce_30,
293
+ 5, 39, :_reduce_31,
294
+ 5, 39, :_reduce_32,
295
+ 0, 37, :_reduce_none,
296
+ 1, 37, :_reduce_none,
297
+ 1, 38, :_reduce_35,
298
+ 3, 38, :_reduce_36,
299
+ 2, 38, :_reduce_37,
300
+ 0, 41, :_reduce_none,
301
+ 3, 41, :_reduce_none,
302
+ 1, 42, :_reduce_none,
303
+ 3, 42, :_reduce_none,
304
+ 2, 42, :_reduce_none,
305
+ 2, 43, :_reduce_none,
306
+ 2, 43, :_reduce_none,
307
+ 1, 44, :_reduce_none,
308
+ 3, 44, :_reduce_none ]
309
+
310
+ racc_reduce_n = 47
311
+
312
+ racc_shift_n = 85
313
+
314
+ racc_token_table = {
315
+ false => 0,
316
+ :error => 1,
317
+ :PIPE => 2,
318
+ :LLB => 3,
319
+ :MODE => 4,
320
+ :NCNAME => 5,
321
+ :RB => 6,
322
+ :COMMIT => 7,
323
+ :UNCOMMIT => 8,
324
+ :REJECT => 9,
325
+ :SKIP => 10,
326
+ :RESYNC => 11,
327
+ :DOT_DOT_DOT => 12,
328
+ :DOT_DOT_DOT_BANG => 13,
329
+ :CARET => 14,
330
+ :CARET_CARET => 15,
331
+ :DOLLAR => 16,
332
+ :DOLLAR_DOLLAR => 17,
333
+ :COLON_EQUAL => 18,
334
+ :LLP => 19,
335
+ :QUESTION => 20,
336
+ :RP => 21,
337
+ :S => 22,
338
+ :INTEGER => 23,
339
+ :DOT_DOT => 24,
340
+ :LITERAL => 25,
341
+ :LP => 26,
342
+ :LB => 27,
343
+ :COMMA => 28,
344
+ :SLASH => 29 }
345
+
346
+ racc_nt_base = 30
347
+
348
+ racc_use_result_var = true
349
+
350
+ Racc_arg = [
351
+ racc_action_table,
352
+ racc_action_check,
353
+ racc_action_default,
354
+ racc_action_pointer,
355
+ racc_goto_table,
356
+ racc_goto_check,
357
+ racc_goto_default,
358
+ racc_goto_pointer,
359
+ racc_nt_base,
360
+ racc_reduce_table,
361
+ racc_token_table,
362
+ racc_shift_n,
363
+ racc_reduce_n,
364
+ racc_use_result_var ]
365
+
366
+ Racc_token_to_s_table = [
367
+ "$end",
368
+ "error",
369
+ "PIPE",
370
+ "LLB",
371
+ "MODE",
372
+ "NCNAME",
373
+ "RB",
374
+ "COMMIT",
375
+ "UNCOMMIT",
376
+ "REJECT",
377
+ "SKIP",
378
+ "RESYNC",
379
+ "DOT_DOT_DOT",
380
+ "DOT_DOT_DOT_BANG",
381
+ "CARET",
382
+ "CARET_CARET",
383
+ "DOLLAR",
384
+ "DOLLAR_DOLLAR",
385
+ "COLON_EQUAL",
386
+ "LLP",
387
+ "QUESTION",
388
+ "RP",
389
+ "S",
390
+ "INTEGER",
391
+ "DOT_DOT",
392
+ "LITERAL",
393
+ "LP",
394
+ "LB",
395
+ "COMMA",
396
+ "SLASH",
397
+ "$start",
398
+ "rules",
399
+ "rule",
400
+ "rule_bit",
401
+ "directives",
402
+ "sequence",
403
+ "directive",
404
+ "opt_separator",
405
+ "atom",
406
+ "sequence_qualifiers",
407
+ "hypothetical",
408
+ "opt_params",
409
+ "params",
410
+ "param",
411
+ "relative_path" ]
412
+
413
+ Racc_debug_parser = false
414
+
415
+ ##### State transition tables end #####
416
+
417
+ # reduce 0 omitted
418
+
419
+ module_eval(<<'.,.,', 'rules.racc', 6)
420
+ def _reduce_1(val, _values, result)
421
+ result = Fabulator::Grammar::Expr::Rule.new; result.add_alternative(val[0])
422
+ result
423
+ end
424
+ .,.,
425
+
426
+ module_eval(<<'.,.,', 'rules.racc', 7)
427
+ def _reduce_2(val, _values, result)
428
+ result = val[0]; result.add_alternative(val[2])
429
+ result
430
+ end
431
+ .,.,
432
+
433
+ module_eval(<<'.,.,', 'rules.racc', 9)
434
+ def _reduce_3(val, _values, result)
435
+ result = Fabulator::Grammar::Expr::RuleAlternative.new;
436
+ result
437
+ end
438
+ .,.,
439
+
440
+ module_eval(<<'.,.,', 'rules.racc', 10)
441
+ def _reduce_4(val, _values, result)
442
+ result = val[0]; result.add_sequence(val[1])
443
+ result
444
+ end
445
+ .,.,
446
+
447
+ # reduce 5 omitted
448
+
449
+ # reduce 6 omitted
450
+
451
+ module_eval(<<'.,.,', 'rules.racc', 15)
452
+ def _reduce_7(val, _values, result)
453
+ result = [ val[0] ]
454
+ result
455
+ end
456
+ .,.,
457
+
458
+ module_eval(<<'.,.,', 'rules.racc', 16)
459
+ def _reduce_8(val, _values, result)
460
+ result = val[0] + [ val[1] ]
461
+ result
462
+ end
463
+ .,.,
464
+
465
+ module_eval(<<'.,.,', 'rules.racc', 18)
466
+ def _reduce_9(val, _values, result)
467
+ result = Fabulator::Grammar::Expr::RuleMode.new(val[2])
468
+ result
469
+ end
470
+ .,.,
471
+
472
+ # reduce 10 omitted
473
+
474
+ # reduce 11 omitted
475
+
476
+ # reduce 12 omitted
477
+
478
+ module_eval(<<'.,.,', 'rules.racc', 22)
479
+ def _reduce_13(val, _values, result)
480
+ result = Fabulator::Grammar::Expr::SetSkip.new(val[2])
481
+ result
482
+ end
483
+ .,.,
484
+
485
+ module_eval(<<'.,.,', 'rules.racc', 23)
486
+ def _reduce_14(val, _values, result)
487
+ result = Fabulator::Grammar::Expr::Resync.new(val[2])
488
+ result
489
+ end
490
+ .,.,
491
+
492
+ module_eval(<<'.,.,', 'rules.racc', 24)
493
+ def _reduce_15(val, _values, result)
494
+ result = Fabulator::Grammar::Expr::LookAhead.new(val[1])
495
+ result
496
+ end
497
+ .,.,
498
+
499
+ module_eval(<<'.,.,', 'rules.racc', 25)
500
+ def _reduce_16(val, _values, result)
501
+ result = Fabulator::Grammar::Expr::NegLookAhead.new(val[1])
502
+ result
503
+ end
504
+ .,.,
505
+
506
+ module_eval(<<'.,.,', 'rules.racc', 26)
507
+ def _reduce_17(val, _values, result)
508
+ result = Fabulator::Grammar::Expr::Anchor.new(:start_of_line)
509
+ result
510
+ end
511
+ .,.,
512
+
513
+ module_eval(<<'.,.,', 'rules.racc', 27)
514
+ def _reduce_18(val, _values, result)
515
+ result = Fabulator::Grammar::Expr::Anchor.new(:start_of_string)
516
+ result
517
+ end
518
+ .,.,
519
+
520
+ module_eval(<<'.,.,', 'rules.racc', 28)
521
+ def _reduce_19(val, _values, result)
522
+ result = Fabulator::Grammar::Expr::Anchor.new(:end_of_line)
523
+ result
524
+ end
525
+ .,.,
526
+
527
+ module_eval(<<'.,.,', 'rules.racc', 29)
528
+ def _reduce_20(val, _values, result)
529
+ result = Fabulator::Grammar::Expr::Anchor.new(:end_of_string)
530
+ result
531
+ end
532
+ .,.,
533
+
534
+ module_eval(<<'.,.,', 'rules.racc', 31)
535
+ def _reduce_21(val, _values, result)
536
+ result = Fabulator::Grammar::Expr::RuleSequence.new(nil, val[0], val[1])
537
+ result
538
+ end
539
+ .,.,
540
+
541
+ module_eval(<<'.,.,', 'rules.racc', 32)
542
+ def _reduce_22(val, _values, result)
543
+ result = Fabulator::Grammar::Expr::RuleSequence.new(nil, val[0])
544
+ result
545
+ end
546
+ .,.,
547
+
548
+ module_eval(<<'.,.,', 'rules.racc', 33)
549
+ def _reduce_23(val, _values, result)
550
+ result = Fabulator::Grammar::Expr::RuleSequence.new(val[0], val[1], val[2])
551
+ result
552
+ end
553
+ .,.,
554
+
555
+ module_eval(<<'.,.,', 'rules.racc', 34)
556
+ def _reduce_24(val, _values, result)
557
+ result = Fabulator::Grammar::Expr::RuleSequence.new(val[0], val[1])
558
+ result
559
+ end
560
+ .,.,
561
+
562
+ module_eval(<<'.,.,', 'rules.racc', 36)
563
+ def _reduce_25(val, _values, result)
564
+ result = val[0]
565
+ result
566
+ end
567
+ .,.,
568
+
569
+ module_eval(<<'.,.,', 'rules.racc', 44)
570
+ def _reduce_26(val, _values, result)
571
+ result = [ '?'.to_sym ]
572
+ result
573
+ end
574
+ .,.,
575
+
576
+ module_eval(<<'.,.,', 'rules.racc', 45)
577
+ def _reduce_27(val, _values, result)
578
+ result = [ :s, val[2] ]
579
+ result
580
+ end
581
+ .,.,
582
+
583
+ module_eval(<<'.,.,', 'rules.racc', 46)
584
+ def _reduce_28(val, _values, result)
585
+ result = [ 's?'.to_sym, val[3] ]
586
+ result
587
+ end
588
+ .,.,
589
+
590
+ module_eval(<<'.,.,', 'rules.racc', 47)
591
+ def _reduce_29(val, _values, result)
592
+ result = [ :count, val[1], val[2] ]
593
+ result
594
+ end
595
+ .,.,
596
+
597
+ module_eval(<<'.,.,', 'rules.racc', 48)
598
+ def _reduce_30(val, _values, result)
599
+ result = [ :range, [ val[1], val[3] ], val[4] ]
600
+ result
601
+ end
602
+ .,.,
603
+
604
+ module_eval(<<'.,.,', 'rules.racc', 49)
605
+ def _reduce_31(val, _values, result)
606
+ result = [ :upto, val[2], val[3] ]
607
+ result
608
+ end
609
+ .,.,
610
+
611
+ module_eval(<<'.,.,', 'rules.racc', 50)
612
+ def _reduce_32(val, _values, result)
613
+ result = [ :atleast, val[1],val[3] ]
614
+ result
615
+ end
616
+ .,.,
617
+
618
+ # reduce 33 omitted
619
+
620
+ # reduce 34 omitted
621
+
622
+ module_eval(<<'.,.,', 'rules.racc', 55)
623
+ def _reduce_35(val, _values, result)
624
+ result = Fabulator::Grammar::Expr::Text.new(val[0])
625
+ result
626
+ end
627
+ .,.,
628
+
629
+ module_eval(<<'.,.,', 'rules.racc', 56)
630
+ def _reduce_36(val, _values, result)
631
+ result = val[1]
632
+ result
633
+ end
634
+ .,.,
635
+
636
+ module_eval(<<'.,.,', 'rules.racc', 57)
637
+ def _reduce_37(val, _values, result)
638
+ result = Fabulator::Grammar::Expr::RuleRef.new(val[0])
639
+ result
640
+ end
641
+ .,.,
642
+
643
+ # reduce 38 omitted
644
+
645
+ # reduce 39 omitted
646
+
647
+ # reduce 40 omitted
648
+
649
+ # reduce 41 omitted
650
+
651
+ # reduce 42 omitted
652
+
653
+ # reduce 43 omitted
654
+
655
+ # reduce 44 omitted
656
+
657
+ # reduce 45 omitted
658
+
659
+ # reduce 46 omitted
660
+
661
+ def _reduce_none(val, _values, result)
662
+ val[0]
663
+ end
664
+
665
+ end # class RuleParser
666
+ end # module Grammar
667
+ end # module Fabulator