Class: Ibex::IR::Grammar
- Inherits:
-
Object
- Object
- Ibex::IR::Grammar
- Defined in:
- lib/ibex/ir/grammar_ir.rb
Overview
Immutable normalized grammar exchanged between pipeline stages.
Instance Attribute Summary collapse
-
#class_name ⇒ Object
readonly
: String.
-
#conversions ⇒ Object
readonly
: Hash[String, String].
-
#expect ⇒ Object
readonly
: Integer.
-
#expect_rr ⇒ Object
readonly
: Integer?.
-
#grammar_tests ⇒ Object
readonly
: Array.
-
#lexer ⇒ Object
readonly
: Lexer?.
-
#migration ⇒ Object
readonly
: migration_metadata?.
-
#mode ⇒ Object
readonly
: grammar_mode.
-
#options ⇒ Object
readonly
: grammar_options.
-
#parser_parameters ⇒ Object
readonly
: Array.
-
#productions ⇒ Object
readonly
: Array.
-
#recovery ⇒ Object
readonly
: recovery_policy.
-
#schema_version ⇒ Object
readonly
: Integer.
-
#source_provenance ⇒ Object
readonly
: source_provenance?.
-
#start ⇒ Object
readonly
: String.
-
#starts ⇒ Object
readonly
: Array.
-
#superclass ⇒ Object
readonly
: String?.
-
#symbols ⇒ Object
readonly
: Array.
-
#user_code ⇒ Object
readonly
: Hash[String, String].
-
#user_code_chunks ⇒ Object
readonly
: user_code_chunks.
-
#value_printers ⇒ Object
readonly
: Array.
-
#warnings ⇒ Object
readonly
: Array.
Instance Method Summary collapse
-
#initialize(class_name:, superclass:, start:, expect:, options:, symbols:, productions:, user_code:, conversions:, warnings:, user_code_chunks: nil, schema_version: SCHEMA_VERSION, source_provenance: nil, migration: nil, expect_rr: nil, parser_parameters: [], value_printers: [], grammar_tests: [], recovery: nil, lexer: nil, mode: :default, starts: nil) ⇒ Grammar
constructor
rubocop:disable Metrics/AbcSize, Metrics/ParameterLists Immutable versioned IR is constructed from explicit public fields.
- #nonterminals ⇒ Object
- #symbol(name) ⇒ Object
- #symbol_by_id(id) ⇒ Object
- #terminals ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize(class_name:, superclass:, start:, expect:, options:, symbols:, productions:, user_code:, conversions:, warnings:, user_code_chunks: nil, schema_version: SCHEMA_VERSION, source_provenance: nil, migration: nil, expect_rr: nil, parser_parameters: [], value_printers: [], grammar_tests: [], recovery: nil, lexer: nil, mode: :default, starts: nil) ⇒ Grammar
rubocop:disable Metrics/AbcSize, Metrics/ParameterLists Immutable versioned IR is constructed from explicit public fields.
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/ibex/ir/grammar_ir.rb', line 190 def initialize(class_name:, superclass:, start:, expect:, options:, symbols:, productions:, user_code:, conversions:, warnings:, user_code_chunks: nil, schema_version: SCHEMA_VERSION, source_provenance: nil, migration: nil, expect_rr: nil, parser_parameters: [], value_printers: [], grammar_tests: [], recovery: nil, lexer: nil, mode: :default, starts: nil) validate_mode(mode) normalized_starts = validate_starts(start, starts, mode) @class_name = class_name.freeze @superclass = superclass&.freeze @start = start.freeze @starts = normalized_starts.map(&:freeze).freeze @mode = mode @expect = expect @expect_rr = expect_rr @parser_parameters = IR.deep_freeze(parser_parameters) @value_printers = IR.deep_freeze(value_printers) @grammar_tests = IR.deep_freeze(grammar_tests) @lexer = lexer @recovery = IR.deep_freeze(recovery || { sync_tokens: [], on_error_reduce: [] }) @options = IR.deep_freeze() @symbols = symbols.freeze @productions = productions.freeze @user_code = IR.deep_freeze(user_code) @user_code_chunks = IR.deep_freeze(user_code_chunks || {}) validate_user_code_chunks @conversions = IR.deep_freeze(conversions) @warnings = IR.deep_freeze(warnings) @schema_version = schema_version @source_provenance = IR.deep_freeze(source_provenance) @migration = IR.deep_freeze(migration) @symbols_by_name = @symbols.to_h { |symbol| [symbol.name, symbol] }.freeze @symbols_by_id = @symbols.to_h { |symbol| [symbol.id, symbol] }.freeze freeze end |
Instance Attribute Details
#class_name ⇒ Object (readonly)
: String
156 157 158 |
# File 'lib/ibex/ir/grammar_ir.rb', line 156 def class_name @class_name end |
#conversions ⇒ Object (readonly)
: Hash[String, String]
173 174 175 |
# File 'lib/ibex/ir/grammar_ir.rb', line 173 def conversions @conversions end |
#expect ⇒ Object (readonly)
: Integer
161 162 163 |
# File 'lib/ibex/ir/grammar_ir.rb', line 161 def expect @expect end |
#expect_rr ⇒ Object (readonly)
: Integer?
162 163 164 |
# File 'lib/ibex/ir/grammar_ir.rb', line 162 def expect_rr @expect_rr end |
#grammar_tests ⇒ Object (readonly)
: Array
165 166 167 |
# File 'lib/ibex/ir/grammar_ir.rb', line 165 def grammar_tests @grammar_tests end |
#lexer ⇒ Object (readonly)
: Lexer?
166 167 168 |
# File 'lib/ibex/ir/grammar_ir.rb', line 166 def lexer @lexer end |
#migration ⇒ Object (readonly)
: migration_metadata?
177 178 179 |
# File 'lib/ibex/ir/grammar_ir.rb', line 177 def migration @migration end |
#mode ⇒ Object (readonly)
: grammar_mode
160 161 162 |
# File 'lib/ibex/ir/grammar_ir.rb', line 160 def mode @mode end |
#options ⇒ Object (readonly)
: grammar_options
168 169 170 |
# File 'lib/ibex/ir/grammar_ir.rb', line 168 def @options end |
#parser_parameters ⇒ Object (readonly)
: Array
163 164 165 |
# File 'lib/ibex/ir/grammar_ir.rb', line 163 def parser_parameters @parser_parameters end |
#productions ⇒ Object (readonly)
: Array
170 171 172 |
# File 'lib/ibex/ir/grammar_ir.rb', line 170 def productions @productions end |
#recovery ⇒ Object (readonly)
: recovery_policy
167 168 169 |
# File 'lib/ibex/ir/grammar_ir.rb', line 167 def recovery @recovery end |
#schema_version ⇒ Object (readonly)
: Integer
175 176 177 |
# File 'lib/ibex/ir/grammar_ir.rb', line 175 def schema_version @schema_version end |
#source_provenance ⇒ Object (readonly)
: source_provenance?
176 177 178 |
# File 'lib/ibex/ir/grammar_ir.rb', line 176 def source_provenance @source_provenance end |
#start ⇒ Object (readonly)
: String
158 159 160 |
# File 'lib/ibex/ir/grammar_ir.rb', line 158 def start @start end |
#starts ⇒ Object (readonly)
: Array
159 160 161 |
# File 'lib/ibex/ir/grammar_ir.rb', line 159 def starts @starts end |
#superclass ⇒ Object (readonly)
: String?
157 158 159 |
# File 'lib/ibex/ir/grammar_ir.rb', line 157 def superclass @superclass end |
#symbols ⇒ Object (readonly)
: Array
169 170 171 |
# File 'lib/ibex/ir/grammar_ir.rb', line 169 def symbols @symbols end |
#user_code ⇒ Object (readonly)
: Hash[String, String]
171 172 173 |
# File 'lib/ibex/ir/grammar_ir.rb', line 171 def user_code @user_code end |
#user_code_chunks ⇒ Object (readonly)
: user_code_chunks
172 173 174 |
# File 'lib/ibex/ir/grammar_ir.rb', line 172 def user_code_chunks @user_code_chunks end |
#value_printers ⇒ Object (readonly)
: Array
164 165 166 |
# File 'lib/ibex/ir/grammar_ir.rb', line 164 def value_printers @value_printers end |
#warnings ⇒ Object (readonly)
: Array
174 175 176 |
# File 'lib/ibex/ir/grammar_ir.rb', line 174 def warnings @warnings end |
Instance Method Details
#nonterminals ⇒ Object
233 |
# File 'lib/ibex/ir/grammar_ir.rb', line 233 def nonterminals = @symbols.select(&:nonterminal?) |
#symbol(name) ⇒ Object
227 228 |
# File 'lib/ibex/ir/grammar_ir.rb', line 227 def symbol(name) = @symbols_by_name[name] # @rbs (Integer? id) -> GrammarSymbol? |
#symbol_by_id(id) ⇒ Object
229 230 |
# File 'lib/ibex/ir/grammar_ir.rb', line 229 def symbol_by_id(id) = @symbols_by_id[id] # @rbs () -> Array[GrammarSymbol] |
#terminals ⇒ Object
231 232 |
# File 'lib/ibex/ir/grammar_ir.rb', line 231 def terminals = @symbols.select(&:terminal?) # @rbs () -> Array[GrammarSymbol] |
#to_h ⇒ Object
236 237 238 239 240 241 242 243 244 245 |
# File 'lib/ibex/ir/grammar_ir.rb', line 236 def to_h value = { ibex_ir: "grammar", schema_version: @schema_version, class_name: @class_name, superclass: @superclass, start: @start, expect: @expect, options: @options, symbols: @symbols.map { |symbol| symbol.to_h(schema_version: @schema_version) }, productions: @productions.map { |production| production.to_h(schema_version: @schema_version) }, user_code: @user_code, conversions: @conversions, warnings: @warnings } #: Hash[Symbol, untyped] (value) value end |