Class: Ibex::Frontend::TokenAdapter::DelimiterTracker
- Inherits:
-
Object
- Object
- Ibex::Frontend::TokenAdapter::DelimiterTracker
- Defined in:
- lib/ibex/frontend/token_adapter/delimiter_tracker.rb,
sig/ibex/frontend/token_adapter/delimiter_tracker.rbs
Overview
Tracks ordinary EBNF groups separately from separated-list calls.
Instance Attribute Summary collapse
- #group_opening ⇒ Token? readonly
- #open_kind ⇒ delimiter_kind? readonly
Instance Method Summary collapse
- #empty? ⇒ Boolean
-
#initialize ⇒ DelimiterTracker
constructor
A new instance of DelimiterTracker.
- #observe(token, external, previous_external) ⇒ void
Constructor Details
#initialize ⇒ DelimiterTracker
Returns a new instance of DelimiterTracker.
14 15 16 |
# File 'lib/ibex/frontend/token_adapter/delimiter_tracker.rb', line 14 def initialize @stack = [] #: Array[[delimiter_kind, Token]] end |
Instance Attribute Details
#group_opening ⇒ Token? (readonly)
8 9 10 |
# File 'lib/ibex/frontend/token_adapter/delimiter_tracker.rb', line 8 def group_opening @group_opening end |
#open_kind ⇒ delimiter_kind? (readonly)
9 10 11 |
# File 'lib/ibex/frontend/token_adapter/delimiter_tracker.rb', line 9 def open_kind @open_kind end |
Instance Method Details
#empty? ⇒ Boolean
19 20 21 |
# File 'lib/ibex/frontend/token_adapter/delimiter_tracker.rb', line 19 def empty? @stack.empty? end |
#observe(token, external, previous_external) ⇒ void
This method returns an undefined value.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/ibex/frontend/token_adapter/delimiter_tracker.rb', line 24 def observe(token, external, previous_external) if external == "(" kind = if %i[SEPARATED_LIST SEPARATED_NONEMPTY_LIST].include?(previous_external) :separated elsif %i[LHS PARAMETERIZED_REFERENCE].include?(previous_external) :parameter else :group end #: delimiter_kind @stack << [kind, token] #: [delimiter_kind, Token] elsif external == ")" @stack.pop end @open_kind = @stack.last&.first @group_opening = @stack.reverse.find { |kind, _opening| kind == :group }&.last end |