antlr3 1.8.0 → 1.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. data/History.txt +35 -0
  2. data/Manifest.txt +73 -0
  3. data/README.txt +6 -13
  4. data/java/RubyTarget.java +43 -19
  5. data/java/antlr-full-3.2.1.jar +0 -0
  6. data/lib/antlr3/debug.rb +2 -0
  7. data/lib/antlr3/debug/event-hub.rb +55 -55
  8. data/lib/antlr3/debug/record-event-listener.rb +2 -2
  9. data/lib/antlr3/debug/rule-tracer.rb +14 -14
  10. data/lib/antlr3/debug/socket.rb +47 -47
  11. data/lib/antlr3/debug/trace-event-listener.rb +8 -8
  12. data/lib/antlr3/main.rb +29 -9
  13. data/lib/antlr3/modes/ast-builder.rb +7 -7
  14. data/lib/antlr3/modes/filter.rb +19 -17
  15. data/lib/antlr3/profile.rb +34 -6
  16. data/lib/antlr3/recognizers.rb +50 -1
  17. data/lib/antlr3/streams.rb +19 -15
  18. data/lib/antlr3/streams/rewrite.rb +241 -229
  19. data/lib/antlr3/template/group-file-lexer.rb +6 -8
  20. data/lib/antlr3/template/group-file-parser.rb +16 -16
  21. data/lib/antlr3/template/group-file.rb +1 -1
  22. data/lib/antlr3/test/call-stack.rb +13 -13
  23. data/lib/antlr3/test/core-extensions.rb +69 -69
  24. data/lib/antlr3/test/functional.rb +0 -4
  25. data/lib/antlr3/test/grammar.rb +70 -70
  26. data/lib/antlr3/token.rb +41 -17
  27. data/lib/antlr3/tree.rb +11 -14
  28. data/lib/antlr3/tree/debug.rb +53 -53
  29. data/lib/antlr3/tree/visitor.rb +11 -11
  30. data/lib/antlr3/tree/wizard.rb +35 -35
  31. data/lib/antlr3/util.rb +18 -0
  32. data/lib/antlr3/version.rb +1 -1
  33. data/rakefile +1 -0
  34. data/samples/ANTLRv3Grammar.g +3 -3
  35. data/samples/JavaScript.g +702 -0
  36. data/samples/standard/C/C.g +543 -0
  37. data/samples/standard/C/C.tokens +175 -0
  38. data/samples/standard/C/C__testrig.st +0 -0
  39. data/samples/standard/C/c.rb +12 -0
  40. data/samples/standard/C/input +3479 -0
  41. data/samples/standard/C/output +171 -0
  42. data/samples/standard/LL-star/LLStar.g +101 -0
  43. data/samples/standard/LL-star/input +12 -0
  44. data/samples/standard/LL-star/ll-star.rb +12 -0
  45. data/samples/standard/LL-star/output +2 -0
  46. data/samples/standard/calc/Calculator.g +47 -0
  47. data/samples/standard/calc/Calculator.py +16 -0
  48. data/samples/standard/calc/Calculator.rb +28 -0
  49. data/samples/standard/cminus/CMinus.g +141 -0
  50. data/samples/standard/cminus/bytecode.group +80 -0
  51. data/samples/standard/cminus/cminus.rb +16 -0
  52. data/samples/standard/cminus/input +9 -0
  53. data/samples/standard/cminus/java.group +91 -0
  54. data/samples/standard/cminus/output +11 -0
  55. data/samples/standard/cminus/python.group +48 -0
  56. data/samples/standard/dynamic-scope/DynamicScopes.g +50 -0
  57. data/samples/standard/dynamic-scope/dynamic-scopes.rb +12 -0
  58. data/samples/standard/dynamic-scope/input +7 -0
  59. data/samples/standard/dynamic-scope/output +4 -0
  60. data/samples/standard/fuzzy/FuzzyJava.g +89 -0
  61. data/samples/standard/fuzzy/fuzzy.py +11 -0
  62. data/samples/standard/fuzzy/fuzzy.rb +9 -0
  63. data/samples/standard/fuzzy/input +13 -0
  64. data/samples/standard/fuzzy/output +12 -0
  65. data/samples/standard/hoisted-predicates/HoistedPredicates.g +40 -0
  66. data/samples/standard/hoisted-predicates/hoisted-predicates.rb +13 -0
  67. data/samples/standard/hoisted-predicates/input +1 -0
  68. data/samples/standard/hoisted-predicates/output +1 -0
  69. data/samples/standard/island-grammar/Javadoc.g +46 -0
  70. data/samples/standard/island-grammar/Simple.g +104 -0
  71. data/samples/standard/island-grammar/input +11 -0
  72. data/samples/standard/island-grammar/island.rb +12 -0
  73. data/samples/standard/island-grammar/output +16 -0
  74. data/samples/standard/java/Java.g +827 -0
  75. data/samples/standard/java/input +80 -0
  76. data/samples/standard/java/java.rb +13 -0
  77. data/samples/standard/java/output +1 -0
  78. data/samples/standard/python/Python.g +718 -0
  79. data/samples/standard/python/PythonTokenSource.rb +107 -0
  80. data/samples/standard/python/input +210 -0
  81. data/samples/standard/python/output +24 -0
  82. data/samples/standard/python/python.rb +14 -0
  83. data/samples/standard/rakefile +18 -0
  84. data/samples/standard/scopes/SymbolTable.g +66 -0
  85. data/samples/standard/scopes/input +12 -0
  86. data/samples/standard/scopes/output +3 -0
  87. data/samples/standard/scopes/scopes.rb +12 -0
  88. data/samples/standard/simplecTreeParser/SimpleC.g +113 -0
  89. data/samples/standard/simplecTreeParser/SimpleCWalker.g +64 -0
  90. data/samples/standard/simplecTreeParser/input +12 -0
  91. data/samples/standard/simplecTreeParser/output +1 -0
  92. data/samples/standard/simplecTreeParser/simplec.rb +18 -0
  93. data/samples/standard/treeparser/Lang.g +24 -0
  94. data/samples/standard/treeparser/LangDumpDecl.g +17 -0
  95. data/samples/standard/treeparser/input +1 -0
  96. data/samples/standard/treeparser/output +2 -0
  97. data/samples/standard/treeparser/treeparser.rb +18 -0
  98. data/samples/standard/tweak/Tweak.g +68 -0
  99. data/samples/standard/tweak/input +9 -0
  100. data/samples/standard/tweak/output +16 -0
  101. data/samples/standard/tweak/tweak.rb +13 -0
  102. data/samples/standard/xml/README +16 -0
  103. data/samples/standard/xml/XML.g +123 -0
  104. data/samples/standard/xml/input +21 -0
  105. data/samples/standard/xml/output +39 -0
  106. data/samples/standard/xml/xml.rb +9 -0
  107. data/templates/Ruby.stg +4 -4
  108. data/test/functional/ast-output/auto-ast.rb +0 -5
  109. data/test/functional/ast-output/rewrites.rb +4 -4
  110. data/test/unit/test-scope.rb +45 -0
  111. metadata +96 -8
