Class: Rattler::BackEnd::ParserGenerator::OneOrMoreGenerator

Inherits:
ExprGenerator
  • Object
show all
Includes:
NestedSubGenerating, PredicatePropogating, RepeatGenerating
Defined in:
lib/rattler/back_end/parser_generator/one_or_more_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PredicatePropogating

#gen_assert, #gen_disallow, #gen_intermediate_assert, #gen_intermediate_disallow

Methods included from Parsers

define

Methods included from RepeatGenerating

#gen_basic, #gen_direct_action, #gen_dispatch_action, #gen_token

Methods inherited from ExprGenerator

#gen_direct_action, #gen_dispatch_action, #gen_intermediate, #gen_intermediate_assert, #gen_intermediate_disallow, #gen_intermediate_skip, #gen_token, #initialize

Constructor Details

This class inherits a constructor from Rattler::BackEnd::ParserGenerator::ExprGenerator

Class Method Details

.nested(*args) ⇒ Object



34
35
36
# File 'lib/rattler/back_end/parser_generator/one_or_more_generator.rb', line 34

def OneOrMoreGenerator.nested(*args)
  NestedOneOrMoreGenerator.new(*args)
end

.top_level(*args) ⇒ Object



52
53
54
# File 'lib/rattler/back_end/parser_generator/one_or_more_generator.rb', line 52

def OneOrMoreGenerator.top_level(*args)
  TopLevelOneOrMoreGenerator.new(*args)
end

Instance Method Details

#gen_skip(one_or_more, scope = {}) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/rattler/back_end/parser_generator/one_or_more_generator.rb', line 11

def gen_skip(one_or_more, scope={})
  expr :block do
    (@g << "#{result_name} = false").newline
    @g << 'while '
    generate one_or_more.child, :intermediate_skip, scope
    @g.block('') { @g << "#{result_name} = true" }.newline
    @g << result_name
  end
end