Class: Ibex::Frontend::DSL::RuleBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/ibex/frontend/dsl.rb,
sig/ibex/frontend/dsl.rbs

Overview

Collects alternatives for one nonterminal.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(grammar, default_location) ⇒ RuleBuilder

Returns a new instance of RuleBuilder.

RBS:

  • (Builder grammar, Location default_location) -> void

Parameters:



235
236
237
238
239
# File 'lib/ibex/frontend/dsl.rb', line 235

def initialize(grammar, default_location)
  @grammar = grammar
  @default_location = default_location
  @alternatives = [] #: Array[AST::Alternative]
end

Instance Attribute Details

#alternativesArray[AST::Alternative] (readonly)

Signature:

  • Array[AST::Alternative]

Returns:



229
230
231
# File 'lib/ibex/frontend/dsl.rb', line 229

def alternatives
  @alternatives
end

Instance Method Details

#alt(*items, action: nil, precedence: nil, node: nil) ⇒ void

This method returns an undefined value.

RBS:

  • (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void

Parameters:

  • items (Object)
  • action: (Object, nil) (defaults to: nil)
  • precedence: (Object, nil) (defaults to: nil)
  • node: (AST::NodeAnnotation, nil) (defaults to: nil)


242
243
244
245
246
247
248
249
250
251
# File 'lib/ibex/frontend/dsl.rb', line 242

def alt(*items, action: nil, precedence: nil, node: nil)
  location = @grammar.next_location || @default_location
  normalized = items.map { |item| @grammar.normalize_item(item) }
  action_node = action && AST::InlineAction.new(code: action.to_s, loc: location)
  alternative = AST::Alternative.new(
    items: normalized, action: action_node, precedence: precedence&.to_s,
    node_annotation: node, loc: location
  )
  @alternatives << alternative
end