@@ -16,10 +16,10 @@ class RecordEventListener < TraceEventListener
16
16
  @events = []
17
17
  end
18
18
 
19
- def record(event_message, *interpolation_arguments)
19
+ def record( event_message, *interpolation_arguments )
20
20
  event_message = event_message.to_s
21
21
  @events << event_message % interpolation_arguments
22
22
  end
23
23
  end
24
24
  end # module Debug
25
- end # module ANTLR3
25
+ end # module ANTLR3
@@ -18,38 +18,38 @@ class RuleTracer
18
18
  attr_reader :level
19
19
  attr_accessor :spaces_per_indent, :device
20
20
 
21
- def initialize(options = {})
22
- @input = options[:input]
21
+ def initialize( options = {} )
22
+ @input = options[ :input ]
23
23
  @level = 0
24
- @spaces_per_indent = options[:spaces_per_indent] || 2
25
- @device = options[:device] || options[:output] || $stderr
24
+ @spaces_per_indent = options[ :spaces_per_indent ] || 2
25
+ @device = options[ :device ] || options[ :output ] || $stderr
26
26
  end
27
27
 
28
- def enter_rule(grammar_file, name)
28
+ def enter_rule( grammar_file, name )
29
29
  indent = @level * @spaces_per_indent
30
30
 
