antlr3 1.7.5 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/java/RubyTarget.java +50 -16
- data/java/antlr-full-3.2.1.jar +0 -0
- data/lib/antlr3/streams.rb +82 -41
- data/lib/antlr3/template/group-file-lexer.rb +59 -59
- data/lib/antlr3/template/group-file-parser.rb +6 -6
- data/lib/antlr3/test/functional.rb +64 -36
- data/lib/antlr3/version.rb +2 -2
- data/templates/Ruby.stg +1 -1
- data/test/functional/ast-output/auto-ast.rb +86 -86
- data/test/functional/ast-output/construction.rb +14 -15
- data/test/functional/ast-output/hetero-nodes.rb +63 -66
- data/test/functional/ast-output/rewrites.rb +119 -120
- data/test/functional/ast-output/tree-rewrite.rb +96 -96
- data/test/functional/debugging/debug-mode.rb +379 -379
- data/test/functional/debugging/profile-mode.rb +6 -6
- data/test/functional/debugging/rule-tracing.rb +4 -5
- data/test/functional/delegation/import.rb +32 -32
- data/test/functional/lexer/basic.rb +27 -27
- data/test/functional/lexer/filter-mode.rb +6 -7
- data/test/functional/lexer/nuances.rb +2 -3
- data/test/functional/lexer/properties.rb +7 -8
- data/test/functional/lexer/syn-pred.rb +1 -2
- data/test/functional/lexer/xml.rb +3 -3
- data/test/functional/main/main-scripts.rb +37 -37
- data/test/functional/parser/actions.rb +8 -8
- data/test/functional/parser/backtracking.rb +1 -2
- data/test/functional/parser/basic.rb +10 -10
- data/test/functional/parser/calc.rb +9 -9
- data/test/functional/parser/ll-star.rb +3 -3
- data/test/functional/parser/nuances.rb +4 -5
- data/test/functional/parser/predicates.rb +3 -4
- data/test/functional/parser/properties.rb +14 -14
- data/test/functional/parser/rule-methods.rb +8 -7
- data/test/functional/parser/scopes.rb +15 -16
- data/test/functional/template-output/template-output.rb +1 -1
- data/test/functional/token-rewrite/basic.rb +60 -61
- data/test/functional/token-rewrite/via-parser.rb +3 -4
- data/test/functional/tree-parser/basic.rb +30 -31
- data/test/unit/test-streams.rb +10 -10
- data/test/unit/test-template.rb +1 -1
- metadata +2 -2
@@ -2,10 +2,10 @@
|
|
2
2
|
#
|
3
3
|
# GroupFile.g
|
4
4
|
#
|
5
|
-
# Generated using ANTLR version: 3.2.1-SNAPSHOT
|
6
|
-
# Ruby runtime library version: 1.7.
|
5
|
+
# Generated using ANTLR version: 3.2.1-SNAPSHOT Jun 18, 2010 05:38:11
|
6
|
+
# Ruby runtime library version: 1.7.5
|
7
7
|
# Input grammar file: GroupFile.g
|
8
|
-
# Generated at: 2010-
|
8
|
+
# Generated at: 2010-07-03 23:15:35
|
9
9
|
#
|
10
10
|
|
11
11
|
# ~~~> start load path setup
|
@@ -16,7 +16,7 @@ antlr_load_failed = proc do
|
|
16
16
|
load_path = $LOAD_PATH.map { |dir| ' - ' << dir }.join( $/ )
|
17
17
|
raise LoadError, <<-END.strip!
|
18
18
|
|
19
|
-
Failed to load the ANTLR3 runtime library (version 1.7.
|
19
|
+
Failed to load the ANTLR3 runtime library (version 1.7.5):
|
20
20
|
|
21
21
|
Ensure the library has been installed on your system and is available
|
22
22
|
on the load path. If rubygems is available on your system, this can
|
@@ -46,7 +46,7 @@ rescue LoadError
|
|
46
46
|
|
47
47
|
# 3: try to activate the antlr3 gem
|
48
48
|
begin
|
49
|
-
Gem.activate( 'antlr3', '~> 1.7.
|
49
|
+
Gem.activate( 'antlr3', '~> 1.7.5' )
|
50
50
|
rescue Gem::LoadError
|
51
51
|
antlr_load_failed.call
|
52
52
|
end
|
@@ -103,7 +103,7 @@ module GroupFile
|
|
103
103
|
include TokenData
|
104
104
|
|
105
105
|
begin
|
106
|
-
generated_using( "GroupFile.g", "3.2.1-SNAPSHOT
|
106
|
+
generated_using( "GroupFile.g", "3.2.1-SNAPSHOT Jun 18, 2010 05:38:11", "1.7.5" )
|
107
107
|
rescue NoMethodError => error
|
108
108
|
# ignore
|
109
109
|
end
|
@@ -22,28 +22,33 @@ module Location
|
|
22
22
|
File.dirname( test_path )
|
23
23
|
end
|
24
24
|
|
25
|
-
def local_path(*parts)
|
25
|
+
def local_path( *parts )
|
26
26
|
File.join( test_directory, *parts )
|
27
27
|
end
|
28
28
|
|
29
|
-
def output_directory(name = test_group)
|
29
|
+
def output_directory( name = test_group )
|
30
30
|
local_path( name )
|
31
31
|
end
|
32
32
|
|
33
33
|
end # module Location
|
34
34
|
|
35
35
|
module NameSpace
|
36
|
+
|
37
|
+
#
|
38
|
+
# import( ruby_file ) => [ new constants, ... ]
|
39
|
+
# Read the source code from the path given by +ruby_file+ and
|
40
|
+
# evaluate it within the class body. Return new constants
|
41
|
+
# created in the class after the evaluation.
|
42
|
+
#
|
36
43
|
def import( ruby_file )
|
37
44
|
constants_before = constants
|
38
|
-
class_eval(File.read(ruby_file), ruby_file, 1)
|
45
|
+
class_eval( File.read( ruby_file ), ruby_file, 1 )
|
39
46
|
constants - constants_before
|
40
47
|
end
|
41
48
|
|
42
|
-
def import_grammar_targets(grammar)
|
43
|
-
# reverse because delegates need to be in the test class's name
|
44
|
-
# space before the masters
|
49
|
+
def import_grammar_targets( grammar )
|
45
50
|
for file in grammar.target_files
|
46
|
-
import(file)
|
51
|
+
import( file )
|
47
52
|
end
|
48
53
|
end
|
49
54
|
end
|
@@ -59,22 +64,40 @@ module GrammarManager
|
|
59
64
|
end
|
60
65
|
module_function :add_default_compile_option
|
61
66
|
|
62
|
-
if ANTLR_JAR = ENV['ANTLR_JAR'] || ANTLR3.antlr_jar
|
67
|
+
if ANTLR_JAR = ENV[ 'ANTLR_JAR' ] || ANTLR3.antlr_jar
|
63
68
|
add_default_compile_option( :antlr_jar, ANTLR_JAR )
|
64
69
|
|
65
70
|
Grammar.global_dependency( ANTLR_JAR )
|
66
71
|
end
|
67
72
|
|
73
|
+
#
|
74
|
+
# Compile and load inline grammars on demand when their constant name
|
75
|
+
# is referenced in the code. This makes it easier to catch big errors
|
76
|
+
# quickly as test cases are run, instead of waiting a few minutes
|
77
|
+
# for all grammars to compile, and then discovering there's a big dumb
|
78
|
+
# error ruining most of the grammars.
|
79
|
+
#
|
68
80
|
def const_missing( name )
|
69
81
|
if g = grammars[ name.to_s ]
|
70
82
|
compile( g )
|
71
83
|
grammars.delete( name.to_s )
|
72
84
|
const_get( name )
|
85
|
+
elsif superclass.respond_to?( :grammars )
|
86
|
+
superclass.const_missing( name )
|
87
|
+
# ^-- for some reason, in ruby 1.9, rspec runs examples as instances of
|
88
|
+
# anonymous subclasses, of the actual test class, which messes up the
|
89
|
+
# assumptions made in the test code. Grammars are stored in @grammars belonging
|
90
|
+
# to the test class, so in 1.9, this method is called with @grammars = {}
|
91
|
+
# since it's a subclass
|
73
92
|
else
|
74
93
|
super
|
75
94
|
end
|
76
95
|
end
|
77
96
|
|
97
|
+
#
|
98
|
+
# An index of grammar file objects created in the test class
|
99
|
+
# (defined inline or loaded from a file)
|
100
|
+
#
|
78
101
|
def grammars
|
79
102
|
@grammars ||= {}
|
80
103
|
end
|
@@ -91,38 +114,39 @@ module GrammarManager
|
|
91
114
|
return grammar
|
92
115
|
end
|
93
116
|
|
94
|
-
def inline_grammar(source, options = {})
|
95
|
-
call = call_stack.find { |call| call.file != __FILE__}
|
117
|
+
def inline_grammar( source, options = {} )
|
118
|
+
call = call_stack.find { |call| call.file != __FILE__ }
|
96
119
|
grammar = Grammar.inline source,
|
97
120
|
:output_directory => output_directory,
|
98
|
-
:file => (call.file rescue nil),
|
99
|
-
:line => (call.line rescue nil)
|
100
|
-
register_grammar(grammar)
|
121
|
+
:file => ( call.file rescue nil ),
|
122
|
+
:line => ( call.line rescue nil )
|
123
|
+
register_grammar( grammar )
|
101
124
|
return grammar
|
102
125
|
end
|
103
126
|
|
104
|
-
def compile_options(defaults = nil)
|
127
|
+
def compile_options( defaults = nil )
|
105
128
|
@compile_options ||= DEFAULT_COMPILE_OPTIONS.clone
|
106
|
-
@compile_options.update(defaults) if defaults
|
129
|
+
@compile_options.update( defaults ) if defaults
|
107
130
|
return @compile_options
|
108
131
|
end
|
109
132
|
|
110
|
-
def compile(grammar, options = {})
|
111
|
-
grammar.compile( compile_options.merge(options) )
|
133
|
+
def compile( grammar, options = {} )
|
134
|
+
grammar.compile( compile_options.merge( options ) )
|
112
135
|
import_grammar_targets( grammar )
|
113
136
|
return grammar
|
114
137
|
end
|
115
138
|
|
116
139
|
private
|
117
140
|
|
118
|
-
def register_grammar(grammar)
|
141
|
+
def register_grammar( grammar )
|
119
142
|
name = grammar.name
|
143
|
+
@grammars ||= {}
|
120
144
|
|
121
|
-
if conflict = grammars[ name ] and conflict.source != grammar.source
|
122
|
-
message = "Multiple grammars exist with the name ``#{name}''"
|
145
|
+
if conflict = @grammars[ name ] and conflict.source != grammar.source
|
146
|
+
message = "Multiple grammars exist with the name ``#{ name }''"
|
123
147
|
raise NameError, message
|
124
148
|
else
|
125
|
-
grammars[ name ] = grammar
|
149
|
+
@grammars[ name ] = grammar
|
126
150
|
end
|
127
151
|
end
|
128
152
|
end # module GrammarManager
|
@@ -130,13 +154,17 @@ end # module GrammarManager
|
|
130
154
|
class Functional < ::Test::Unit::TestCase
|
131
155
|
extend GrammarManager
|
132
156
|
|
133
|
-
def self.inherited(klass)
|
157
|
+
def self.inherited( klass )
|
158
|
+
super
|
159
|
+
klass.test_path = call_stack[ 0 ].file
|
160
|
+
end
|
161
|
+
|
162
|
+
def self.example( *args, &b )
|
134
163
|
super
|
135
|
-
klass.test_path = call_stack[0].file
|
136
164
|
end
|
137
165
|
|
138
|
-
def local_path(*args)
|
139
|
-
self.class.local_path(*args)
|
166
|
+
def local_path( *args )
|
167
|
+
self.class.local_path( *args )
|
140
168
|
end
|
141
169
|
|
142
170
|
def test_path
|
@@ -148,7 +176,7 @@ class Functional < ::Test::Unit::TestCase
|
|
148
176
|
end
|
149
177
|
|
150
178
|
def inline_grammar( source )
|
151
|
-
call = call_stack.find { |call| call.file != __FILE__}
|
179
|
+
call = call_stack.find { |call| call.file != __FILE__ }
|
152
180
|
grammar = Grammar.inline source,
|
153
181
|
:output_directory => output_directory,
|
154
182
|
:file => call.file,
|
@@ -165,7 +193,7 @@ end # class Functional
|
|
165
193
|
module CaptureOutput
|
166
194
|
require 'stringio'
|
167
195
|
def output_buffer
|
168
|
-
defined?(@output_buffer) or @output_buffer = StringIO.new('')
|
196
|
+
defined?( @output_buffer ) or @output_buffer = StringIO.new( '' )
|
169
197
|
@output_buffer
|
170
198
|
end
|
171
199
|
|
@@ -173,35 +201,35 @@ module CaptureOutput
|
|
173
201
|
output_buffer.string
|
174
202
|
end
|
175
203
|
|
176
|
-
def say(*args)
|
177
|
-
output_buffer.puts(*args)
|
204
|
+
def say( *args )
|
205
|
+
output_buffer.puts( *args )
|
178
206
|
end
|
179
207
|
|
180
|
-
def capture(*args)
|
181
|
-
output_buffer.write(*args)
|
208
|
+
def capture( *args )
|
209
|
+
output_buffer.write( *args )
|
182
210
|
end
|
183
211
|
end
|
184
212
|
|
185
213
|
module RaiseErrors
|
186
|
-
def emit_error_message(msg)
|
214
|
+
def emit_error_message( msg )
|
187
215
|
# do nothing
|
188
216
|
end
|
189
217
|
|
190
|
-
def report_error(error)
|
218
|
+
def report_error( error )
|
191
219
|
raise error
|
192
220
|
end
|
193
221
|
end
|
194
222
|
|
195
223
|
module CollectErrors
|
196
224
|
def reported_errors
|
197
|
-
defined?(@reported_errors) or @reported_errors = []
|
225
|
+
defined?( @reported_errors ) or @reported_errors = []
|
198
226
|
return @reported_errors
|
199
227
|
end
|
200
228
|
|
201
|
-
def emit_error_message(msg)
|
229
|
+
def emit_error_message( msg )
|
202
230
|
reported_errors << msg
|
203
231
|
end
|
204
232
|
end
|
205
233
|
|
206
234
|
end # module Test
|
207
|
-
end # module ANTLR3
|
235
|
+
end # module ANTLR3
|
data/lib/antlr3/version.rb
CHANGED
@@ -19,8 +19,8 @@ module ANTLR3
|
|
19
19
|
# The version data for the current state the library itself
|
20
20
|
#
|
21
21
|
MAJOR_VERSION = 1
|
22
|
-
MINOR_VERSION =
|
23
|
-
PATCH_VERSION =
|
22
|
+
MINOR_VERSION = 8
|
23
|
+
PATCH_VERSION = 0
|
24
24
|
VERSION = [ MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION ]
|
25
25
|
VERSION_STRING = VERSION.join( '.' ).freeze
|
26
26
|
|
data/templates/Ruby.stg
CHANGED
@@ -5,60 +5,60 @@ require 'antlr3/test/functional'
|
|
5
5
|
|
6
6
|
class TestAutoAST < ANTLR3::Test::Functional
|
7
7
|
|
8
|
-
def parse(grammar, rule, input, expect_errors = false)
|
9
|
-
@grammar = inline_grammar(grammar)
|
8
|
+
def parse( grammar, rule, input, expect_errors = false )
|
9
|
+
@grammar = inline_grammar( grammar )
|
10
10
|
compile_and_load @grammar
|
11
|
-
grammar_module = self.class.const_get(@grammar.name)
|
11
|
+
grammar_module = self.class.const_get( @grammar.name )
|
12
12
|
|
13
|
-
grammar_module::Lexer.send(:include, ANTLR3::Test::CollectErrors)
|
14
|
-
grammar_module::Lexer.send(:include, ANTLR3::Test::CaptureOutput)
|
15
|
-
grammar_module::Parser.send(:include, ANTLR3::Test::CollectErrors)
|
16
|
-
grammar_module::Parser.send(:include, ANTLR3::Test::CaptureOutput)
|
13
|
+
grammar_module::Lexer.send( :include, ANTLR3::Test::CollectErrors )
|
14
|
+
grammar_module::Lexer.send( :include, ANTLR3::Test::CaptureOutput )
|
15
|
+
grammar_module::Parser.send( :include, ANTLR3::Test::CollectErrors )
|
16
|
+
grammar_module::Parser.send( :include, ANTLR3::Test::CaptureOutput )
|
17
17
|
|
18
18
|
lexer = grammar_module::Lexer.new( input )
|
19
19
|
parser = grammar_module::Parser.new( lexer )
|
20
20
|
|
21
|
-
r = parser.send(rule)
|
21
|
+
r = parser.send( rule )
|
22
22
|
parser.reported_errors.should be_empty unless expect_errors
|
23
23
|
result = ''
|
24
24
|
|
25
25
|
unless r.nil?
|
26
|
-
result += r.result if r.respond_to?(:result)
|
26
|
+
result += r.result if r.respond_to?( :result )
|
27
27
|
result += r.tree.inspect if r.tree
|
28
28
|
end
|
29
|
-
return(expect_errors ? [result, parser.reported_errors] : result)
|
29
|
+
return( expect_errors ? [ result, parser.reported_errors ] : result )
|
30
30
|
end
|
31
31
|
|
32
|
-
def tree_parse(grammar, tree_grammar, rule, tree_rule, input)
|
33
|
-
@grammar = inline_grammar(grammar)
|
34
|
-
@tree_grammar = inline_grammar(tree_grammar)
|
32
|
+
def tree_parse( grammar, tree_grammar, rule, tree_rule, input )
|
33
|
+
@grammar = inline_grammar( grammar )
|
34
|
+
@tree_grammar = inline_grammar( tree_grammar )
|
35
35
|
compile_and_load @grammar
|
36
36
|
compile_and_load @tree_grammar
|
37
37
|
|
38
|
-
grammar_module = self.class.const_get(@grammar.name)
|
39
|
-
tree_grammar_module = self.class.const_get(@tree_grammar.name)
|
38
|
+
grammar_module = self.class.const_get( @grammar.name )
|
39
|
+
tree_grammar_module = self.class.const_get( @tree_grammar.name )
|
40
40
|
|
41
|
-
grammar_module::Lexer.send(:include, ANTLR3::Test::CollectErrors)
|
42
|
-
grammar_module::Lexer.send(:include, ANTLR3::Test::CaptureOutput)
|
43
|
-
grammar_module::Parser.send(:include, ANTLR3::Test::CollectErrors)
|
44
|
-
grammar_module::Parser.send(:include, ANTLR3::Test::CaptureOutput)
|
45
|
-
tree_grammar_module::TreeParser.send(:include, ANTLR3::Test::CollectErrors)
|
46
|
-
tree_grammar_module::TreeParser.send(:include, ANTLR3::Test::CaptureOutput)
|
41
|
+
grammar_module::Lexer.send( :include, ANTLR3::Test::CollectErrors )
|
42
|
+
grammar_module::Lexer.send( :include, ANTLR3::Test::CaptureOutput )
|
43
|
+
grammar_module::Parser.send( :include, ANTLR3::Test::CollectErrors )
|
44
|
+
grammar_module::Parser.send( :include, ANTLR3::Test::CaptureOutput )
|
45
|
+
tree_grammar_module::TreeParser.send( :include, ANTLR3::Test::CollectErrors )
|
46
|
+
tree_grammar_module::TreeParser.send( :include, ANTLR3::Test::CaptureOutput )
|
47
47
|
|
48
48
|
lexer = grammar_module::Lexer.new( input )
|
49
49
|
parser = grammar.module::Parser.new( lexer )
|
50
|
-
r = parser.send(rule)
|
50
|
+
r = parser.send( rule )
|
51
51
|
nodes = ANTLR3::CommonTreeNodeStream( r.tree )
|
52
52
|
nodes.token_stream = parser.input
|
53
53
|
walker = tree_grammar_module::TreeParser.new( nodes )
|
54
|
-
r = walker.send(tree_rule)
|
54
|
+
r = walker.send( tree_rule )
|
55
55
|
|
56
|
-
return(r ? r.tree.inspect : '')
|
56
|
+
return( r ? r.tree.inspect : '' )
|
57
57
|
end
|
58
58
|
|
59
59
|
|
60
60
|
example 'flat token list' do
|
61
|
-
result = parse(<<-'END', :a, 'abc 34')
|
61
|
+
result = parse( <<-'END', :a, 'abc 34' )
|
62
62
|
grammar TokenList;
|
63
63
|
options {language=Ruby;output=AST;}
|
64
64
|
a : ID INT ;
|
@@ -70,7 +70,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
70
70
|
end
|
71
71
|
|
72
72
|
example 'token list in a single-alternative subrule' do
|
73
|
-
result = parse(<<-'END', :a, 'abc 34')
|
73
|
+
result = parse( <<-'END', :a, 'abc 34' )
|
74
74
|
grammar TokenListInSingleAltBlock;
|
75
75
|
options {language=Ruby;output=AST;}
|
76
76
|
a : (ID INT) ;
|
@@ -82,7 +82,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
82
82
|
end
|
83
83
|
|
84
84
|
example "simple root at the outer level via the `^' operator" do
|
85
|
-
result = parse(<<-'END', :a, 'abc 34')
|
85
|
+
result = parse( <<-'END', :a, 'abc 34' )
|
86
86
|
grammar SimpleRootAtOuterLevel;
|
87
87
|
options {language=Ruby;output=AST;}
|
88
88
|
a : ID^ INT ;
|
@@ -94,7 +94,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
94
94
|
end
|
95
95
|
|
96
96
|
example "outer-level root changing token order from the `^' operator" do
|
97
|
-
result = parse(<<-'END', :a, '34 abc')
|
97
|
+
result = parse( <<-'END', :a, '34 abc' )
|
98
98
|
grammar SimpleRootAtOuterLevelReverse;
|
99
99
|
options {language=Ruby;output=AST;}
|
100
100
|
a : INT ID^ ;
|
@@ -106,7 +106,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
106
106
|
end
|
107
107
|
|
108
108
|
example "leaving out tokens using the `!' operator" do
|
109
|
-
result = parse(<<-'END', :a, 'abc 34 dag 4532')
|
109
|
+
result = parse( <<-'END', :a, 'abc 34 dag 4532' )
|
110
110
|
grammar Bang;
|
111
111
|
options {language=Ruby;output=AST;}
|
112
112
|
a : ID INT! ID! INT ;
|
@@ -119,7 +119,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
119
119
|
end
|
120
120
|
|
121
121
|
example "tokens in `(...)?' optional subrule" do
|
122
|
-
result = parse(<<-'END', :a, 'a 1 b')
|
122
|
+
result = parse( <<-'END', :a, 'a 1 b' )
|
123
123
|
grammar OptionalThenRoot;
|
124
124
|
options {language=Ruby;output=AST;}
|
125
125
|
a : ( ID INT )? ID^ ;
|
@@ -131,7 +131,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
131
131
|
end
|
132
132
|
|
133
133
|
example "labeled literal-string root token" do
|
134
|
-
result = parse(<<-'END', :a, 'void foo;')
|
134
|
+
result = parse( <<-'END', :a, 'void foo;' )
|
135
135
|
grammar LabeledStringRoot;
|
136
136
|
options {language=Ruby;output=AST;}
|
137
137
|
a : v='void'^ ID ';' ;
|
@@ -143,7 +143,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
143
143
|
end
|
144
144
|
|
145
145
|
example 'rule with token wildcard' do
|
146
|
-
result = parse(<<-'END', :a, 'void foo;')
|
146
|
+
result = parse( <<-'END', :a, 'void foo;' )
|
147
147
|
grammar Wildcard;
|
148
148
|
options {language=Ruby;output=AST;}
|
149
149
|
a : v='void'^ . ';' ;
|
@@ -155,7 +155,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
155
155
|
end
|
156
156
|
|
157
157
|
example "token wildcard as root via the `^' operator" do
|
158
|
-
result = parse(<<-'END', :a, 'void foo;')
|
158
|
+
result = parse( <<-'END', :a, 'void foo;' )
|
159
159
|
grammar WildcardRoot;
|
160
160
|
options {language=Ruby;output=AST;}
|
161
161
|
a : v='void' .^ ';' ;
|
@@ -167,7 +167,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
167
167
|
end
|
168
168
|
|
169
169
|
example "labeled token wildcard as root via the `^' operator" do
|
170
|
-
result = parse(<<-'END', :a, 'void foo;')
|
170
|
+
result = parse( <<-'END', :a, 'void foo;' )
|
171
171
|
grammar WildcardRootWithLabel;
|
172
172
|
options {language=Ruby;output=AST;}
|
173
173
|
a : v='void' x=.^ ';' ;
|
@@ -180,7 +180,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
180
180
|
|
181
181
|
|
182
182
|
example "token wildcard as root (with list label)" do
|
183
|
-
result = parse(<<-'END', :a, 'void foo;')
|
183
|
+
result = parse( <<-'END', :a, 'void foo;' )
|
184
184
|
grammar WildcardRootWithListLabel;
|
185
185
|
options {language=Ruby;output=AST;}
|
186
186
|
a : v='void' x=.^ ';' ;
|
@@ -193,7 +193,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
193
193
|
end
|
194
194
|
|
195
195
|
example "trashed token wildcard" do
|
196
|
-
result = parse(<<-'END', :a, 'void foo;')
|
196
|
+
result = parse( <<-'END', :a, 'void foo;' )
|
197
197
|
grammar WildcardBangWithListLabel;
|
198
198
|
options {language=Ruby;output=AST;}
|
199
199
|
a : v='void' x=.! ';' ;
|
@@ -206,7 +206,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
206
206
|
end
|
207
207
|
|
208
208
|
example "multiple occurences of the `^' operator in a list of tokens" do
|
209
|
-
result = parse(<<-'END', :a, 'a 34 c')
|
209
|
+
result = parse( <<-'END', :a, 'a 34 c' )
|
210
210
|
grammar RootRoot;
|
211
211
|
options {language=Ruby;output=AST;}
|
212
212
|
a : ID^ INT^ ID ;
|
@@ -219,7 +219,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
219
219
|
end
|
220
220
|
|
221
221
|
example "another case of multiple occurences of the `^' operator" do
|
222
|
-
result = parse(<<-'END', :a, 'a 34 c')
|
222
|
+
result = parse( <<-'END', :a, 'a 34 c' )
|
223
223
|
grammar RootRoot2;
|
224
224
|
options {language=Ruby;output=AST;}
|
225
225
|
a : ID INT^ ID^ ;
|
@@ -232,7 +232,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
232
232
|
end
|
233
233
|
|
234
234
|
example "root-hoist using `^' from within a (...)+ block" do
|
235
|
-
result = parse(<<-'END', :a, 'a 34 * b 9 * c')
|
235
|
+
result = parse( <<-'END', :a, 'a 34 * b 9 * c' )
|
236
236
|
grammar RootThenRootInLoop;
|
237
237
|
options {language=Ruby;output=AST;}
|
238
238
|
a : ID^ (INT '*'^ ID)+ ;
|
@@ -245,7 +245,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
245
245
|
end
|
246
246
|
|
247
247
|
example "nested subrules without any AST ops resulting in a flat list" do
|
248
|
-
result = parse(<<-'END', :a, 'void a b;')
|
248
|
+
result = parse( <<-'END', :a, 'void a b;' )
|
249
249
|
grammar NestedSubrule;
|
250
250
|
options {language=Ruby;output=AST;}
|
251
251
|
a : 'void' (({
|
@@ -260,7 +260,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
260
260
|
end
|
261
261
|
|
262
262
|
example "invoking another rule without any AST ops, resulting in a flat list" do
|
263
|
-
result = parse(<<-'END', :a, 'int a')
|
263
|
+
result = parse( <<-'END', :a, 'int a' )
|
264
264
|
grammar InvokeRule;
|
265
265
|
options {language=Ruby;output=AST;}
|
266
266
|
a : type ID ;
|
@@ -276,7 +276,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
276
276
|
end
|
277
277
|
|
278
278
|
example "hoisting the results of another rule as root using the `^' operator" do
|
279
|
-
result = parse(<<-'END', :a, 'int a')
|
279
|
+
result = parse( <<-'END', :a, 'int a' )
|
280
280
|
grammar InvokeRuleAsRoot;
|
281
281
|
options {language=Ruby;output=AST;}
|
282
282
|
a : type^ ID ;
|
@@ -292,7 +292,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
292
292
|
end
|
293
293
|
|
294
294
|
example "hoisting another rule's true as root using the `^' operator (with a label)" do
|
295
|
-
result = parse(<<-'END', :a, 'int a')
|
295
|
+
result = parse( <<-'END', :a, 'int a' )
|
296
296
|
grammar InvokeRuleAsRootWithLabel;
|
297
297
|
options {language=Ruby;output=AST;}
|
298
298
|
a : x=type^ ID ;
|
@@ -308,7 +308,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
308
308
|
end
|
309
309
|
|
310
310
|
example "hoisting another rule's result tree as root using the `^' operator (with a list += label)" do
|
311
|
-
result = parse(<<-'END', :a, 'int a')
|
311
|
+
result = parse( <<-'END', :a, 'int a' )
|
312
312
|
grammar InvokeRuleAsRootWithListLabel;
|
313
313
|
options {language=Ruby;output=AST;}
|
314
314
|
a : x+=type^ ID ;
|
@@ -324,7 +324,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
324
324
|
end
|
325
325
|
|
326
326
|
example "root-hoist via `^' within a (...)* loop resulting in a deeply-nested tree" do
|
327
|
-
result = parse(<<-'END', :a, 'a+b+c+d')
|
327
|
+
result = parse( <<-'END', :a, 'a+b+c+d' )
|
328
328
|
grammar RuleRootInLoop;
|
329
329
|
options {language=Ruby;output=AST;}
|
330
330
|
a : ID ('+'^ ID)* ;
|
@@ -337,7 +337,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
337
337
|
end
|
338
338
|
|
339
339
|
example "hoisting another rule's result tree as root from within a (...)* loop resulting in a deeply nested tree" do
|
340
|
-
result = parse(<<-'END', :a, 'a+b+c-d')
|
340
|
+
result = parse( <<-'END', :a, 'a+b+c-d' )
|
341
341
|
grammar RuleInvocationRuleRootInLoop;
|
342
342
|
options {language=Ruby;output=AST;}
|
343
343
|
a : ID (op^ ID)* ;
|
@@ -353,7 +353,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
353
353
|
end
|
354
354
|
|
355
355
|
example "using tail recursion to build deeply-nested expression trees" do
|
356
|
-
result = parse(<<-'END', :s, '3 exp 4 exp 5')
|
356
|
+
result = parse( <<-'END', :s, '3 exp 4 exp 5' )
|
357
357
|
grammar TailRecursion;
|
358
358
|
options {language=Ruby;output=AST;}
|
359
359
|
s : a ;
|
@@ -368,7 +368,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
368
368
|
end
|
369
369
|
|
370
370
|
example "simple token node from a token type set" do
|
371
|
-
result = parse(<<-'END', :a, 'abc')
|
371
|
+
result = parse( <<-'END', :a, 'abc' )
|
372
372
|
grammar TokenSet;
|
373
373
|
options {language=Ruby; output=AST;}
|
374
374
|
a : ID|INT ;
|
@@ -380,7 +380,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
380
380
|
end
|
381
381
|
|
382
382
|
example "hoisting a token-type set token as root with `^'" do
|
383
|
-
result = parse(<<-'END', :a, '+abc')
|
383
|
+
result = parse( <<-'END', :a, '+abc' )
|
384
384
|
grammar SetRoot;
|
385
385
|
options {language=Ruby;output=AST;}
|
386
386
|
a : ('+' | '-')^ ID ;
|
@@ -393,7 +393,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
393
393
|
end
|
394
394
|
|
395
395
|
example "hoisting a token-type set token as root with `^' (with a label)" do
|
396
|
-
result = parse(<<-'END', :a, '+abc')
|
396
|
+
result = parse( <<-'END', :a, '+abc' )
|
397
397
|
grammar SetRootWithLabel;
|
398
398
|
options {language=Ruby;output=AST;}
|
399
399
|
a : (x=('+' | '-'))^ ID ;
|
@@ -406,7 +406,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
406
406
|
end
|
407
407
|
|
408
408
|
example "hoisting a token-type set token as root from within a (...)* loop" do
|
409
|
-
result = parse(<<-'END', :a, 'a+b-c')
|
409
|
+
result = parse( <<-'END', :a, 'a+b-c' )
|
410
410
|
grammar SetAsRuleRootInLoop;
|
411
411
|
options {language=Ruby;output=AST;}
|
412
412
|
a : ID (('+'|'-')^ ID)* ;
|
@@ -419,7 +419,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
419
419
|
end
|
420
420
|
|
421
421
|
example "an `~' inverted token-type set element" do
|
422
|
-
result = parse(<<-'END', :a, '34+2')
|
422
|
+
result = parse( <<-'END', :a, '34+2' )
|
423
423
|
grammar NotSet;
|
424
424
|
options {language=Ruby;output=AST;}
|
425
425
|
a : ~ID '+' INT ;
|
@@ -432,7 +432,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
432
432
|
end
|
433
433
|
|
434
434
|
example "a `~' inverted token-type set in a rule (with a label)" do
|
435
|
-
result = parse(<<-'END', :a, '34+2')
|
435
|
+
result = parse( <<-'END', :a, '34+2' )
|
436
436
|
grammar NotSetWithLabel;
|
437
437
|
options {language=Ruby;output=AST;}
|
438
438
|
a : x=~ID '+' INT ;
|
@@ -445,7 +445,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
445
445
|
end
|
446
446
|
|
447
447
|
example "a `~' inverted token-type set element in a rule (with a list += label)" do
|
448
|
-
result = parse(<<-'END', :a, '34+2')
|
448
|
+
result = parse( <<-'END', :a, '34+2' )
|
449
449
|
grammar NotSetWithListLabel;
|
450
450
|
options {language=Ruby;output=AST;}
|
451
451
|
a : x=~ID '+' INT ;
|
@@ -458,7 +458,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
458
458
|
end
|
459
459
|
|
460
460
|
example "a `~' inverted token-type set element hoisted to root via `^'" do
|
461
|
-
result = parse(<<-'END', :a, '34 55')
|
461
|
+
result = parse( <<-'END', :a, '34 55' )
|
462
462
|
grammar NotSetRoot;
|
463
463
|
options {language=Ruby;output=AST;}
|
464
464
|
a : ~'+'^ INT ;
|
@@ -473,7 +473,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
473
473
|
# FIXME: no label actually in the grammar
|
474
474
|
|
475
475
|
example "hoisting a `~' inverted token-type set to root using `^' (with label)" do
|
476
|
-
result = parse(<<-'END', :a, '34 55')
|
476
|
+
result = parse( <<-'END', :a, '34 55' )
|
477
477
|
grammar NotSetRootWithLabel;
|
478
478
|
options {language=Ruby;output=AST;}
|
479
479
|
a : x=~'+'^ INT ;
|
@@ -487,7 +487,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
487
487
|
# FIXME: no label here either
|
488
488
|
|
489
489
|
example "hoisting a `~' inverted token-type set to root using `^' (with list += label)" do
|
490
|
-
result = parse(<<-'END', :a, '34 55')
|
490
|
+
result = parse( <<-'END', :a, '34 55' )
|
491
491
|
grammar NotSetRootWithListLabel;
|
492
492
|
options {language=Ruby;output=AST;}
|
493
493
|
a : x+=~'+'^ INT ;
|
@@ -500,7 +500,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
500
500
|
end
|
501
501
|
|
502
502
|
example "hoisting a `~' inverted token-type set to root from within a (...)* loop" do
|
503
|
-
result = parse(<<-'END', :a, '3+4+5')
|
503
|
+
result = parse( <<-'END', :a, '3+4+5' )
|
504
504
|
grammar NotSetRuleRootInLoop;
|
505
505
|
options {language=Ruby;output=AST;}
|
506
506
|
a : INT (~INT^ INT)* ;
|
@@ -514,7 +514,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
514
514
|
end
|
515
515
|
|
516
516
|
example "multiple tokens with the same label in a rule" do
|
517
|
-
result = parse(<<-'END', :a, 'a b')
|
517
|
+
result = parse( <<-'END', :a, 'a b' )
|
518
518
|
grammar TokenLabelReuse;
|
519
519
|
options {language=Ruby;output=AST;}
|
520
520
|
a returns [result] : id=ID id=ID {
|
@@ -529,7 +529,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
529
529
|
end
|
530
530
|
|
531
531
|
example "multiple tokens with the same label in a rule (with a `^' root hoist)" do
|
532
|
-
result = parse(<<-'END', :a, 'a b')
|
532
|
+
result = parse( <<-'END', :a, 'a b' )
|
533
533
|
grammar TokenLabelReuse2;
|
534
534
|
options {language=Ruby;output=AST;}
|
535
535
|
a returns [result]: id=ID id=ID^ {$result = "2nd id=#{$id.text},"} ;
|
@@ -542,7 +542,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
542
542
|
end
|
543
543
|
|
544
544
|
example "extra token in a simple declaration" do
|
545
|
-
result, errors = parse(<<-'END', :decl, 'int 34 x=1;', true)
|
545
|
+
result, errors = parse( <<-'END', :decl, 'int 34 x=1;', true )
|
546
546
|
grammar ExtraTokenInSimpleDecl;
|
547
547
|
options {language=Ruby;output=AST;}
|
548
548
|
decl : type^ ID '='! INT ';'! ;
|
@@ -552,12 +552,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
552
552
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
553
553
|
|
554
554
|
END
|
555
|
-
errors.should == ["line 1:4 extraneous input \"34\" expecting ID"]
|
555
|
+
errors.should == [ "line 1:4 extraneous input \"34\" expecting ID" ]
|
556
556
|
result.should == '(int x 1)'
|
557
557
|
end
|
558
558
|
|
559
559
|
example "missing ID in a simple declaration" do
|
560
|
-
result, errors = parse(<<-'END', :decl, 'int =1;', true)
|
560
|
+
result, errors = parse( <<-'END', :decl, 'int =1;', true )
|
561
561
|
grammar MissingIDInSimpleDecl;
|
562
562
|
options {language=Ruby;output=AST;}
|
563
563
|
tokens {EXPR;}
|
@@ -567,12 +567,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
567
567
|
INT : '0'..'9'+;
|
568
568
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
569
569
|
END
|
570
|
-
errors.should == ["line 1:4 missing ID at \"=\""]
|
570
|
+
errors.should == [ "line 1:4 missing ID at \"=\"" ]
|
571
571
|
result.should == '(int <missing ID> 1)'
|
572
572
|
end
|
573
573
|
|
574
574
|
example "missing token of a token-type set in a simple declaration" do
|
575
|
-
result, errors = parse(<<-'END', :decl, 'x=1;', true)
|
575
|
+
result, errors = parse( <<-'END', :decl, 'x=1;', true )
|
576
576
|
grammar MissingSetInSimpleDecl;
|
577
577
|
options {language=Ruby;output=AST;}
|
578
578
|
tokens {EXPR;}
|
@@ -583,12 +583,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
583
583
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
584
584
|
|
585
585
|
END
|
586
|
-
errors.should == ["line 1:0 mismatched input \"x\" expecting set nil"]
|
586
|
+
errors.should == [ "line 1:0 mismatched input \"x\" expecting set nil" ]
|
587
587
|
result.should == '(<error: x> x 1)'
|
588
588
|
end
|
589
589
|
|
590
590
|
example "missing INT token simulated with a `<missing INT>' error node" do
|
591
|
-
result, errors = parse(<<-'END', :a, 'abc', true)
|
591
|
+
result, errors = parse( <<-'END', :a, 'abc', true )
|
592
592
|
grammar MissingTokenGivesErrorNode;
|
593
593
|
options {language=Ruby;output=AST;}
|
594
594
|
a : ID INT ; // follow is EOF
|
@@ -597,12 +597,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
597
597
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
598
598
|
|
599
599
|
END
|
600
|
-
errors.should == ["line 0:-1 missing INT at \"<EOF>\""]
|
600
|
+
errors.should == [ "line 0:-1 missing INT at \"<EOF>\"" ]
|
601
601
|
result.should == 'abc <missing INT>'
|
602
602
|
end
|
603
603
|
|
604
604
|
example "missing token from invoked rule results in error node with a resync attribute" do
|
605
|
-
result, errors = parse(<<-'END', :a, 'abc', true)
|
605
|
+
result, errors = parse( <<-'END', :a, 'abc', true )
|
606
606
|
grammar MissingTokenGivesErrorNodeInInvokedRule;
|
607
607
|
options {language=Ruby;output=AST;}
|
608
608
|
a : b ;
|
@@ -612,12 +612,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
612
612
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
613
613
|
|
614
614
|
END
|
615
|
-
errors.should == ["line 0:-1 mismatched input \"<EOF>\" expecting INT"]
|
615
|
+
errors.should == [ "line 0:-1 mismatched input \"<EOF>\" expecting INT" ]
|
616
616
|
result.should == '<mismatched token: <EOF>, resync = abc>'
|
617
617
|
end
|
618
618
|
|
619
619
|
example "extraneous ID token displays error and is ignored in AST output" do
|
620
|
-
result, errors = parse(<<-'END', :a, 'abc ick 34', true)
|
620
|
+
result, errors = parse( <<-'END', :a, 'abc ick 34', true )
|
621
621
|
grammar ExtraTokenGivesErrorNode;
|
622
622
|
options {language=Ruby;output=AST;}
|
623
623
|
a : b c ;
|
@@ -628,12 +628,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
628
628
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
629
629
|
|
630
630
|
END
|
631
|
-
errors.should == ["line 1:4 extraneous input \"ick\" expecting INT"]
|
631
|
+
errors.should == [ "line 1:4 extraneous input \"ick\" expecting INT" ]
|
632
632
|
result.should == 'abc 34'
|
633
633
|
end
|
634
634
|
|
635
635
|
example "missing ID token simulated with a `<missing ID>' error node" do
|
636
|
-
result, errors = parse(<<-'END', :a, '34', true)
|
636
|
+
result, errors = parse( <<-'END', :a, '34', true )
|
637
637
|
grammar MissingFirstTokenGivesErrorNode;
|
638
638
|
options {language=Ruby;output=AST;}
|
639
639
|
a : ID INT ;
|
@@ -642,12 +642,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
642
642
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
643
643
|
|
644
644
|
END
|
645
|
-
errors.should == ["line 1:0 missing ID at \"34\""]
|
645
|
+
errors.should == [ "line 1:0 missing ID at \"34\"" ]
|
646
646
|
result.should == '<missing ID> 34'
|
647
647
|
end
|
648
648
|
|
649
649
|
example "another case where a missing ID token is simulated with a `<missing ID>' error node" do
|
650
|
-
result, errors = parse(<<-'END', :a, '34', true)
|
650
|
+
result, errors = parse( <<-'END', :a, '34', true )
|
651
651
|
grammar MissingFirstTokenGivesErrorNode2;
|
652
652
|
options {language=Ruby;output=AST;}
|
653
653
|
a : b c ;
|
@@ -658,12 +658,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
658
658
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
659
659
|
|
660
660
|
END
|
661
|
-
errors.should == ["line 1:0 missing ID at \"34\""]
|
661
|
+
errors.should == [ "line 1:0 missing ID at \"34\"" ]
|
662
662
|
result.should == '<missing ID> 34'
|
663
663
|
end
|
664
664
|
|
665
665
|
example "no viable alternative for rule is represented as a single `<unexpected: ...>' error node" do
|
666
|
-
result, errors = parse(<<-'END', :a, '*', true)
|
666
|
+
result, errors = parse( <<-'END', :a, '*', true )
|
667
667
|
grammar NoViableAltGivesErrorNode;
|
668
668
|
options {language=Ruby;output=AST;}
|
669
669
|
a : b | c ;
|
@@ -674,12 +674,12 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
674
674
|
INT : '0'..'9'+;
|
675
675
|
WS : (' '|'\n') {$channel=HIDDEN;} ;
|
676
676
|
END
|
677
|
-
errors.should == ["line 1:0 no viable alternative at input \"*\""]
|
677
|
+
errors.should == [ "line 1:0 no viable alternative at input \"*\"" ]
|
678
678
|
result.should == "<unexpected: 0 S[\"*\"] @ line 1 col 0 (0..0), resync = *>"
|
679
679
|
end
|
680
680
|
|
681
681
|
example "token with a `+=' list label hoisted to root with `^'" do
|
682
|
-
result = parse(<<-'END', :a, 'a')
|
682
|
+
result = parse( <<-'END', :a, 'a' )
|
683
683
|
grammar TokenListLabelRuleRoot;
|
684
684
|
options {language=Ruby;output=AST;}
|
685
685
|
a : id+=ID^ ;
|
@@ -692,7 +692,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
692
692
|
end
|
693
693
|
|
694
694
|
example "token with a list `+=' label trashed with `!'" do
|
695
|
-
result = parse(<<-'END', :a, 'a')
|
695
|
+
result = parse( <<-'END', :a, 'a' )
|
696
696
|
grammar TokenListLabelBang;
|
697
697
|
options {language=Ruby;output=AST;}
|
698
698
|
a : id+=ID! ;
|
@@ -705,7 +705,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
705
705
|
end
|
706
706
|
|
707
707
|
example "using list `+=' labels to collect trees of invoked rules" do
|
708
|
-
result = parse(<<-'END', :a, 'a b')
|
708
|
+
result = parse( <<-'END', :a, 'a b' )
|
709
709
|
grammar RuleListLabel;
|
710
710
|
options {language=Ruby;output=AST;}
|
711
711
|
a returns [result]: x+=b x+=b {
|
@@ -722,7 +722,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
722
722
|
end
|
723
723
|
|
724
724
|
example "using a list `+=' label to collect the trees of invoked rules within a (...)+ block" do
|
725
|
-
result = parse(<<-'END', :a, 'a b')
|
725
|
+
result = parse( <<-'END', :a, 'a b' )
|
726
726
|
grammar RuleListLabelRuleRoot;
|
727
727
|
options {language=Ruby;output=AST;}
|
728
728
|
a returns [result] : ( x+=b^ )+ {
|
@@ -738,7 +738,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
738
738
|
end
|
739
739
|
|
740
740
|
example "trashing the tree of an invoked rule with `!' while collecting the tree with a list `+=' label" do
|
741
|
-
result = parse(<<-'END', :a, 'a b')
|
741
|
+
result = parse( <<-'END', :a, 'a b' )
|
742
742
|
grammar RuleListLabelBang;
|
743
743
|
options {language=Ruby;output=AST;}
|
744
744
|
a returns [result] : x+=b! x+=b {
|
@@ -754,7 +754,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
754
754
|
end
|
755
755
|
|
756
756
|
example "a whole bunch of different elements" do
|
757
|
-
result = parse(<<-'END', :a, 'a b b c c d')
|
757
|
+
result = parse( <<-'END', :a, 'a b b c c d' )
|
758
758
|
grammar ComplicatedMelange;
|
759
759
|
options {language=Ruby;output=AST;}
|
760
760
|
a : A b=B b=B c+=C c+=C D {s = $D.text} ;
|
@@ -768,7 +768,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
768
768
|
end
|
769
769
|
|
770
770
|
example "rule return values in addition to AST output" do
|
771
|
-
result = parse(<<-'END', :a, 'abc 34')
|
771
|
+
result = parse( <<-'END', :a, 'abc 34' )
|
772
772
|
grammar ReturnValueWithAST;
|
773
773
|
options {language=Ruby;output=AST;}
|
774
774
|
a returns [result] : ID b { $result = $b.i.to_s + "\n" } ;
|
@@ -782,7 +782,7 @@ class TestAutoAST < ANTLR3::Test::Functional
|
|
782
782
|
end
|
783
783
|
|
784
784
|
example "a (...)+ loop containing a token-type set" do
|
785
|
-
result = parse(<<-'END', :r, 'abc 34 d')
|
785
|
+
result = parse( <<-'END', :r, 'abc 34 d' )
|
786
786
|
grammar SetLoop;
|
787
787
|
options { language=Ruby;output=AST; }
|
788
788
|
r : (INT|ID)+ ;
|