3
3
require "lrama/grammar/binding"
4
4
require "lrama/grammar/code"
5
5
require "lrama/grammar/counter"
6
+ require "lrama/grammar/destructor"
6
7
require "lrama/grammar/error_token"
7
8
require "lrama/grammar/parameterizing_rule"
8
9
require "lrama/grammar/percent_code"
@@ -34,7 +35,7 @@ class Grammar
34
35
def_delegators "@symbols_resolver" , :symbols , :nterms , :terms , :add_nterm , :add_term ,
35
36
:find_symbol_by_number! , :find_symbol_by_id! , :token_to_symbol ,
36
37
:find_symbol_by_s_value! , :fill_symbol_number , :fill_nterm_type ,
37
- :fill_printer , :fill_error_token , :sort_by_number!
38
+ :fill_printer , :fill_destructor , : fill_error_token, :sort_by_number!
38
39
39
40
40
41
def initialize ( rule_counter )
@@ -43,6 +44,7 @@ def initialize(rule_counter)
43
44
# Code defined by "%code"
44
45
@percent_codes = [ ]
45
46
@printers = [ ]
47
+ @destructors = [ ]
46
48
@error_tokens = [ ]
47
49
@symbols_resolver = Grammar ::Symbols ::Resolver . new
48
50
@types = [ ]
@@ -65,6 +67,10 @@ def add_percent_code(id:, code:)
65
67
@percent_codes << PercentCode . new ( id . s_value , code . s_value )
66
68
end
67
69
70
+ def add_destructor ( ident_or_tags :, token_code :, lineno :)
71
+ @destructors << Destructor . new ( ident_or_tags : ident_or_tags , token_code : token_code , lineno : lineno )
72
+ end
73
+
68
74
def add_printer ( ident_or_tags :, token_code :, lineno :)
69
75
@printers << Printer . new ( ident_or_tags : ident_or_tags , token_code : token_code , lineno : lineno )
70
76
end
@@ -345,6 +351,7 @@ def fill_symbols
345
351
fill_symbol_number
346
352
fill_nterm_type ( @types )
347
353
fill_printer ( @printers )
354
+ fill_destructor ( @destructors )
348
355
fill_error_token ( @error_tokens )
349
356
sort_by_number!
350
357
end
0 commit comments