Class: Aurum::Grammar

Inherits:
Object
  • Object
show all
Defined in:
lib/aurum/grammar.rb

Class Method Summary collapse

Class Method Details

.character_classes(&block) ⇒ Object



181
182
183
184
# File 'lib/aurum/grammar.rb', line 181

def self.character_classes &block
	@lexical_sepcification = LexicalSpecification.new unless @lexical_sepcification
	@lexical_sepcification.character_classes.instance_eval &block			
end

.lexer(input) ⇒ Object



201
202
203
204
205
206
207
# File 'lib/aurum/grammar.rb', line 201

def self.lexer input
	@productions = ProductionDefinition.new unless @productions			
	@lexical_sepcification.definitions[:initial].merge!(@productions.__literals)
	generator = Aurum::LexicalTableGenerator.new @lexical_sepcification.definitions
	table, accepts = generator.lexical_table
	Aurum::Lexer.new table, accepts, generator.lexical_states, input			
end

.method_missing(name, input) ⇒ Object



218
219
220
221
222
223
224
# File 'lib/aurum/grammar.rb', line 218

def self.method_missing name, input
	name_string = name.to_s
	if name_string =~ /^parse_/
		start_nonterminal = name_string.split(/^parse_/).last
		self.start_from(start_nonterminal).parse self.lexer(input) 
	end			
end

.precedences(&block) ⇒ Object



191
192
193
194
# File 'lib/aurum/grammar.rb', line 191

def self.precedences &block
	@precedences = OperatorPrecedenceDefinition.new unless @precedences
	@precedences.instance_eval &block
end

.productions(&block) ⇒ Object



196
197
198
199
# File 'lib/aurum/grammar.rb', line 196

def self.productions &block
	@productions = ProductionDefinition.new unless @productions
	@productions.instance_eval &block
end

.start_from(start_symbol) ⇒ Object



209
210
211
212
213
214
215
216
# File 'lib/aurum/grammar.rb', line 209

def self.start_from start_symbol
	@productions = ProductionDefinition.new unless @productions
	@precedences = OperatorPrecedenceDefinition.new unless @precedences
	generator = Aurum::ParsingTableGenerator.new @productions.__definitions, @precedences.precedences, @precedences.associativities
	productions = generator.start_from(Aurum::Symbol.new(start_symbol.to_s, false)).productions
	table, lookeahead_level = generator.parsing_table
	Aurum::Parser.new productions, table
end

.tokens(&block) ⇒ Object



186
187
188
189
# File 'lib/aurum/grammar.rb', line 186

def self.tokens &block
	@lexical_sepcification = LexicalSpecification.new unless @lexical_sepcification
	@lexical_sepcification.instance_eval &block
end