Class: Lrama::Grammar::RuleBuilder
- Inherits:
-
Object
- Object
- Lrama::Grammar::RuleBuilder
- Defined in:
- lib/lrama/grammar/rule_builder.rb
Instance Attribute Summary collapse
-
#lhs ⇒ Object
TODO: rbs-inline 0.11.0 doesn't support instance variables.
-
#lhs_tag ⇒ Object
readonly
: Lexer::Token::Tag?.
-
#line ⇒ Object
: Integer?.
-
#midrule_action_counter ⇒ Object
readonly
: Counter.
-
#parameterized_resolver ⇒ Object
readonly
: Grammar::Parameterized::Resolver.
-
#precedence_sym ⇒ Object
: Grammar::Symbol?.
-
#rhs ⇒ Object
readonly
: Array.
-
#rule_counter ⇒ Object
readonly
: Counter.
-
#user_code ⇒ Object
: Lexer::Token::UserCode?.
Instance Method Summary collapse
- #add_rhs(rhs) ⇒ Object
- #complete_input ⇒ Object
- #has_inline_rules? ⇒ Boolean
-
#initialize(rule_counter, midrule_action_counter, parameterized_resolver, position_in_original_rule_rhs = nil, lhs_tag: nil, skip_preprocess_references: false) ⇒ RuleBuilder
constructor
A new instance of RuleBuilder.
- #rules ⇒ Object
- #setup_rules ⇒ Object
Constructor Details
#initialize(rule_counter, midrule_action_counter, parameterized_resolver, position_in_original_rule_rhs = nil, lhs_tag: nil, skip_preprocess_references: false) ⇒ RuleBuilder
Returns a new instance of RuleBuilder.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/lrama/grammar/rule_builder.rb', line 32 def initialize(rule_counter, midrule_action_counter, parameterized_resolver, position_in_original_rule_rhs = nil, lhs_tag: nil, skip_preprocess_references: false) @rule_counter = rule_counter @midrule_action_counter = midrule_action_counter @parameterized_resolver = parameterized_resolver @position_in_original_rule_rhs = position_in_original_rule_rhs @skip_preprocess_references = skip_preprocess_references @lhs = nil @lhs_tag = lhs_tag @rhs = [] @user_code = nil @precedence_sym = nil @line = nil @rules = [] @rule_builders_for_parameterized = [] @rule_builders_for_derived_rules = [] @parameterized_rules = [] @midrule_action_rules = [] end |
Instance Attribute Details
#lhs ⇒ Object
TODO: rbs-inline 0.11.0 doesn't support instance variables. Move these type declarations above instance variable definitions, once it's supported. see: https://github.com/soutaro/rbs-inline/pull/149
@rbs! @position_in_original_rule_rhs: Integer? @skip_preprocess_references: bool @rules: Array @rule_builders_for_parameterized: Array @rule_builders_for_derived_rules: Array @parameterized_rules: Array @midrule_action_rules: Array @replaced_rhs: Array?
21 22 23 |
# File 'lib/lrama/grammar/rule_builder.rb', line 21 def lhs @lhs end |
#lhs_tag ⇒ Object (readonly)
: Lexer::Token::Tag?
26 27 28 |
# File 'lib/lrama/grammar/rule_builder.rb', line 26 def lhs_tag @lhs_tag end |
#line ⇒ Object
: Integer?
22 23 24 |
# File 'lib/lrama/grammar/rule_builder.rb', line 22 def line @line end |
#midrule_action_counter ⇒ Object (readonly)
: Counter
24 25 26 |
# File 'lib/lrama/grammar/rule_builder.rb', line 24 def midrule_action_counter @midrule_action_counter end |
#parameterized_resolver ⇒ Object (readonly)
: Grammar::Parameterized::Resolver
25 26 27 |
# File 'lib/lrama/grammar/rule_builder.rb', line 25 def parameterized_resolver @parameterized_resolver end |
#precedence_sym ⇒ Object
: Grammar::Symbol?
29 30 31 |
# File 'lib/lrama/grammar/rule_builder.rb', line 29 def precedence_sym @precedence_sym end |
#rhs ⇒ Object (readonly)
: Array
27 28 29 |
# File 'lib/lrama/grammar/rule_builder.rb', line 27 def rhs @rhs end |
#rule_counter ⇒ Object (readonly)
: Counter
23 24 25 |
# File 'lib/lrama/grammar/rule_builder.rb', line 23 def rule_counter @rule_counter end |
#user_code ⇒ Object
: Lexer::Token::UserCode?
28 29 30 |
# File 'lib/lrama/grammar/rule_builder.rb', line 28 def user_code @user_code end |
Instance Method Details
#add_rhs(rhs) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/lrama/grammar/rule_builder.rb', line 53 def add_rhs(rhs) @line ||= rhs.line flush_user_code @rhs << rhs end |
#complete_input ⇒ Object
78 79 80 |
# File 'lib/lrama/grammar/rule_builder.rb', line 78 def complete_input freeze_rhs end |
#has_inline_rules? ⇒ Boolean
96 97 98 |
# File 'lib/lrama/grammar/rule_builder.rb', line 96 def has_inline_rules? rhs.any? { |token| @parameterized_resolver.find_inline(token) } end |
#rules ⇒ Object
91 92 93 |
# File 'lib/lrama/grammar/rule_builder.rb', line 91 def rules @parameterized_rules + @midrule_action_rules + @rules end |
#setup_rules ⇒ Object
83 84 85 86 87 88 |
# File 'lib/lrama/grammar/rule_builder.rb', line 83 def setup_rules preprocess_references unless @skip_preprocess_references process_rhs resolve_inline_rules build_rules end |