31
- @device.print(' ' * indent, ARROW_IN, name)
31
+ @device.print( ' ' * indent, ARROW_IN, name )
32
32
  if @input
33
33
  input_symbol = @input.look || :EOF
34
- @device.puts(" look = %p" % input_symbol)
35
- else @device.print("\n")
34
+ @device.puts( " look = %p" % input_symbol )
35
+ else @device.print( "\n" )
36
36
  end
37
37
 
38
38
  @level += 1
39
39
  end
40
40
 
41
- def exit_rule(grammar_file, name)
41
+ def exit_rule( grammar_file, name )
42
42
  @level -= 1
43
43
 
44
44
  indent = @level * @spaces_per_indent
45
45
 
46
- @device.print(' ' * indent, ARROW_OUT, name)
46
+ @device.print( ' ' * indent, ARROW_OUT, name )
47
47
  if @input
48
- input_symbol = (@input.look || :EOF)
49
- @device.puts(" look = %p" % input_symbol)
50
- else @device.print("\n")
48
+ input_symbol = ( @input.look || :EOF )
49
+ @device.puts( " look = %p" % input_symbol )
50
+ else @device.print( "\n" )
51
51
  end
52
52
  end
53
53
  end
54
54
  end
55
- end
55
+ end
@@ -21,43 +21,43 @@ class EventSocketProxy
21
21
 
22
22
  SOCKET_ADDR_PACK = 'snCCCCa8'.freeze
23
23
 
24
- def initialize(recognizer, options = {})
24
+ def initialize( recognizer, options = {} )
25
25
  super()
26
26
  @grammar_file_name = recognizer.grammar_file_name
27
- @adaptor = options[:adaptor]
28
- @port = options[:port] || DEFAULT_PORT
29
- @log = options[:log]
27
+ @adaptor = options[ :adaptor ]
28
+ @port = options[ :port ] || DEFAULT_PORT
29
+ @log = options[ :log ]
30
30
  @socket = nil
31
31
  @connection = nil
32
32
  end
33
33
 
34
- def log!(message, *interpolation_arguments)
35
- @log and @log.printf(message, *interpolation_arguments)
34
+ def log!( message, *interpolation_arguments )
35
+ @log and @log.printf( message, *interpolation_arguments )
36
36
  end
37
37
 
38
38
  def handshake
39
39
  unless @socket
40
40
  begin
41
- @socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
41
+ @socket = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
42
42
  @socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
43
- @socket.bind(Socket.pack_sockaddr_in( @port, '' ))
44
- @socket.listen(1)
45
- log!("waiting for incoming connection on port %i\n", @port)
43
+ @socket.bind( Socket.pack_sockaddr_in( @port, '' ) )
44
+ @socket.listen( 1 )
45
+ log!( "waiting for incoming connection on port %i\n", @port )
46
46
 
47
47
  @connection, addr = @socket.accept
48
- port, host = Socket.unpack_sockaddr_in(addr)
49
- log!("Accepted connection from %s:%s\n", host, port)
48
+ port, host = Socket.unpack_sockaddr_in( addr )
49
+ log!( "Accepted connection from %s:%s\n", host, port )
50
50
 
51
- @connection.setsockopt(Socket::SOL_TCP, Socket::TCP_NODELAY, 1)
51
+ @connection.setsockopt( Socket::SOL_TCP, Socket::TCP_NODELAY, 1 )
52
52
 
53
- write('ANTLR %s', PROTOCOL_VERSION)
54
- write('grammar %p', @grammar_file_name)
53
+ write( 'ANTLR %s', PROTOCOL_VERSION )
54
+ write( 'grammar %p', @grammar_file_name )
55
55
  ack
56
56
  rescue IOError => error
57
- log!("handshake failed due to an IOError:\n")
58
- log!(" %s: %s", error.class, error.message)
59
- log!(" Backtrace: ")
60
- log!(" - %s", error.backtrace.join("\n - "))
57
+ log!( "handshake failed due to an IOError:\n" )
58
+ log!( " %s: %s", error.class, error.message )
59
+ log!( " Backtrace: " )
60
+ log!( " - %s", error.backtrace.join( "\n - " ) )
61
61
  @connection and @connection.close
