Class: Language::Atom::Or

Inherits:
Language::Atom show all
Defined in:
lib/language/atom.rb

Instance Method Summary collapse

Methods inherited from Language::Atom

#<<, #>>, #absent, #aka, #any, #ignore, #inspect, #maybe, #repeat, #rule, #str, #then, #|

Constructor Details

#initialize(left:, right:) ⇒ Or

Returns a new instance of Or.



215
216
217
218
# File 'lib/language/atom.rb', line 215

def initialize(left:, right:)
  @left = left
  @right = right
end

Instance Method Details

#parse(parser) ⇒ Object



220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'lib/language/atom.rb', line 220

def parse(parser)
  left_clone =
    Parser.new(
      root: self,
      input: parser.input,
      cursor: parser.cursor,
      buffer: parser.buffer
    )

  right_clone =
    Parser.new(
      root: self,
      input: parser.input,
      cursor: parser.cursor,
      buffer: parser.buffer
    )

  begin
    @left.parse(left_clone)
    parser.cursor = left_clone.cursor
    parser.buffer = left_clone.buffer
    parser.output.merge(left_clone.output)
  rescue Parser::Interuption
    @right.parse(right_clone)
    parser.cursor = right_clone.cursor
    parser.buffer = right_clone.buffer
    parser.output.merge(right_clone.output)
  end
end

#to_sObject



250
251
252
# File 'lib/language/atom.rb', line 250

def to_s
  "((#{@left}) | (#{@right}))"
end