Class: LL::CompiledGrammar
- Inherits:
-
Object
- Object
- LL::CompiledGrammar
- Defined in:
- lib/ll/compiled_grammar.rb
Overview
The CompiledGrammar class contains compilation results such as the parser name, the rules of the grammar, the terminals, etc.
Instance Attribute Summary (collapse)
-
- (Object) errors
readonly
Returns the value of attribute errors.
-
- (Object) header
Returns the value of attribute header.
-
- (Object) inner
Returns the value of attribute inner.
-
- (Object) name
Returns the value of attribute name.
-
- (Object) warnings
readonly
Returns the value of attribute warnings.
Instance Method Summary (collapse)
-
- (Object) add_error(message, source_line)
-
- (LL::Rule) add_rule(rule)
-
- (LL::Terminal) add_terminal(name, source_line)
-
- (Object) add_warning(message, source_line)
-
- (Object) display_messages
Displays all warnings and errors.
-
- (TrueClass|FalseClass) has_rule?(name)
Returns true if a rule for the given name has already been assigned.
-
- (Boolean) has_rule_with_branches?(name)
Returns true if a rule already exists for a given name and has at least 1 branch.
-
- (TrueClass|FalseClass) has_terminal?(name)
-
- (CompiledGrammar) initialize
constructor
A new instance of CompiledGrammar.
-
- (LL::Rule|LL::Terminal|NilClass) lookup_identifier(name)
Looks up an identifier from the list of terminals and/or rules.
-
- (LL::Rule) lookup_rule(name)
-
- (IO) output
-
- (Hash) rule_indices
-
- (Array) rules
-
- (Hash) terminal_indices
-
- (Array) terminals
-
- (TrueClass|FalseClass) valid?
Constructor Details
- (CompiledGrammar) initialize
Returns a new instance of CompiledGrammar
11 12 13 14 15 16 17 18 |
# File 'lib/ll/compiled_grammar.rb', line 11 def initialize @warnings = [] @errors = [] @terminals = {} @rules = {} @inner = nil @header = nil end |
Instance Attribute Details
- (Object) errors (readonly)
Returns the value of attribute errors
9 10 11 |
# File 'lib/ll/compiled_grammar.rb', line 9 def errors @errors end |
- (Object) header
Returns the value of attribute header
7 8 9 |
# File 'lib/ll/compiled_grammar.rb', line 7 def header @header end |
- (Object) inner
Returns the value of attribute inner
7 8 9 |
# File 'lib/ll/compiled_grammar.rb', line 7 def inner @inner end |
- (Object) name
Returns the value of attribute name
7 8 9 |
# File 'lib/ll/compiled_grammar.rb', line 7 def name @name end |
- (Object) warnings (readonly)
Returns the value of attribute warnings
9 10 11 |
# File 'lib/ll/compiled_grammar.rb', line 9 def warnings @warnings end |
Instance Method Details
- (Object) add_error(message, source_line)
24 25 26 |
# File 'lib/ll/compiled_grammar.rb', line 24 def add_error(, source_line) @errors << Message.new(:error, , source_line) end |
- (LL::Rule) add_rule(rule)
77 78 79 |
# File 'lib/ll/compiled_grammar.rb', line 77 def add_rule(rule) return @rules[rule.name] = rule end |
- (LL::Terminal) add_terminal(name, source_line)
49 50 51 |
# File 'lib/ll/compiled_grammar.rb', line 49 def add_terminal(name, source_line) return @terminals[name] = Terminal.new(name, source_line) end |
- (Object) add_warning(message, source_line)
32 33 34 |
# File 'lib/ll/compiled_grammar.rb', line 32 def add_warning(, source_line) @warnings << Message.new(:warning, , source_line) end |
- (Object) display_messages
Displays all warnings and errors.
152 153 154 155 156 157 158 |
# File 'lib/ll/compiled_grammar.rb', line 152 def [:errors, :warnings].each do |type| send(type).each do |msg| output.puts(msg.to_s) end end end |
- (TrueClass|FalseClass) has_rule?(name)
Returns true if a rule for the given name has already been assigned.
59 60 61 |
# File 'lib/ll/compiled_grammar.rb', line 59 def has_rule?(name) return @rules.key?(name) end |
- (Boolean) has_rule_with_branches?(name)
Returns true if a rule already exists for a given name and has at least 1 branch.
69 70 71 |
# File 'lib/ll/compiled_grammar.rb', line 69 def has_rule_with_branches?(name) return has_rule?(name) && !@rules[name].branches.empty? end |
- (TrueClass|FalseClass) has_terminal?(name)
40 41 42 |
# File 'lib/ll/compiled_grammar.rb', line 40 def has_terminal?(name) return @terminals.key?(name) end |
- (LL::Rule|LL::Terminal|NilClass) lookup_identifier(name)
Looks up an identifier from the list of terminals and/or rules. Rules take precedence over terminals.
If no rule/terminal could be found nil is returned instead.
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/ll/compiled_grammar.rb', line 98 def lookup_identifier(name) if has_rule?(name) ident = lookup_rule(name) elsif has_terminal?(name) ident = @terminals[name] else ident = nil end return ident end |
- (LL::Rule) lookup_rule(name)
85 86 87 |
# File 'lib/ll/compiled_grammar.rb', line 85 def lookup_rule(name) return @rules[name] end |
- (IO) output
163 164 165 |
# File 'lib/ll/compiled_grammar.rb', line 163 def output return STDERR end |
- (Hash) rule_indices
120 121 122 123 124 |
# File 'lib/ll/compiled_grammar.rb', line 120 def rule_indices return rules.each_with_index.each_with_object({}) do |(rule, idx), h| h[rule] = idx end end |
- (Array) rules
113 114 115 |
# File 'lib/ll/compiled_grammar.rb', line 113 def rules return @rules.values end |
- (Hash) terminal_indices
136 137 138 139 140 |
# File 'lib/ll/compiled_grammar.rb', line 136 def terminal_indices return terminals.each_with_index.each_with_object({}) do |(term, idx), h| h[term] = idx end end |
- (Array) terminals
129 130 131 |
# File 'lib/ll/compiled_grammar.rb', line 129 def terminals return @terminals.values end |
- (TrueClass|FalseClass) valid?
145 146 147 |
# File 'lib/ll/compiled_grammar.rb', line 145 def valid? return @errors.empty? end |