From 8ff5e181cefa4afa7b197221ce39aa575c2ce363 Mon Sep 17 00:00:00 2001 From: Jakob Rath Date: Wed, 11 Dec 2013 14:01:43 +0100 Subject: [PATCH] Add more parsers. --- src/bindings/ruby/lib/hammer/internal.rb | 38 +++++++++++-------- src/bindings/ruby/lib/hammer/parser.rb | 11 ++++++ .../ruby/lib/hammer/parser_builder.rb | 10 +++++ 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/bindings/ruby/lib/hammer/internal.rb b/src/bindings/ruby/lib/hammer/internal.rb index 4fadb50..8132567 100644 --- a/src/bindings/ruby/lib/hammer/internal.rb +++ b/src/bindings/ruby/lib/hammer/internal.rb @@ -27,9 +27,8 @@ module Hammer attach_function :h_left, [:pointer, :pointer], :pointer attach_function :h_right, [:pointer, :pointer], :pointer attach_function :h_middle, [:pointer, :pointer, :pointer], :pointer - # h_action - # h_in - # h_not_in + #attach_function :h_in, [:string, :size_t], :pointer + #attach_function :h_not_in, [:string, :size_t], :pointer attach_function :h_end_p, [], :pointer attach_function :h_nothing_p, [], :pointer attach_function :h_sequence, [:varargs], :pointer @@ -39,18 +38,27 @@ module Hammer attach_function :h_xor, [:pointer, :pointer], :pointer attach_function :h_many, [:pointer], :pointer attach_function :h_many1, [:pointer], :pointer - # h_repeat_n - # h_optional - # h_ignore - # h_sepBy - # h_sepBy1 - # h_epsilon_p - # h_length_value - # h_attr_bool - # h_and - # h_not - # h_indirect - # h_bind_indirect + #attach_function :h_repeat_n, [:pointer, :size_t], :pointer + attach_function :h_optional, [:pointer], :pointer + attach_function :h_ignore, [:pointer], :pointer + attach_function :h_sepBy, [:pointer, :pointer], :pointer + attach_function :h_sepBy1, [:pointer, :pointer], :pointer + attach_function :h_epsilon_p, [], :pointer + attach_function :h_length_value, [:pointer, :pointer], :pointer + attach_function :h_and, [:pointer], :pointer + attach_function :h_not, [:pointer], :pointer + + attach_function :h_indirect, [], :pointer + attach_function :h_bind_indirect, [:pointer, :pointer], :void + + #attach_function :h_action, [:pointer, ...], :pointer + #attach_function :h_attr_bool, [:pointer, ...], :pointer + + #class HParseResult < FFI::Struct + # layout :ast, :pointer, + # :bit_length, :longlong, + # :arena, :pointer + #end # free the parse result attach_function :h_parse_result_free, [:pointer], :void diff --git a/src/bindings/ruby/lib/hammer/parser.rb b/src/bindings/ruby/lib/hammer/parser.rb index 5e4e3c0..12d0476 100644 --- a/src/bindings/ruby/lib/hammer/parser.rb +++ b/src/bindings/ruby/lib/hammer/parser.rb @@ -84,6 +84,17 @@ module Hammer define_parser :xor define_parser :many define_parser :many1 + define_parser :optional + define_parser :ignore + define_parser :sepBy + define_parser :sepBy1 + define_parser :epsilon_p + define_parser :length_value + define_parser :and + define_parser :not + + # TODO: If indirect, add a bind method that calls h_bind_indirect + define_parser :indirect attr_reader :h_parser end diff --git a/src/bindings/ruby/lib/hammer/parser_builder.rb b/src/bindings/ruby/lib/hammer/parser_builder.rb index 9547c6e..d1618c5 100644 --- a/src/bindings/ruby/lib/hammer/parser_builder.rb +++ b/src/bindings/ruby/lib/hammer/parser_builder.rb @@ -82,6 +82,16 @@ module Hammer define_parser :xor define_parser :many define_parser :many1 + define_parser :optional + define_parser :ignore + define_parser :sepBy + define_parser :sepBy1 + define_parser :epsilon_p + define_parser :length_value + define_parser :and + define_parser :not + define_parser :indirect + end # class ParserBuilder end # module Hammer