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