62
62
  @socket and @socket.close
63
63
  @socket = nil
@@ -67,21 +67,21 @@ class EventSocketProxy
67
67
  return self
68
68
  end
69
69
 
70
- def write(message, *interpolation_arguments)
70
+ def write( message, *interpolation_arguments )
71
71
  message << ?\n
72
- log!("---> #{message}", *interpolation_arguments)
73
- @connection.printf(message, *interpolation_arguments)
72
+ log!( "---> #{ message }", *interpolation_arguments )
73
+ @connection.printf( message, *interpolation_arguments )
74
74
  @connection.flush
75
75
  end
76
76
 
77
77
  def ack
78
78
  line = @connection.readline
79
- log!("<--- %s", line)
79
+ log!( "<--- %s", line )
80
80
  line
81
81
  end
82
82
 
83
- def transmit(event, *interpolation_arguments)
84
- write(event, *interpolation_arguments)
83
+ def transmit( event, *interpolation_arguments )
84
+ write( event, *interpolation_arguments )
85
85
  ack()
86
86
  rescue IOError
87
87
  @connection.close
@@ -134,21 +134,21 @@ class EventSocketProxy
134
134
  transmit "%s\t%s", :consume_hidden_token, serialize_token( token )
135
135
  end
136
136
 
137
- def look(i, item)
137
+ def look( i, item )
138
138
  case item
139
139
  when AST::Tree
140
140
  look_tree( i, item )
141
141
  when nil
142
142
  else
143
- transmit "%s\t%i\t%s", :look, i, serialize_token(item)
143
+ transmit "%s\t%i\t%s", :look, i, serialize_token( item )
144
144
  end
145
145
  end
146
146
 
147
- def mark(i)
147
+ def mark( i )
148
148
  transmit "%s\t%i", :mark, i
149
149
  end
150
150
 
151
- def rewind(i = nil)
151
+ def rewind( i = nil )
152
152
  i ? transmit( "%s\t%i", :rewind, i ) : transmit( '%s', :rewind )
153
153
  end
154
154
 
@@ -156,7 +156,7 @@ class EventSocketProxy
156
156
  transmit "%s\t%i", :begin_backtrack, level
157
157
  end
158
158
  def end_backtrack( level, successful )
159
- transmit "%s\t%i\t%p", :end_backtrack, level, (successful ? true : false)
159
+ transmit "%s\t%i\t%p", :end_backtrack, level, ( successful ? true : false )
160
160
  end
161
161
 
162
162
  def location( line, position )
@@ -177,7 +177,7 @@ class EventSocketProxy
177
177
  end
178
178
 
179
179
  def semantic_predicate( result, predicate )
180
- pure_boolean = !(!result)
180
+ pure_boolean = !( !result )
181
181
  transmit "%s\t%s\t%s", :semantic_predicate, pure_boolean, escape_newlines( predicate )
182
182
  end
183
183
 
@@ -230,9 +230,9 @@ class EventSocketProxy
230
230
  attr_accessor :adaptor
231
231
 
232
232
  def serialize_token( token )
233
- [token.token_index, token.type, token.channel,
233
+ [ token.token_index, token.type, token.channel,
234
234
  token.line, token.column,
235
- escape_newlines( token.text )].join( "\t" )
235
+ escape_newlines( token.text ) ].join( "\t" )
236
236
  end
237
237
 
238
238
  def serialize_node( node )
@@ -249,7 +249,7 @@ class EventSocketProxy
249
249
 
250
250
  def escape_newlines( text )
251
251
  text.inspect.tap do |t|
252
- t.gsub!(/%/, '%%')
252
+ t.gsub!( /%/, '%%' )
253
253
  end
254
254
  end
255
255
  end
@@ -263,7 +263,7 @@ over an IP socket.
263
263
  class RemoteEventSocketListener < ::Thread
264
264
  autoload :StringIO, 'stringio'
265
265
  ESCAPE_MAP = Hash.new { |h, k| k }
