Class: Lrama::Warnings::NameConflicts

Inherits:
Object
  • Object
show all
Defined in:
lib/lrama/warnings/name_conflicts.rb

Overview

Warning rationale: Parameterized rule names conflicting with symbol names

  • When a %rule name is identical to a terminal or non-terminal symbol name, it reduces grammar readability and may cause unintended behavior
  • Detecting these conflicts helps improve grammar definition quality

Instance Method Summary collapse

Constructor Details

#initialize(logger, warnings) ⇒ NameConflicts

Returns a new instance of NameConflicts.



12
13
14
15
# File 'lib/lrama/warnings/name_conflicts.rb', line 12

def initialize(logger, warnings)
  @logger = logger
  @warnings = warnings
end

Instance Method Details

#warn(grammar) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/lrama/warnings/name_conflicts.rb', line 18

def warn(grammar)
  return unless @warnings
  return if grammar.parameterized_rules.empty?

  symbol_names = collect_symbol_names(grammar)
  check_conflicts(grammar.parameterized_rules, symbol_names)
end