Class: Depager::StatefulLexerExtension::PreRuleList0::Parser

Inherits:
LALR::Basis show all
Includes:
Utils::ExtensionSlaveMethods
Defined in:
lib/depager/plugins/slex.rb

Overview

:nodoc:all

Constant Summary collapse

REDUCE_TABLE =

Reduce Table

[
  [ -1, 1 ],
  [ 0, 1 ],
  [ 1, 0 ],
  [ 1, 3 ],
  [ 2, 4 ],
  [ 4, 0 ],
  [ 4, 2 ],
  [ 3, 1 ],
  [ 3, 2 ],
  [ 5, 3 ],
  [ 7, 0 ],
  [ 7, 1 ],
  [ 6, 1 ],
  [ 6, 3 ],
]
TERM_TO_INT =

Term to Int

{
  nil => 0,
  false => 1,
  "<" => 2,
  :ID => 3,
  ">" => 4,
  ":" => 5,
  :ACTION => 6,
  "!" => 7,
  :LEX => 8,
  "," => 9,
}
INT_TO_TERM =

Int to Term

[
  nil,
  false,
  "<",
  :ID,
  ">",
  ":",
  :ACTION,
  "!",
  :LEX,
  ",",
]
ACTION_TABLE =

Action Table

[
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ ACC, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, 4, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, 8, nil, ],
  [ nil, nil, nil, 9, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, 8, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, 12, nil, 13, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, 15, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, 16, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, 17, nil, ],
  [ nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, 19, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, ],
]
DEFRED_TABLE =

Default Reduce Table

[
  -2,
  nil,
  -1,
  nil,
  nil,
  -3,
  -7,
  -10,
  -12,
  -5,
  -8,
  nil,
  -11,
  nil,
  nil,
  nil,
  -9,
  -13,
  -4,
  -6,
]
DEFRED_AFTER_SHIFT_TABLE =
[
  -2,
  nil,
  nil,
  nil,
  nil,
  nil,
  -7,
  nil,
  -12,
  nil,
  -8,
  nil,
  -11,
  nil,
  nil,
  nil,
  -9,
  -13,
  -4,
  -6,
]
NONTERM_TO_INT =

Nonterm to Int

{
  :start => 0,
  :mode_list => 1,
  :mode => 2,
  :lexactlist => 3,
  :opt_super => 4,
  :lexact => 5,
  :lexlist => 6,
  :opt_noskip => 7,
}
INT_TO_NONTERM =

Int to Nonterm

[
  :start,
  :mode_list,
  :mode,
  :lexactlist,
  :opt_super,
  :lexact,
  :lexlist,
  :opt_noskip,
]
GOTO_TABLE =

Goto Table

[
  [ 1, 2, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, 3, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, 5, nil, 6, 7, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, 10, 7, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, 11, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, 14, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
  [ nil, nil, nil, nil, nil, nil, nil, nil, ],
]

Constants inherited from LALR::Parser

LALR::Parser::ACC

Instance Attribute Summary

Attributes included from Utils::ExtensionSlaveMethods

#d_parser, #g_parser, #master

Attributes inherited from LALR::Basis

#action_value, #basis, #file, #line, #lookahead, #parser_size, #stack

Instance Method Summary collapse

Methods included from Utils::ExtensionSlaveMethods

#abort_driver, #do_default, #do_parse

Methods included from Utils::CodeGeneratorMethods

#expand_inline_code, #generate_action_decorator_code, #generate_decorator_code, #parse_block

Methods included from Utils::CommonMethods

#error_exit, #error_message, #expanded_code_delimiter, #file, #full_target_name, #input_path, #inspect, #target_name, #target_namespace, #warning

Methods inherited from LALR::Basis

#abort_driver, #accept, #do_abort_driver, #error, #next_decorator_index, #reduce, #shift

Methods inherited from LALR::Parser

#accept, #error, #parse, #reduce, #shift

Constructor Details

#initialize(g_parser, master) ⇒ Parser

Returns a new instance of Parser.



279
280
281
282
283
284
285
# File 'lib/depager/plugins/slex.rb', line 279

def initialize g_parser, master
  super()
  @g_parser  = g_parser
  @d_parser  = g_parser.d_parser
  @master    = master
  @decorated = Action.new(self)
end

Instance Method Details

#action_tableObject



177
# File 'lib/depager/plugins/slex.rb', line 177

def action_table; ACTION_TABLE; end


298
299
300
# File 'lib/depager/plugins/slex.rb', line 298

def banner
  "%LEX{ ... } / Depager::StatefulLexerExtension"
end

#defred_after_shift_tableObject



226
# File 'lib/depager/plugins/slex.rb', line 226

def defred_after_shift_table; DEFRED_AFTER_SHIFT_TABLE; end

#defred_tableObject



202
# File 'lib/depager/plugins/slex.rb', line 202

def defred_table; DEFRED_TABLE; end

#do_parse?Boolean

Returns:

  • (Boolean)


288
289
290
291
292
293
294
295
# File 'lib/depager/plugins/slex.rb', line 288

def do_parse?
  if @line.match(/^\s*%LEX\{\s*\Z/)
     @line = $' 
    true
  else
    false
  end
end

#goto_tableObject



277
# File 'lib/depager/plugins/slex.rb', line 277

def goto_table; GOTO_TABLE; end

#int_to_nontermObject



252
# File 'lib/depager/plugins/slex.rb', line 252

def int_to_nonterm; INT_TO_NONTERM; end

#int_to_termObject



152
# File 'lib/depager/plugins/slex.rb', line 152

def int_to_term; INT_TO_TERM; end

#lex {|nil, nil| ... } ⇒ Object

Yields:

  • (nil, nil)


302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
# File 'lib/depager/plugins/slex.rb', line 302

def lex
  begin
    until @line.empty?
      case @line
          when /\A\s+/, /\A#.*\Z/
            @line = $'
                 

          when /\A[A-Z]+/
            @line = $'
                 yield token(:ID, $&) 

          when /\A\%\}\s*\Z/
            @line = $'
                 yield nil,nil 

          when /\A\/(([^\/\\]+|\\.)*)\//
            @line = $'
                 yield token(:LEX, "/\\A#{$1}/") 

          when /\A'([^'\\]+|\\.)*'/, /\A"([^"\\]+|\\.)*"/
            @line = $'
            
    yield token(:LEX, "/\\A#{Regexp.escape($1).gsub('/', '\/')}/")

          when /\A\{/
            #
            
    lineno = file.lineno
    yield token(:ACTION, parse_block, lineno)

          when /\A./
            @line = $'
                 yield token($&, $&) 


      else
        raise RuntimeError, "must not happen #{@line}"
      end
    end
  end while @original_line = @line = file.gets
  yield nil, nil
end

#nonterm_to_intObject



239
# File 'lib/depager/plugins/slex.rb', line 239

def nonterm_to_int; NONTERM_TO_INT; end

#reduce_tableObject



122
# File 'lib/depager/plugins/slex.rb', line 122

def reduce_table; REDUCE_TABLE; end

#term_to_intObject



137
# File 'lib/depager/plugins/slex.rb', line 137

def term_to_int; TERM_TO_INT; end