266
- ESCAPE_MAP.update(
266
+ ESCAPE_MAP.update(
267
267
  ?n => ?\n, ?t => ?\t, ?a => ?\a, ?b => ?\b, ?e => ?\e,
268
268
  ?f => ?\f, ?r => ?\r, ?v => ?\v
269
269
  )
@@ -288,33 +288,33 @@ class RemoteEventSocketListener < ::Thread
288
288
  private
289
289
 
290
290
  def handshake
291
- @version = @socket.readline.split("\t")[-1]
292
- @grammar_file = @socket.readline.split("\t")[-1]
291
+ @version = @socket.readline.split( "\t" )[ -1 ]
292
+ @grammar_file = @socket.readline.split( "\t" )[ -1 ]
293
293
  ack
294
294
  end
295
295
 
296
296
  def ack
297
- @socket.puts("ack")
297
+ @socket.puts( "ack" )
298
298
  @socket.flush
299
299
  end
300
300
 
301
- def unpack_event(event)
301
+ def unpack_event( event )
302
302
  event.nil? and raise( StopIteration )
303
303
  event.chomp!
304
- name, *elements = event.split("\t",-1)
304
+ name, *elements = event.split( "\t",-1 )
305
305
  name = name.to_sym
306
306
  name == :terminate and raise StopIteration
307
307
  elements.map! do |elem|
308
- elem.empty? and next(nil)
308
+ elem.empty? and next( nil )
309
309
  case elem
310
- when /^\d+$/ then Integer(elem)
311
- when /^\d+\.\d+$/ then Float(elem)
310
+ when /^\d+$/ then Integer( elem )
311
+ when /^\d+\.\d+$/ then Float( elem )
312
312
  when /^true$/ then true
313
313
  when /^false$/ then false
314
- when /^"(.*)"$/ then parse_string($1)
314
+ when /^"(.*)"$/ then parse_string( $1 )
315
315
  end
316
316
  end
317
- elements.unshift(name)
317
+ elements.unshift( name )
318
318
  return( elements )
319
319
  end
320
320
 
@@ -325,7 +325,7 @@ private
325
325
  end
326
326
 
327
327
  def connect
328
- TCPSocket.open(@host, @port) do |socket|
328
+ TCPSocket.open( @host, @port ) do |socket|
329
329
  @socket = socket
330
330
  yield
331
331
  end
@@ -357,4 +357,4 @@ private
357
357
 
358
358
  end # class RemoteEventSocketListener
359
359
  end # module Debug
360
- end # module ANTLR3
360
+ end # module ANTLR3
@@ -14,15 +14,15 @@ stdout) to record the events in a different way.
14
14
  class TraceEventListener
15
15
  include EventListener
16
16
 
17
- def initialize(adaptor = nil, device = $stderr)
17
+ def initialize( adaptor = nil, device = $stderr )
18
18
  super()
19
19
  @device = device
20
20
  @adaptor = adaptor ||= ANTLR3::AST::CommonTreeAdaptor.new
21
21
  end
22
22
 
23
- def record(event_message, *interpolation_arguments)
23
+ def record( event_message, *interpolation_arguments )
24
24
  event_message = event_message.to_s << "\n"
25
- @device.printf(event_message, *interpolation_arguments)
25
+ @device.printf( event_message, *interpolation_arguments )
26
26
  end
27
27
 
28
28
  def enter_alternative( alt_number )
@@ -50,11 +50,11 @@ class TraceEventListener
50
50
  end
51
51
 
52
52
  def consume_node( tree )
53
- record '(%s) unique_id=%s text=%p type=%s[%s]', __method__, @adaptor.unique_id(tree),
54
- @adaptor.text_of(tree), @adaptor.type_name( tree ), @adaptor.type_of(tree)
53
+ record '(%s) unique_id=%s text=%p type=%s[%s]', __method__, @adaptor.unique_id( tree ),
54
+ @adaptor.text_of( tree ), @adaptor.type_name( tree ), @adaptor.type_of( tree )
55
55
  end
56
56
 
57
- def look(i, tree)
57
+ def look( i, tree )
58
58
  record '(%s): k=%s unique_id=%s text=%p type=%s[%s]', __method__, i, @adaptor.unique_id( tree ),
59
59
  @adaptor.text_of( tree ), @adaptor.type_name( tree ), @adaptor.type_of( tree )
60
60
  end
