Class: LL::Parser

Inherits:
Driver show all
Defined in:
lib/ll/parser.rb

Constant Summary collapse

CONFIG =
LL::DriverConfig.new

Instance Method Summary collapse

Methods inherited from Driver

#id_to_terminal, #id_to_type, #parser_error, #parser_error_message

Constructor Details

#initialize(*args) ⇒ Parser

Returns a new instance of Parser.

See Also:

  • LL::Parser.[LL[LL::Lexer[LL::Lexer#initialize]


115
116
117
# File 'lib/ll/parser.rb', line 115

def initialize(*args)
  @lexer = Lexer.new(*args)
end

Instance Method Details

#_rule_0(val) ⇒ Object



138
139
140
# File 'lib/ll/parser.rb', line 138

def _rule_0(val)
   s(:grammar, val[0]) 
end

#_rule_1(val) ⇒ Object



142
143
144
# File 'lib/ll/parser.rb', line 142

def _rule_1(val)
   s(:grammar) 
end

#_rule_10(val) ⇒ Object



180
181
182
# File 'lib/ll/parser.rb', line 180

def _rule_10(val)
   [val[2]] + val[3] 
end

#_rule_11(val) ⇒ Object



184
185
186
# File 'lib/ll/parser.rb', line 184

def _rule_11(val)
  val
end

#_rule_12(val) ⇒ Object



188
189
190
191
192
# File 'lib/ll/parser.rb', line 188

def _rule_12(val)
  
    s(:terminals, val[1], :source_line => val[0].source_line)
  
end

#_rule_13(val) ⇒ Object



194
195
196
197
198
# File 'lib/ll/parser.rb', line 194

def _rule_13(val)
  
    s(:inner, [val[1]], :source_line => val[0].source_line)
  
end

#_rule_14(val) ⇒ Object



200
201
202
203
204
# File 'lib/ll/parser.rb', line 200

def _rule_14(val)
  
    s(:header, [val[1]], :source_line => val[0].source_line)
  
end

#_rule_15(val) ⇒ Object



206
207
208
# File 'lib/ll/parser.rb', line 206

def _rule_15(val)
   [val[0]] + val[1] 
end

#_rule_16(val) ⇒ Object



210
211
212
# File 'lib/ll/parser.rb', line 210

def _rule_16(val)
   val[0] 
end

#_rule_17(val) ⇒ Object



214
215
216
# File 'lib/ll/parser.rb', line 214

def _rule_17(val)
  val
end

#_rule_18(val) ⇒ Object



218
219
220
221
222
# File 'lib/ll/parser.rb', line 218

def _rule_18(val)
  
    s(:ident, [val[0].value], :source_line => val[0].source_line)
  
end

#_rule_19(val) ⇒ Object



224
225
226
227
228
# File 'lib/ll/parser.rb', line 224

def _rule_19(val)
  
    s(:steps, val[0], :source_line => val[0][0].source_line)
  
end

#_rule_2(val) ⇒ Object



146
147
148
# File 'lib/ll/parser.rb', line 146

def _rule_2(val)
   val[0] + val[1] 
end

#_rule_20(val) ⇒ Object



230
231
232
233
234
# File 'lib/ll/parser.rb', line 230

def _rule_20(val)
  
    s(:steps, [val[0]], :source_line => val[0].source_line)
  
end

#_rule_21(val) ⇒ Object



236
237
238
# File 'lib/ll/parser.rb', line 236

def _rule_21(val)
   s(:epsilon, [], :source_line => val[0].source_line) 
end

#_rule_22(val) ⇒ Object



240
241
242
243
244
245
246
247
248
# File 'lib/ll/parser.rb', line 240

def _rule_22(val)
  
    steps = [val[0]]

    steps << val[1] if val[1]

    s(:branch, steps, :source_line => val[0].source_line)
  
end

#_rule_23(val) ⇒ Object



250
251
252
# File 'lib/ll/parser.rb', line 250

def _rule_23(val)
   val[0] 
end

#_rule_24(val) ⇒ Object



254
255
256
# File 'lib/ll/parser.rb', line 254

def _rule_24(val)
   nil 
end

#_rule_25(val) ⇒ Object



258
259
260
# File 'lib/ll/parser.rb', line 258

def _rule_25(val)
   s(:ruby, [val[0].value], :source_line => val[0].source_line) 
end

#_rule_26(val) ⇒ Object



262
263
264
# File 'lib/ll/parser.rb', line 262

def _rule_26(val)
   [val[0]] + val[1] 
end

#_rule_27(val) ⇒ Object



266
267
268
# File 'lib/ll/parser.rb', line 266

def _rule_27(val)
   val[1] 
end

#_rule_28(val) ⇒ Object



270
271
272
# File 'lib/ll/parser.rb', line 270

def _rule_28(val)
  val
end

#_rule_29(val) ⇒ Object



274
275
276
277
278
# File 'lib/ll/parser.rb', line 274

def _rule_29(val)
  
    s(:rule, [val[0], *val[2]], :source_line => val[0].source_line)
  
end

#_rule_3(val) ⇒ Object



150
151
152
# File 'lib/ll/parser.rb', line 150

def _rule_3(val)
  val
end

#_rule_4(val) ⇒ Object



154
155
156
# File 'lib/ll/parser.rb', line 154

def _rule_4(val)
  val
end

#_rule_5(val) ⇒ Object



158
159
160
# File 'lib/ll/parser.rb', line 158

def _rule_5(val)
  val
end

#_rule_6(val) ⇒ Object



162
163
164
# File 'lib/ll/parser.rb', line 162

def _rule_6(val)
  val
end

#_rule_7(val) ⇒ Object



166
167
168
# File 'lib/ll/parser.rb', line 166

def _rule_7(val)
  val
end

#_rule_8(val) ⇒ Object



170
171
172
# File 'lib/ll/parser.rb', line 170

def _rule_8(val)
  val
end

#_rule_9(val) ⇒ Object



174
175
176
177
178
# File 'lib/ll/parser.rb', line 174

def _rule_9(val)
  
    s(:name, [val[1], *val[2]], :source_line => val[0].source_line)
  
end

#each_token {|type, value| ... } ⇒ Object

Yield Parameters:

  • type (Symbol)
  • value (String)


123
124
125
126
127
128
129
# File 'lib/ll/parser.rb', line 123

def each_token
  @lexer.advance do |token|
    yield [token.type, token]
  end

  yield [-1, -1]
end

#s(*args) ⇒ Object

See Also:

  • LL::Parser.[LL[LL::AST[LL::AST::Node[LL::AST::Node#initialize]


134
135
136
# File 'lib/ll/parser.rb', line 134

def s(*args)
  return AST::Node.new(*args)
end