Class: Aurum::LexicalSpecification

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(definition = {:initial => {}}, state = :initial) ⇒ LexicalSpecification

Returns a new instance of LexicalSpecification.



40
41
42
43
# File 'lib/aurum/grammar.rb', line 40

def initialize definition = {:initial => {}}, state = :initial 
	@definitions, @character_classes = definition, CharacterClassDefinition.new
	@lexical_definition, @patterns = @definitions[state], {}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *patterns, &action) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/aurum/grammar.rb', line 86

def method_missing name, *patterns, &action 
	return __get_pattern(name) if patterns.empty?
	pattern = Pattern.concat *(patterns.collect {|x| x.kind_of?(Pattern) ? x : Pattern.from_string(x.to_s)}) 			
	@patterns[name] = pattern
	if name.to_s =~ /^_/ 
		recognize_action = RecognizeTokenAction.new(name.to_s)
		recognize_action.action = action
		@lexical_definition[pattern] = recognize_action
	end 
	pattern
end

Instance Attribute Details

#character_classesObject (readonly)

Returns the value of attribute character_classes.



38
39
40
# File 'lib/aurum/grammar.rb', line 38

def character_classes
  @character_classes
end

#definitionsObject (readonly)

Returns the value of attribute definitions.



38
39
40
# File 'lib/aurum/grammar.rb', line 38

def definitions
  @definitions
end

Instance Method Details

#__create_pattern(action, *patterns) ⇒ Object



103
104
105
106
107
# File 'lib/aurum/grammar.rb', line 103

def __create_pattern action, *patterns 
	pattern = Pattern.concat *(patterns.collect {|x| x.kind_of?(Pattern) ? x : Pattern.from_string(x.to_s)})
	@lexical_definition[pattern] = action
	pattern 
end

#__get_pattern(name) ⇒ Object



98
99
100
101
# File 'lib/aurum/grammar.rb', line 98

def __get_pattern name
	return @patterns[name] if @patterns.has_key? name
	Pattern.from_char_set @character_classes.definitions[name]  
end

#cat(*patterns) ⇒ Object



57
58
59
# File 'lib/aurum/grammar.rb', line 57

def cat *patterns
	Pattern.concat *(patterns.collect {|x| x.kind_of?(Pattern) ? x : Pattern.from_string(x.to_s)})
end

#enum(literal) ⇒ Object



53
54
55
# File 'lib/aurum/grammar.rb', line 53

def enum literal
	Pattern.from_enum literal
end

#ignore(*patterns) ⇒ Object



71
72
73
# File 'lib/aurum/grammar.rb', line 71

def ignore *patterns
	__create_pattern IgnoreAction, *patterns
end

#match(*patterns, &action) ⇒ Object



67
68
69
# File 'lib/aurum/grammar.rb', line 67

def match *patterns, &action
	__create_pattern UserDefinedAction.new(action), *patterns
end

#range(a, b) ⇒ Object



45
46
47
# File 'lib/aurum/grammar.rb', line 45

def range a, b
	Pattern.from_char_set CharacterSet::Interval.new(a, b).to_char_set
end

#recognize_and_shift_to(token, state, *patterns) ⇒ Object



82
83
84
# File 'lib/aurum/grammar.rb', line 82

def recognize_and_shift_to token, state, *patterns
	__create_pattern RecognizeTokenAndChangeStateAction.new(token.to_s, state), *patterns
end

#shift_to(state, *patterns, &config) ⇒ Object



61
62
63
64
65
# File 'lib/aurum/grammar.rb', line 61

def shift_to state, *patterns, &config
	pattern = __create_pattern ChangeStateAction.new(state), *patterns
	within state, &config if block_given?
	pattern
end

#string(literal) ⇒ Object



49
50
51
# File 'lib/aurum/grammar.rb', line 49

def string literal
	Pattern.from_string literal
end

#within(*states, &config) ⇒ Object



75
76
77
78
79
80
# File 'lib/aurum/grammar.rb', line 75

def within *states, &config
	for state in states
		@definitions[state] = {} unless @definitions[state] 
		LexicalSpecification.new(@definitions, state).instance_eval &config								
	end
end