@@ -63,7 +63,7 @@ class TraceEventListener
63
63
  record '(%s): unique_id=%s', __method__, @adaptor.unique_id( tree )
64
64
  end
65
65
 
66
- def create_node(tree, token = nil)
66
+ def create_node( tree, token = nil )
67
67
  unless token
68
68
  record '(%s): unique_id=%s text=%p type=%s[%s]', __method__, @adaptor.unique_id( tree ),
69
69
  @adaptor.text_of( tree ), @adaptor.type_name( tree ), @adaptor.type_of( tree )
@@ -89,4 +89,4 @@ class TraceEventListener
89
89
  end
90
90
  end # class TraceEventListener
91
91
  end # module Debug
92
- end # module ANTLR3
92
+ end # module ANTLR3
@@ -378,6 +378,7 @@ class ParserMain < Main
378
378
  @parser_class = parser_class
379
379
  @parser_rule = options[ :parser_rule ]
380
380
  if @debug = ( @parser_class.debug? rescue false )
381
+ @trace = options.fetch( :trace, nil )
381
382
  @port = options.fetch( :port, ANTLR3::Debug::DEFAULT_PORT )
382
383
  @log = options.fetch( :log, @error )
383
384
  end
@@ -408,6 +409,10 @@ class ParserMain < Main
408
409
  opt.separator ''
409
410
  opt.separator "Debug Mode Options:"
410
411
 
412
+ opt.on( '--trace', '-t', "print rule trace instead of opening a debug socket" ) do
413
+ @trace = true
414
+ end
415
+
411
416
  opt.on( '--port NUMBER', Integer, "port number to use for the debug socket" ) do |number|
412
417
  @port = number
413
418
  end
@@ -440,8 +445,12 @@ class ParserMain < Main
440
445
  def recognize( in_stream )
441
446
  parser_options = {}
442
447
  if @debug
443
- parser_options[ :port ] = @port
444
- parser_options[ :log ] = @log
448
+ if @trace
449
+ parser_options[ :debug_listener ] = ANTLR3::Debug::RuleTracer.new
450
+ else
451
+ parser_options[ :port ] = @port
452
+ parser_options[ :log ] = @log
453
+ end
445
454
  end
446
455
  lexer = @lexer_class.new( in_stream )
447
456
  # token_stream = CommonTokenStream.new( lexer )
@@ -494,24 +503,35 @@ class WalkerMain < Main
494
503
  opt.separator ''
495
504
  opt.separator "Tree Parser Configuration:"
496
505
 
