lib/lrama/grammar.rb in lrama-0.6.11 vs lib/lrama/grammar.rb in lrama-0.7.0

- old
+ new

@@ -26,18 +26,18 @@ extend Forwardable attr_reader :percent_codes, :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol, :aux, :parameterizing_rule_resolver attr_accessor :union, :expect, :printers, :error_tokens, :lex_param, :parse_param, :initial_action, :after_shift, :before_reduce, :after_reduce, :after_shift_error_token, :after_pop_stack, - :symbols_resolver, :types, :rules, :rule_builders, :sym_to_rules, :no_stdlib, :locations + :symbols_resolver, :types, :rules, :rule_builders, :sym_to_rules, :no_stdlib, :locations, :define def_delegators "@symbols_resolver", :symbols, :nterms, :terms, :add_nterm, :add_term, :find_term_by_s_value, :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_destructor, :fill_error_token, :sort_by_number! - def initialize(rule_counter) + def initialize(rule_counter, define = {}) @rule_counter = rule_counter # Code defined by "%code" @percent_codes = [] @printers = [] @@ -55,10 +55,11 @@ @undef_symbol = nil @accept_symbol = nil @aux = Auxiliary.new @no_stdlib = false @locations = false + @define = define.map {|d| d.split('=') }.to_h append_special_symbols end def create_rule_builder(rule_counter, midrule_action_counter) @@ -169,10 +170,14 @@ def find_rules_by_symbol(sym) @sym_to_rules[sym.number] end + def ielr_defined? + @define.key?('lr.type') && @define['lr.type'] == 'ielr' + end + private def compute_nullable @rules.each do |rule| case @@ -292,10 +297,10 @@ term.accept_symbol = true @accept_symbol = term end def resolve_inline_rules - while @rule_builders.any? {|r| r.has_inline_rules? } do + while @rule_builders.any?(&:has_inline_rules?) do @rule_builders = @rule_builders.flat_map do |builder| if builder.has_inline_rules? builder.resolve_inline_rules else builder