aboutsummaryrefslogtreecommitdiffstats
path: root/tool/lrama/lib/lrama/grammar/parameterizing_rules/builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/lrama/lib/lrama/grammar/parameterizing_rules/builder.rb')
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterizing_rules/builder.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rules/builder.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rules/builder.rb
new file mode 100644
index 0000000000..28c9ad427d
--- /dev/null
+++ b/tool/lrama/lib/lrama/grammar/parameterizing_rules/builder.rb
@@ -0,0 +1,43 @@
+require 'lrama/grammar/parameterizing_rules/builder/base'
+require 'lrama/grammar/parameterizing_rules/builder/list'
+require 'lrama/grammar/parameterizing_rules/builder/nonempty_list'
+require 'lrama/grammar/parameterizing_rules/builder/option'
+require 'lrama/grammar/parameterizing_rules/builder/separated_nonempty_list'
+require 'lrama/grammar/parameterizing_rules/builder/separated_list'
+
+module Lrama
+ class Grammar
+ class ParameterizingRules
+ class Builder
+ RULES = {
+ option: Lrama::Grammar::ParameterizingRules::Builder::Option,
+ "?": Lrama::Grammar::ParameterizingRules::Builder::Option,
+ nonempty_list: Lrama::Grammar::ParameterizingRules::Builder::NonemptyList,
+ "+": Lrama::Grammar::ParameterizingRules::Builder::NonemptyList,
+ list: Lrama::Grammar::ParameterizingRules::Builder::List,
+ "*": Lrama::Grammar::ParameterizingRules::Builder::List,
+ separated_nonempty_list: Lrama::Grammar::ParameterizingRules::Builder::SeparatedNonemptyList,
+ separated_list: Lrama::Grammar::ParameterizingRules::Builder::SeparatedList,
+ }
+
+ def initialize(token, rule_counter, lhs, user_code, precedence_sym, line)
+ @token = token
+ @key = token.s_value.to_sym
+ @rule_counter = rule_counter
+ @lhs = lhs
+ @user_code = user_code
+ @precedence_sym = precedence_sym
+ @line = line
+ end
+
+ def build
+ if RULES.key?(@key)
+ RULES[@key].new(@token, @rule_counter, @lhs, @user_code, @precedence_sym, @line).build
+ else
+ raise "Parameterizing rule does not exist. `#{@key}`"
+ end
+ end
+ end
+ end
+ end
+end