From 2837dfda6ba0c1afd5aceb733998f20936d560f2 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 6 Jun 2022 22:30:28 -0400 Subject: [PATCH] Add Rule#id --- lib/propane/grammar.rb | 2 +- lib/propane/rule.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/propane/grammar.rb b/lib/propane/grammar.rb index 113f7c8..f14f230 100644 --- a/lib/propane/grammar.rb +++ b/lib/propane/grammar.rb @@ -44,7 +44,7 @@ class Propane elsif sliced = input.slice!(/\A(\S+)\s*->\s*(.*?)(?:;|<<\n(.*?)^>>\n)/m) rule_name, components, code = $1, $2, $3 components = components.strip.split(/\s+/) - @rules << Rule.new(rule_name, components, code, line_number) + @rules << Rule.new(rule_name, components, code, line_number, @rules.size) else if input.size > 25 input = input.slice(0..20) + "..." diff --git a/lib/propane/rule.rb b/lib/propane/rule.rb index a06147e..7778a12 100644 --- a/lib/propane/rule.rb +++ b/lib/propane/rule.rb @@ -10,6 +10,10 @@ class Propane # User code associated with the rule. attr_reader :code + # @return [Integer] + # Rule ID. + attr_reader :id + # @return [Integer] # Line number where the rule was defined in the input grammar. attr_reader :line_number @@ -28,10 +32,13 @@ class Propane # User code associated with the rule. # @param line_number [Integer] # Line number where the rule was defined in the input grammar. - def initialize(name, components, code, line_number) + # @param id [Integer] + # Rule ID. + def initialize(name, components, code, line_number, id) @name = name @components = components @code = code + @id = id @line_number = line_number end