lib/lrama/grammar.rb in lrama-0.6.3 vs lib/lrama/grammar.rb in lrama-0.6.4

- old
+ new

@@ -1,10 +1,11 @@ require "forwardable" require "lrama/grammar/auxiliary" require "lrama/grammar/binding" require "lrama/grammar/code" require "lrama/grammar/counter" +require "lrama/grammar/destructor" require "lrama/grammar/error_token" require "lrama/grammar/parameterizing_rule" require "lrama/grammar/percent_code" require "lrama/grammar/precedence" require "lrama/grammar/printer" @@ -32,19 +33,20 @@ :sym_to_rules, :no_stdlib def_delegators "@symbols_resolver", :symbols, :nterms, :terms, :add_nterm, :add_term, :find_symbol_by_number!, :find_symbol_by_id!, :token_to_symbol, :find_symbol_by_s_value!, :fill_symbol_number, :fill_nterm_type, - :fill_printer, :fill_error_token, :sort_by_number! + :fill_printer, :fill_destructor, :fill_error_token, :sort_by_number! def initialize(rule_counter) @rule_counter = rule_counter # Code defined by "%code" @percent_codes = [] @printers = [] + @destructors = [] @error_tokens = [] @symbols_resolver = Grammar::Symbols::Resolver.new @types = [] @rule_builders = [] @rules = [] @@ -63,10 +65,14 @@ def add_percent_code(id:, code:) @percent_codes << PercentCode.new(id.s_value, code.s_value) end + def add_destructor(ident_or_tags:, token_code:, lineno:) + @destructors << Destructor.new(ident_or_tags: ident_or_tags, token_code: token_code, lineno: lineno) + end + def add_printer(ident_or_tags:, token_code:, lineno:) @printers << Printer.new(ident_or_tags: ident_or_tags, token_code: token_code, lineno: lineno) end def add_error_token(ident_or_tags:, token_code:, lineno:) @@ -343,9 +349,10 @@ def fill_symbols fill_symbol_number fill_nterm_type(@types) fill_printer(@printers) + fill_destructor(@destructors) fill_error_token(@error_tokens) sort_by_number! end def fill_sym_to_rules