Sha256: cfae6215dc357471d2765b05c354248f41eaa1218b492cf4499b5ba2a3f015b3

Contents?: true

Size: 669 Bytes

Versions: 2

Compression:

Stored size: 669 Bytes

Contents

# More magic: handle recursive rules

Treetop.load_from_string <<-GRAMMAR

module Lists
  grammar Grammar
    rule lists
      (list [\n])+ <node(:lists)>
    end
    
    rule list
      "[" whitespace* number ("," whitespace* number)* "]" <node(:list)>
    end

    rule number
      [1-9] [0-9]* <node(:number)>
    end

    rule whitespace
      [ ]
    end
  end
end

GRAMMAR

module Lists
  module AST
    include TireSwing::NodeDefinition
    node :lists, :elements, :lists => extract(:list)
    node :list, :elements, :numbers => array_of(:number) { |num| num.text_value.to_i }
    node :number # placeholder
  end

  TireSwing.parses_grammar(Grammar, AST)
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aniero-tire_swing-0.0.5 spec/grammars/lists.rb
aniero-tire_swing-0.0.6 spec/grammars/lists.rb