497
- opt.on( '--lexer-name CLASS_NAME' ) { |val| @lexer_class_name = val }
498
- opt.on( '--lexer-file PATH_TO_LIBRARY' ) { |val|
506
+ opt.on( '--lexer-name CLASS_NAME', 'full name of the lexer class to use' ) { |val| @lexer_class_name = val }
507
+ opt.on(
508
+ '--lexer-file PATH_TO_LIBRARY',
509
+ 'path to load to make the lexer class available'
510
+ ) { |val|
499
511
  begin
500
512
  test( ?f, val ) ? load( val ) : require( val )
501
513
  rescue LoadError
502
- warn( "unable to load the library specified by --lexer-file: #{ $! }" )
514
+ warn( "unable to load the library `#{ val }' specified by --lexer-file: #{ $! }" )
503
515
  end
504
516
  }
505
- opt.on( '--parser-name CLASS_NAME' ) { |val| @parser_class_name = val }
506
- opt.on( '--parser-file PATH_TO_LIBRARY' ) { |val|
517
+
518
+ opt.on(
519
+ '--parser-name CLASS_NAME',
520
+ 'full name of the parser class to use'
521
+ ) { |val| @parser_class_name = val }
522
+ opt.on(
523
+ '--parser-file PATH_TO_LIBRARY',
524
+ 'path to load to make the parser class available'
525
+ ) { |val|
507
526
  begin
508
527
  test( ?f, val ) ? load( val ) : require( val )
509
528
  rescue LoadError
510
529
  warn( "unable to load the library specified by --parser-file: #{ $! }" )
511
530
  end
512
531
  }
513
- opt.on( '--parser-rule NAME' ) { |val| @parser_rule = val }
514
- opt.on( '--rule NAME' ) { |val| @walker_rule = val }
532
+
533
+ opt.on( '--parser-rule NAME', "name of the parser rule to use on the input" ) { |val| @parser_rule = val }
534
+ opt.on( '--rule NAME', "name of the rule to invoke in the tree parser" ) { |val| @walker_rule = val }
515
535
 
516
536
  if @debug
517
537
  opt.separator ''
@@ -7,15 +7,15 @@ module ANTLR3
7
7
  module ASTBuilder
8
8
  extend ClassMacros
9
9
 
10
- def self.included(klass)
10
+ def self.included( klass )
11
11
  def klass.return_scope_members
12
- super.push(:tree)
12
+ super.push( :tree )
13
13
  end
14
14
  end
15
15
 
16
16
  def initialize( input, options = {} )
17
- @adaptor = options[:adaptor] ||= begin
18
- (input.adaptor rescue nil) or
17
+ @adaptor = options[ :adaptor ] ||= begin
18
+ ( input.adaptor rescue nil ) or
19
19
  AST::CommonTreeAdaptor.new( token_class )
20
20
  end
21
21
  super( input, options )
@@ -25,15 +25,15 @@ module ASTBuilder
25
25
 
26
26
  private
27
27
 
28
- def subtree_stream(desc, element = nil)
28
+ def subtree_stream( desc, element = nil )
29
29
  AST::RewriteRuleSubtreeStream.new( @adaptor, desc, element )
30
30
  end
31
31
 
32
- def token_stream(desc, element = nil)
32
+ def token_stream( desc, element = nil )
33
33
  AST::RewriteRuleTokenStream.new( @adaptor, desc, element )
34
34
  end
35
35
 
36
- def node_stream(desc, element = nil)
36
+ def node_stream( desc, element = nil )
37
37
  AST::RewriteRuleNodeStream.new( @adaptor, desc, element )
38
38
  end
39
39
  end
@@ -17,40 +17,42 @@ lexer filter mode.
17
17
  =end
18
18
  module FilterMode
19
19
  def next_token
20
+ # if at end-of-file, return the EOF token
20
21
  @input.peek == ANTLR3::EOF and return ANTLR3::EOF_TOKEN
21
- @state.token = nil
22
- @state.channel = ANTLR3::DEFAULT_CHANNEL
22
+
23
+ @state.token = nil
24
+ @state.channel = ANTLR3::DEFAULT_CHANNEL
23
25
  @state.token_start_position = @input.index
24
- @state.token_start_column = @input.column
25
- @state.token_start_line = @input.line
26
- @state.text = nil
27
- @state.backtracking = 1
26
+ @state.token_start_column = @input.column
27
+ @state.token_start_line = @input.line
28
+ @state.text = nil
29
+ @state.backtracking = 1
30
+
28
31
  m = @input.mark
29
- # means we won't throw slow exception
30
32
  token!
31
- @input.release(m)
33
+ @input.release( m )
32
34
  emit
33
35
  return @state.token
34
36
  rescue ANTLR3::BacktrackingFailed
35
37
  # token! backtracks with synpred at backtracking==2
36
38
  # and we set the synpredgate to allow actions at level 1.
37
- @input.rewind(m)
38
- @input.consume # advance one char and try again
39
+ @input.rewind( m )
40
+ @input.consume # advance one char and try again
39
41
  retry
40
42
  rescue ANTLR3::Error::RecognitionError => re
41
43
  # shouldn't happen in backtracking mode, but...
42
- report_error(re)
43
- recover(re)
44
+ report_error( re )
45
+ recover( re )
44
46
  ensure
45
47
  @state.backtracking = 0
46
48
  end
47
49
 
48
- def memoize(rule, start_index, success)
49
- super(rule, start_index, success) if @state.backtracking > 1
50
+ def memoize( rule, start_index, success )
51
+ super( rule, start_index, success ) if @state.backtracking > 1
50
52
  end
51
53
 
52
- def already_parsed_rule?(rule)
53
- @state.backtracking > 1 ? super(rule) : false
54
+ def already_parsed_rule?( rule )
55
+ @state.backtracking > 1 ? super( rule ) : false
54
56
  end
55
57
  end
56
- end
58
+ end