lib/lrama/grammar.rb in lrama-0.5.10 vs lib/lrama/grammar.rb in lrama-0.5.11
- old
+ new
@@ -7,13 +7,13 @@
require "lrama/grammar/printer"
require "lrama/grammar/reference"
require "lrama/grammar/rule"
require "lrama/grammar/rule_builder"
require "lrama/grammar/symbol"
+require "lrama/grammar/type"
require "lrama/grammar/union"
require "lrama/lexer"
-require "lrama/type"
module Lrama
# Grammar is the result of parsing an input grammar file
class Grammar
attr_reader :percent_codes, :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol, :aux
@@ -146,11 +146,11 @@
end
def prepare
normalize_rules
collect_symbols
- replace_token_with_symbol
+ set_lhs_and_rhs
fill_symbol_number
fill_default_precedence
fill_sym_to_rules
fill_nterm_type
fill_symbol_printer
@@ -389,10 +389,15 @@
builder.rules.each do |rule|
add_nterm(id: rule._lhs)
@rules << rule
end
+ builder.parameterizing_rules.each do |rule|
+ add_nterm(id: rule._lhs, tag: rule.lhs_tag)
+ @rules << rule
+ end
+
builder.midrule_action_rules.each do |rule|
add_nterm(id: rule._lhs)
end
end
end
@@ -482,10 +487,10 @@
nterm_token_id += 1
end
end
end
- def replace_token_with_symbol
+ def set_lhs_and_rhs
@rules.each do |rule|
rule.lhs = token_to_symbol(rule._lhs) if rule._lhs
rule.rhs = rule._rhs.map do |t|
token_to_symbol(t)