antlr3 1.8.13 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/History.txt +9 -0
- data/Manifest.txt +115 -115
- data/bin/antlr4ruby +5 -0
- data/java/RubyTarget.java +97 -212
- data/java/antlr-full-3.5.jar +0 -0
- data/lib/antlr3/constants.rb +4 -8
- data/lib/antlr3/task.rb +2 -0
- data/lib/antlr3/test/functional.rb +1 -0
- data/lib/antlr3/token.rb +10 -1
- data/lib/antlr3/version.rb +4 -4
- data/rakefile +26 -26
- data/templates/AST.stg +40 -37
- data/templates/ASTParser.stg +20 -19
- data/templates/ASTTreeParser.stg +27 -27
- data/templates/Dbg.stg +9 -9
- data/templates/Ruby.stg +274 -205
- data/templates/ST.stg +8 -8
- data/test/functional/ast-output/hetero-nodes.rb +0 -1
- data/test/functional/debugging/debug-mode.rb +15 -15
- data/test/functional/debugging/rule-tracing.rb +4 -6
- data/test/functional/lexer/basic.rb +1 -1
- metadata +185 -218
- data/java/antlr-full-3.2.1.jar +0 -0
data/templates/ASTTreeParser.stg
CHANGED
@@ -61,18 +61,18 @@ _last = _save_last_<treeLevel>
|
|
61
61
|
|
62
62
|
>>
|
63
63
|
|
64
|
-
tokenRefBang(token,label,elementIndex) ::= <<
|
64
|
+
tokenRefBang(token,label,elementIndex,terminalOptions) ::= <<
|
65
65
|
_last = @input.look
|
66
66
|
<super.tokenRef(...)>
|
67
67
|
>>
|
68
68
|
|
69
|
-
tokenRef(token,label,elementIndex,
|
69
|
+
tokenRef(token,label,elementIndex,terminalOptions) ::= <<
|
70
70
|
_last = @input.look
|
71
71
|
<super.tokenRef(...)>
|
72
72
|
<if(!rewriteMode)>
|
73
73
|
<gatedAction({
|
74
|
-
<if(
|
75
|
-
tree_for_<label> = <
|
74
|
+
<if(terminalOptions.node)>
|
75
|
+
tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> )
|
76
76
|
<else>
|
77
77
|
tree_for_<label> = @adaptor.copy_node( <label; format="label"> )
|
78
78
|
<endif><\n>
|
@@ -87,18 +87,18 @@ _first_<treeLevel> ||= <label; format="label"><\n>
|
|
87
87
|
|
88
88
|
|
89
89
|
|
90
|
-
tokenRefAndListLabel(token,label,elementIndex,
|
90
|
+
tokenRefAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
|
91
91
|
<tokenRef(...)>
|
92
92
|
<addToList(elem={<label; format="label">},...)>
|
93
93
|
>>
|
94
94
|
|
95
|
-
tokenRefRuleRoot(token,label,elementIndex,
|
95
|
+
tokenRefRuleRoot(token,label,elementIndex,terminalOptions) ::= <<
|
96
96
|
_last = @input.look
|
97
97
|
<super.tokenRef(...)>
|
98
98
|
<if(!rewriteMode)>
|
99
99
|
<gatedAction({
|
100
|
-
<if(
|
101
|
-
tree_for_<label> = <
|
100
|
+
<if(terminalOptions.node)>
|
101
|
+
tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> )
|
102
102
|
<else>
|
103
103
|
tree_for_<label> = @adaptor.copy_node( <label; format="label"> )
|
104
104
|
<endif><\n>
|
@@ -107,12 +107,12 @@ root_<treeLevel> = @adaptor.become_root( tree_for_<label>, root_<treeLevel> )
|
|
107
107
|
<endif>
|
108
108
|
>>
|
109
109
|
|
110
|
-
tokenRefRuleRootAndListLabel(token,label,elementIndex,
|
110
|
+
tokenRefRuleRootAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
|
111
111
|
<tokenRefRuleRoot(...)>
|
112
112
|
<addToList(elem={<label; format="label">},...)>
|
113
113
|
>>
|
114
114
|
|
115
|
-
wildcard(token,label,elementIndex,
|
115
|
+
wildcard(token,label,elementIndex,terminalOptions) ::= <<
|
116
116
|
_last = @input.look
|
117
117
|
<super.wildcard(...)>
|
118
118
|
<if(!rewriteMode)>
|
@@ -127,49 +127,49 @@ _first_<treeLevel> and _first_<treeLevel> = <label; format="label">
|
|
127
127
|
<endif>
|
128
128
|
>>
|
129
129
|
|
130
|
-
matchSet(s,label,
|
130
|
+
matchSet(s,label,terminalOptions,elementIndex,postmatchCode) ::= <<
|
131
131
|
_last = @input.look
|
132
|
-
<super.matchSet(
|
132
|
+
<super.matchSet(postmatchCode={
|
133
133
|
<if(!rewriteMode)>
|
134
134
|
<gatedAction({
|
135
|
-
<if(
|
136
|
-
tree_for_<label> = <
|
135
|
+
<if(terminalOptions.node)>
|
136
|
+
tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> )
|
137
137
|
<else>
|
138
138
|
tree_for_<label> = @adaptor.copy_node( <label; format="label"> )
|
139
139
|
<endif><\n>
|
140
140
|
@adaptor.add_child( root_<treeLevel>, tree_for_<label> )
|
141
141
|
})>
|
142
142
|
<endif>
|
143
|
-
})>
|
143
|
+
}, ...)>
|
144
144
|
>>
|
145
145
|
|
146
146
|
|
147
147
|
|
148
|
-
matchRuleBlockSet(s,label,
|
148
|
+
matchRuleBlockSet(s,label,terminalOptions,elementIndex,postmatchCode,treeLevel="0") ::= <<
|
149
149
|
<matchSet(...)>
|
150
|
-
<noRewrite()>
|
150
|
+
<noRewrite(...)>
|
151
151
|
>>
|
152
152
|
|
153
153
|
|
154
154
|
|
155
|
-
matchSetBang(s,label,elementIndex,postmatchCode) ::= <<
|
155
|
+
matchSetBang(s,label,terminalOptions,elementIndex,postmatchCode) ::= <<
|
156
156
|
_last = @input.look
|
157
157
|
<super.matchSet(...)>
|
158
158
|
>>
|
159
159
|
|
160
|
-
matchSetRuleRoot(s,label,
|
161
|
-
<super.matchSet(
|
160
|
+
matchSetRuleRoot(s,label,terminalOptions,elementIndex,debug) ::= <<
|
161
|
+
<super.matchSet(postmatchCode={
|
162
162
|
<if(!rewriteMode)>
|
163
163
|
<gatedAction({
|
164
|
-
<if(
|
165
|
-
tree_for_<label> = <
|
164
|
+
<if(terminalOptions.node)>
|
165
|
+
tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> )
|
166
166
|
<else>
|
167
167
|
tree_for_<label> = @adaptor.copy_node( <label; format="label"> )
|
168
168
|
<endif><\n>
|
169
169
|
root_<treeLevel> = @adaptor.become_root( tree_for_<label>, root_<treeLevel> )
|
170
170
|
})>
|
171
171
|
<endif>
|
172
|
-
})>
|
172
|
+
}, ...)>
|
173
173
|
>>
|
174
174
|
|
175
175
|
ruleRef(rule,label,elementIndex,args,scope) ::= <<
|
@@ -224,13 +224,13 @@ _last = @input.look
|
|
224
224
|
<super.ruleRefRuleRootTrackAndListLabel(...)>
|
225
225
|
>>
|
226
226
|
|
227
|
-
createRewriteNodeFromElement(token,
|
228
|
-
<if(
|
229
|
-
<
|
227
|
+
createRewriteNodeFromElement(token,args={},terminalOptions={}) ::= <%
|
228
|
+
<if(terminalOptions.node)>
|
229
|
+
<terminalOptions.node; format="constantPath">.new( stream_<token>.next_node )
|
230
230
|
<else>
|
231
231
|
stream_<token>.next_node
|
232
232
|
<endif>
|
233
|
-
|
233
|
+
%>
|
234
234
|
|
235
235
|
ruleCleanUp() ::= <<
|
236
236
|
<super.ruleCleanUp()>
|
data/templates/Dbg.stg
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
group Dbg;
|
2
2
|
|
3
3
|
/*
|
4
|
-
[The "BSD
|
4
|
+
[The "BSD license"]
|
5
5
|
Copyright (c) 2005-2009 Terence Parr
|
6
6
|
All rights reserved.
|
7
7
|
|
@@ -44,11 +44,11 @@ RULE_NAMES = [
|
|
44
44
|
|
45
45
|
@rule.body() ::= <<
|
46
46
|
in_rule(grammar_file_name, "<ruleName>") do
|
47
|
-
@debug_listener.location(<ruleDescriptor.tree.line>, <ruleDescriptor.tree.
|
48
|
-
|
47
|
+
@debug_listener.location(<ruleDescriptor.tree.line>, <ruleDescriptor.tree.charPositionInLine>)
|
48
|
+
|
49
49
|
<@super.body()>
|
50
|
-
|
51
|
-
@debug_listener.location(<ruleDescriptor.EORNode.line>, <ruleDescriptor.EORNode.
|
50
|
+
|
51
|
+
@debug_listener.location(<ruleDescriptor.EORNode.line>, <ruleDescriptor.EORNode.charPositionInLine>)
|
52
52
|
end
|
53
53
|
>>
|
54
54
|
|
@@ -143,12 +143,12 @@ end
|
|
143
143
|
>>
|
144
144
|
|
145
145
|
|
146
|
-
@altSwitchCase.prealt() ::= "<enterAlt(
|
146
|
+
@altSwitchCase.prealt() ::= "<enterAlt(altNum)>" // altNum is arg of altSwitchCase
|
147
147
|
|
148
148
|
|
149
|
-
element() ::= <<
|
150
|
-
@debug_listener.location(<
|
151
|
-
<super.element()>
|
149
|
+
element(e) ::= <<
|
150
|
+
@debug_listener.location(<e.line>, <e.pos>)
|
151
|
+
<super.element(e)>
|
152
152
|
>>
|
153
153
|
|
154
154
|
|
data/templates/Ruby.stg
CHANGED
@@ -1,9 +1,66 @@
|
|
1
|
-
group Ruby
|
1
|
+
group Ruby;
|
2
2
|
|
3
3
|
/******************************************************************************
|
4
4
|
********************* M A J O R C O M P O N E N T S **********************
|
5
5
|
******************************************************************************/
|
6
|
-
|
6
|
+
|
7
|
+
// System.Boolean.ToString() returns "True" and "False", but the proper C# literals are "true" and "false"
|
8
|
+
// The Java version of Boolean returns "true" and "false", so they map to themselves here.
|
9
|
+
booleanLiteral ::= [
|
10
|
+
"True":"true",
|
11
|
+
"False":"false",
|
12
|
+
"true":"true",
|
13
|
+
"false":"false",
|
14
|
+
default:"false"
|
15
|
+
]
|
16
|
+
|
17
|
+
action(name, code) ::= <<
|
18
|
+
<if(code)>
|
19
|
+
# - - - - @<name> action - - - -
|
20
|
+
<code><\n>
|
21
|
+
<endif>
|
22
|
+
>>
|
23
|
+
|
24
|
+
autoloadDelegates() ::= <<
|
25
|
+
<if(grammar.directDelegates)>
|
26
|
+
<grammar.directDelegates:{it| autoload :<it.name>, "<it.recognizerName>"<\n>}>
|
27
|
+
<endif>
|
28
|
+
>>
|
29
|
+
|
30
|
+
delegateLexerRule(ruleDescriptor) ::= <<
|
31
|
+
# delegated lexer rule <ruleDescriptor.name; format="lexerRule"> (<ruleDescriptor.name> in the grammar)
|
32
|
+
def <ruleDescriptor.name; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope()> )<endif>
|
33
|
+
<methodCall(del=ruleDescriptor.grammar, n={<ruleDescriptor.name; format="lexerRule">}, args=ruleDescriptor.parameterScope.attributes)>
|
34
|
+
end
|
35
|
+
>>
|
36
|
+
|
37
|
+
rootClassName() ::= <<
|
38
|
+
<if(grammar.grammarIsRoot)><grammar.name><else><grammar.composite.rootGrammar.name><endif>::<if(TREE_PARSER)>TreeParser<elseif(PARSER)>Parser<else>Lexer<endif>
|
39
|
+
>>
|
40
|
+
|
41
|
+
grammarClassName() ::= <<
|
42
|
+
<gram.name>::<if(TREE_PARSER)>TreeParser<elseif(PARSER)>Parser<else>Lexer<endif>
|
43
|
+
>>
|
44
|
+
|
45
|
+
newDelegate(gram) ::= <<
|
46
|
+
<gram.name>.new( <trunc(gram.delegators):{p|<p:delegateName()>, }>
|
47
|
+
self, @input, :state => @state<@delegateOptions()>
|
48
|
+
)
|
49
|
+
>>
|
50
|
+
|
51
|
+
placeAction(scope, name) ::= <<
|
52
|
+
<if(actions.(scope))>
|
53
|
+
<if(actions.(scope).(name))>
|
54
|
+
# - - - - - - begin action @<scope>::<name> - - - - - -
|
55
|
+
<if(fileName)># <fileName><\n><endif>
|
56
|
+
<actions.(scope).(name)>
|
57
|
+
# - - - - - - end action @<scope>::<name> - - - - - - -<\n>
|
58
|
+
<endif>
|
59
|
+
<endif>
|
60
|
+
>>
|
61
|
+
|
62
|
+
runtimeLibraryVersion() ::= "1.8.1"
|
63
|
+
|
7
64
|
/** The overall file structure of a recognizer; stores methods
|
8
65
|
* for rules and cyclic DFAs plus support code.
|
9
66
|
*/
|
@@ -20,22 +77,22 @@ outputFile(LEXER, PARSER, TREE_PARSER, actionScope, actions, docComment, recogni
|
|
20
77
|
# Ruby runtime library version: <runtimeLibraryVersion()>
|
21
78
|
# Input grammar file: <fileName>
|
22
79
|
# Generated at: <generatedTimestamp>
|
23
|
-
#
|
80
|
+
#
|
24
81
|
|
25
|
-
#
|
82
|
+
# ~~~> start load path setup
|
26
83
|
this_directory = File.expand_path( File.dirname( __FILE__ ) )
|
27
84
|
$LOAD_PATH.unshift( this_directory ) unless $LOAD_PATH.include?( this_directory )
|
28
85
|
|
29
86
|
antlr_load_failed = proc do
|
30
87
|
load_path = $LOAD_PATH.map { |dir| ' - ' \<\< dir }.join( $/ )
|
31
88
|
raise LoadError, \<\<-END.strip!
|
32
|
-
|
89
|
+
|
33
90
|
Failed to load the ANTLR3 runtime library (version <runtimeLibraryVersion()>):
|
34
91
|
|
35
92
|
Ensure the library has been installed on your system and is available
|
36
93
|
on the load path. If rubygems is available on your system, this can
|
37
94
|
be done with the command:
|
38
|
-
|
95
|
+
|
39
96
|
gem install antlr3
|
40
97
|
|
41
98
|
Current load path:
|
@@ -45,53 +102,86 @@ Current load path:
|
|
45
102
|
end
|
46
103
|
|
47
104
|
defined?( ANTLR3 ) or begin
|
48
|
-
|
105
|
+
|
49
106
|
# 1: try to load the ruby antlr3 runtime library from the system path
|
50
107
|
require 'antlr3'
|
51
|
-
|
108
|
+
|
52
109
|
rescue LoadError
|
53
|
-
|
110
|
+
|
54
111
|
# 2: try to load rubygems if it isn't already loaded
|
55
112
|
defined?( Gem ) or begin
|
56
113
|
require 'rubygems'
|
57
114
|
rescue LoadError
|
58
115
|
antlr_load_failed.call
|
59
116
|
end
|
60
|
-
|
117
|
+
|
61
118
|
# 3: try to activate the antlr3 gem
|
62
119
|
begin
|
63
|
-
defined?( gem ) and gem(
|
120
|
+
defined?( gem ) and gem( 'antlr3', '~> <runtimeLibraryVersion()>' )
|
64
121
|
rescue Gem::LoadError
|
65
122
|
antlr_load_failed.call
|
66
123
|
end
|
67
|
-
|
124
|
+
|
68
125
|
require 'antlr3'
|
69
|
-
|
126
|
+
|
70
127
|
end
|
71
128
|
# \<~~~ end load path setup
|
72
129
|
|
73
|
-
<
|
74
|
-
<
|
130
|
+
<if(actions.all)>
|
131
|
+
<if(actions.all.header)>
|
132
|
+
# - - - - - - begin action @all::header - - - - - -
|
133
|
+
<if(fileName)># <fileName><\n><endif>
|
134
|
+
<actions.all.header>
|
135
|
+
# - - - - - - end action @all::header - - - - - - -<\n>
|
136
|
+
<endif>
|
137
|
+
<endif>
|
138
|
+
<if(actions.(actionScope))>
|
139
|
+
<if(actions.(actionScope).header)>
|
140
|
+
# - - - - - - begin action @<actionScope>::header - - - - - -
|
141
|
+
<if(fileName)># <fileName><\n><endif>
|
142
|
+
<actions.(actionScope).header>
|
143
|
+
# - - - - - - end action @<actionScope>::header - - - - - - -<\n>
|
144
|
+
<endif>
|
145
|
+
<endif>
|
75
146
|
|
76
147
|
<if(recognizer.grammar.grammarIsRoot)>
|
77
|
-
<rootGrammarOutputFile()>
|
148
|
+
<rootGrammarOutputFile(...)>
|
78
149
|
<else>
|
79
150
|
<delegateGrammarOutputFile()>
|
80
151
|
<endif>
|
81
152
|
|
82
|
-
<
|
83
|
-
<
|
153
|
+
<if(actions.(actionScope))>
|
154
|
+
<if(actions.(actionScope).footer)>
|
155
|
+
# - - - - - - begin action @<actionScope>::footer - - - - - -
|
156
|
+
<if(fileName)># <fileName><\n><endif>
|
157
|
+
<actions.(actionScope).footer>
|
158
|
+
# - - - - - - end action @<actionScope>::footer - - - - - - -<\n>
|
159
|
+
<endif>
|
160
|
+
<endif>
|
161
|
+
<if(actions.all)>
|
162
|
+
<if(actions.all.footer)>
|
163
|
+
# - - - - - - begin action @all::footer - - - - - -
|
164
|
+
<if(fileName)># <fileName><\n><endif>
|
165
|
+
<actions.all.footer>
|
166
|
+
# - - - - - - end action @all::footer - - - - - - -<\n>
|
167
|
+
<endif>
|
168
|
+
<endif>
|
84
169
|
|
170
|
+
<if(actions.(actionScope))>
|
85
171
|
<if(actions.(actionScope).main)>
|
86
172
|
if __FILE__ == $0 and ARGV.first != '--'
|
87
|
-
|
173
|
+
# - - - - - - begin action @<actionScope>::main - - - - - -
|
174
|
+
<if(fileName)># <fileName><\n><endif>
|
175
|
+
<actions.(actionScope).main>
|
176
|
+
# - - - - - - end action @<actionScope>::main - - - - - - -<\n>
|
88
177
|
end
|
89
178
|
<endif>
|
179
|
+
<endif>
|
90
180
|
>>
|
91
181
|
|
92
182
|
tokenDataModule() ::= <<
|
93
183
|
# TokenData defines all of the token type integer values
|
94
|
-
# as constants, which will be included in all
|
184
|
+
# as constants, which will be included in all
|
95
185
|
# ANTLR-generated recognizers.
|
96
186
|
const_defined?( :TokenData ) or TokenData = ANTLR3::TokenScheme.new
|
97
187
|
|
@@ -99,7 +189,7 @@ module TokenData
|
|
99
189
|
<if(tokens)>
|
100
190
|
|
101
191
|
# define the token constants
|
102
|
-
define_tokens( <tokens:{:<it.name> => <it.type>}; anchor, wrap="\n", separator=", "> )
|
192
|
+
define_tokens( <tokens:{it | :<it.name> => <it.type>}; anchor, wrap="\n", separator=", "> )
|
103
193
|
|
104
194
|
<endif>
|
105
195
|
<if(tokenNames)>
|
@@ -110,21 +200,21 @@ module TokenData
|
|
110
200
|
# this is necessary because anonymous tokens, which are
|
111
201
|
# created from literal values in the grammar, do not
|
112
202
|
# have descriptive names
|
113
|
-
register_names( <tokenNames:{<it>}; separator=", ", anchor, wrap="\n"> )
|
203
|
+
register_names( <tokenNames:{it | <it>}; separator=", ", anchor, wrap="\n"> )
|
114
204
|
|
115
205
|
<endif>
|
116
|
-
|
117
|
-
<placeAction(scope="token",name="scheme")>
|
118
|
-
<placeAction(scope="token",name="members")>
|
206
|
+
|
207
|
+
<placeAction(scope="token", name="scheme",...)>
|
208
|
+
<placeAction(scope="token", name="members",...)>
|
119
209
|
end<\n>
|
120
210
|
>>
|
121
211
|
|
122
212
|
rootGrammarOutputFile() ::= <<
|
123
213
|
module <recognizer.grammar.name>
|
124
|
-
<placeAction(scope="module",name="head")>
|
125
|
-
<tokenDataModule()>
|
214
|
+
<placeAction(scope="module", name="head", ...)>
|
215
|
+
<tokenDataModule(...)>
|
126
216
|
<recognizer>
|
127
|
-
<placeAction(scope="module",name="foot")>
|
217
|
+
<placeAction(scope="module", name="foot", ...)>
|
128
218
|
end
|
129
219
|
>>
|
130
220
|
|
@@ -163,7 +253,7 @@ parser(
|
|
163
253
|
<if(grammar.grammarIsRoot)><autoloadDelegates()><endif>
|
164
254
|
|
165
255
|
class <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif> \< <superClass>
|
166
|
-
<parserBody(inputStreamType="ANTLR3::TokenStream", rewriteElementType="Token", actionScope="parser", ...)>
|
256
|
+
<parserBody(inputStreamType="ANTLR3::TokenStream", rewriteElementType="Token", actionScope="parser", filterMode="false", ...)>
|
167
257
|
end # class <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif> \< <superClass>
|
168
258
|
<if(!actions.(actionScope).main)>
|
169
259
|
|
@@ -174,7 +264,7 @@ at_exit { <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif>.main( ARG
|
|
174
264
|
/** How to generate a tree parser; same as parser except the
|
175
265
|
* input stream is a different type.
|
176
266
|
*/
|
177
|
-
treeParser(grammar, name, scopes, tokens, tokenNames, globalAction, rules, numRules, bitsets, labelType={<ASTLabelType>}, ASTLabelType="Object", superClass="ANTLR3::TreeParser", members={<actions.treeparser.members>}
|
267
|
+
treeParser(grammar, name, scopes, tokens, tokenNames, globalAction, rules, numRules, bitsets, filterMode, labelType={<ASTLabelType>}, ASTLabelType="Object", superClass="ANTLR3::TreeParser", members={<actions.treeparser.members>}) ::= <<
|
178
268
|
<if(grammar.grammarIsRoot)><autoloadDelegates()><endif>
|
179
269
|
|
180
270
|
class <if(grammar.grammarIsRoot)>TreeParser<else><grammar.name><endif> \< <superClass>
|
@@ -186,15 +276,15 @@ at_exit { <if(grammar.grammarIsRoot)>TreeParser<else><grammar.name><endif>.main(
|
|
186
276
|
<endif>
|
187
277
|
>>
|
188
278
|
|
189
|
-
parserBody(grammar, name, scopes, tokens, tokenNames, rules, numRules, bitsets, inputStreamType, superClass, filterMode,
|
279
|
+
parserBody(grammar, name, scopes, tokens, tokenNames, rules, numRules, bitsets, inputStreamType, superClass, filterMode, labelType, members, rewriteElementType, actionScope, ASTLabelType="Object") ::= <<
|
190
280
|
@grammar_home = <grammar.name>
|
191
281
|
<if(!grammar.grammarIsRoot)><autoloadDelegates()><\n><endif>
|
192
282
|
<@mixins()>
|
193
283
|
|
194
|
-
RULE_METHODS = [ <rules:{r|:<r.ruleName>};
|
284
|
+
RULE_METHODS = [ <rules:{r |:<r.ruleName>}; wrap, anchor, separator=", "> ].freeze
|
195
285
|
|
196
|
-
<scopes:{
|
197
|
-
<rules:{
|
286
|
+
<scopes:{it|<if(it.isDynamicGlobalScope)><globalAttributeScopeClass(it)><\n><endif>}>
|
287
|
+
<rules:{it|<ruleAttributeScopeClass(it.ruleDescriptor.ruleScope)>}>
|
198
288
|
<if(grammar.delegators)>
|
199
289
|
masters( <grammar.delegators:{d|:<d.name>}; separator=", "> )<\n>
|
200
290
|
<endif>
|
@@ -214,11 +304,11 @@ end
|
|
214
304
|
require '<grammar.composite.rootGrammar.recognizerName>'
|
215
305
|
include <grammar.composite.rootGrammar.name>::TokenData<\n><\n>
|
216
306
|
<endif>
|
217
|
-
<parserConstructor()>
|
307
|
+
<parserConstructor(...)>
|
218
308
|
<@additionalMembers()>
|
219
309
|
<members>
|
220
310
|
# - - - - - - - - - - - - Rules - - - - - - - - - - - - -
|
221
|
-
<rules:{<it><\n>}>
|
311
|
+
<rules:{it | <it><\n>}>
|
222
312
|
|
223
313
|
<if(grammar.delegatedRules)>
|
224
314
|
# - - - - - - - - - - Delegated Rules - - - - - - - - - - -
|
@@ -226,17 +316,17 @@ include <grammar.composite.rootGrammar.name>::TokenData<\n><\n>
|
|
226
316
|
<endif>
|
227
317
|
<if(cyclicDFAs)>
|
228
318
|
# - - - - - - - - - - DFA definitions - - - - - - - - - - -
|
229
|
-
<cyclicDFAs:{<cyclicDFA(it)>}>
|
319
|
+
<cyclicDFAs:{it | <cyclicDFA(it)>}>
|
230
320
|
|
231
321
|
private
|
232
322
|
|
233
323
|
def initialize_dfas
|
234
324
|
super rescue nil
|
235
|
-
<cyclicDFAs:{<cyclicDFAInit(it)>}>
|
325
|
+
<cyclicDFAs:{it | <cyclicDFAInit(it)>}>
|
236
326
|
end
|
237
327
|
|
238
328
|
<endif>
|
239
|
-
<bitsets:{TOKENS_FOLLOWING_<it.name>_IN_<it.inName>_<it.tokenIndex> = Set[ <it.tokenTypes:{
|
329
|
+
<bitsets:{it|TOKENS_FOLLOWING_<it.name; format="tokenLabel">_IN_<it.inName>_<it.tokenIndex> = Set[ <it.tokenTypes:{it|<it>}; separator=", "> ]<\n>}>
|
240
330
|
>>
|
241
331
|
|
242
332
|
parserConstructor() ::= <<
|
@@ -245,8 +335,8 @@ def initialize( <grammar.delegators:{g|<g:delegateName()>, }>input, options = {}
|
|
245
335
|
<if(memoize)><if(grammar.grammarIsRoot)>
|
246
336
|
@state.rule_memory = {}
|
247
337
|
<endif><endif>
|
248
|
-
<scopes:{
|
249
|
-
<placeAction(scope=actionScope,name="init")>
|
338
|
+
<scopes:{it|<if(it.isDynamicGlobalScope)><globalAttributeScopeStack(it)><\n><endif>}><rules:{it | <ruleAttributeScopeStack(it.ruleDescriptor.ruleScope)>}>
|
339
|
+
<placeAction(scope=actionScope, name="init", ...)>
|
250
340
|
<grammar.delegators:{g|@<g:delegateName()> = <g:delegateName()><\n>}><grammar.directDelegates:{g|@<g:delegateName()> = <newDelegate(g)><\n>}><last(grammar.delegators):{g|@parent = @<g:delegateName()><\n>}><@init()>
|
251
341
|
end
|
252
342
|
>>
|
@@ -263,17 +353,17 @@ end
|
|
263
353
|
* need to be in a rule by themselves.
|
264
354
|
*/
|
265
355
|
synpredRule(ruleName, ruleDescriptor, block, description, nakedBlock) ::= <<
|
266
|
-
#
|
356
|
+
#
|
267
357
|
# syntactic predicate <ruleName>
|
268
|
-
#
|
358
|
+
#
|
269
359
|
# (in <fileName>)
|
270
360
|
# <description>
|
271
|
-
#
|
361
|
+
#
|
272
362
|
# This is an imaginary rule inserted by ANTLR to
|
273
363
|
# implement a syntactic predicate decision
|
274
|
-
#
|
275
|
-
def <ruleName><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(
|
276
|
-
<traceIn()><ruleLabelDefs()>
|
364
|
+
#
|
365
|
+
def <ruleName><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope()> )<endif>
|
366
|
+
<traceIn()><ruleLabelDefs(desc=ruleDescriptor)>
|
277
367
|
<block>
|
278
368
|
ensure
|
279
369
|
<traceOut()>
|
@@ -285,18 +375,22 @@ end
|
|
285
375
|
* type data aggregates required for multiple return values.
|
286
376
|
*/
|
287
377
|
rule(ruleName, ruleDescriptor, block, emptyRule, description, exceptions, finally, memoize) ::= <<
|
288
|
-
<returnScope(
|
378
|
+
<returnScope(...)>
|
289
379
|
|
290
|
-
#
|
380
|
+
#
|
291
381
|
# parser rule <ruleName>
|
292
|
-
#
|
382
|
+
#
|
293
383
|
# (in <fileName>)
|
294
384
|
# <description>
|
295
|
-
#
|
296
|
-
def <ruleName><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(
|
297
|
-
<traceIn()
|
385
|
+
#
|
386
|
+
def <ruleName><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope()> )<endif>
|
387
|
+
<traceIn()>
|
388
|
+
<ruleScopeSetUp(...)>
|
389
|
+
<ruleDeclarations(...)>
|
390
|
+
<ruleLabelDefs(desc=ruleDescriptor)>
|
391
|
+
<action(name="init", code=ruleDescriptor.actions.init)>
|
298
392
|
<@body><ruleBody()><@end>
|
299
|
-
|
393
|
+
|
300
394
|
return <ruleReturnValue()>
|
301
395
|
end
|
302
396
|
<if(ruleDescriptor.modifier)>
|
@@ -307,8 +401,8 @@ end
|
|
307
401
|
|
308
402
|
delegateRule(ruleDescriptor) ::= <<
|
309
403
|
# delegated rule <ruleDescriptor.name>
|
310
|
-
def <ruleDescriptor.name><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(
|
311
|
-
<methodCall(del=ruleDescriptor.grammar, n=ruleDescriptor.name, args={<ruleDescriptor.parameterScope.attributes:{<it.name>}>})>
|
404
|
+
def <ruleDescriptor.name><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope()> )<endif>
|
405
|
+
<methodCall(del=ruleDescriptor.grammar, n=ruleDescriptor.name, args={<ruleDescriptor.parameterScope.attributes:{it | <it.name>}>})>
|
312
406
|
end
|
313
407
|
>>
|
314
408
|
// HELPERS
|
@@ -327,16 +421,16 @@ initializeDelegator() ::= <<
|
|
327
421
|
@<g:delegateName()> = <g:delegateName()>
|
328
422
|
>>
|
329
423
|
|
330
|
-
altSwitchCase() ::= <<
|
331
|
-
when <
|
424
|
+
altSwitchCase(altNum,alt) ::= <<
|
425
|
+
when <altNum>
|
332
426
|
<@prealt()>
|
333
|
-
<
|
427
|
+
<alt>
|
334
428
|
>>
|
335
429
|
|
336
430
|
blockBody() ::= <<
|
337
431
|
<@decision><decision><@end>
|
338
432
|
case alt_<decisionNumber>
|
339
|
-
<alts:altSwitchCase(); separator="\n">
|
433
|
+
<alts:{a | <altSwitchCase(i,a)>}; separator="\n">
|
340
434
|
end
|
341
435
|
>>
|
342
436
|
|
@@ -351,35 +445,43 @@ while true # decision <decisionNumber>
|
|
351
445
|
alt_<decisionNumber> = <maxAlt>
|
352
446
|
<@decisionBody><decision><@end>
|
353
447
|
case alt_<decisionNumber>
|
354
|
-
<alts:altSwitchCase(); separator="\n">
|
448
|
+
<alts:{a | <altSwitchCase(i,a)>}; separator="\n">
|
355
449
|
else
|
356
450
|
break # out of loop for decision <decisionNumber>
|
357
451
|
end
|
358
452
|
end # loop for decision <decisionNumber>
|
359
453
|
>>
|
360
454
|
|
361
|
-
delegateName() ::= <<
|
362
|
-
<if(
|
455
|
+
delegateName(d) ::= <<
|
456
|
+
<if(d.label)><d.label; format="label"><else><d.name; format="snakecase"><endif>
|
363
457
|
>>
|
364
458
|
|
365
|
-
element() ::= <<
|
366
|
-
<
|
459
|
+
element(e) ::= <<
|
460
|
+
<e.el><\n>
|
367
461
|
>>
|
368
462
|
|
369
463
|
execForcedAction(action) ::= "<action>"
|
370
464
|
|
371
|
-
globalAttributeScopeClass(scope) ::=
|
372
|
-
<if(scope
|
373
|
-
|
465
|
+
globalAttributeScopeClass(scope) ::= <%
|
466
|
+
<if(scope)>
|
467
|
+
<if(scope.attributes)>
|
468
|
+
@@<scope.name> = Scope(
|
469
|
+
<scope.attributes:{it| <it.decl; format="rubyString">}; separator=", "> )<\n>
|
470
|
+
<endif>
|
471
|
+
<endif>
|
472
|
+
%>
|
374
473
|
|
375
|
-
globalAttributeScopeStack(scope) ::=
|
376
|
-
<if(scope
|
377
|
-
|
474
|
+
globalAttributeScopeStack(scope) ::= <%
|
475
|
+
<if(scope)>
|
476
|
+
<if(scope.attributes)>@<scope.name>_stack = []<\n>
|
477
|
+
<endif>
|
478
|
+
<endif>
|
479
|
+
%>
|
378
480
|
|
379
481
|
noRewrite(rewriteBlockLevel, treeLevel) ::= ""
|
380
482
|
|
381
483
|
parameterScope(scope) ::= <<
|
382
|
-
<scope.attributes:{<it.decl>}; separator=", ">
|
484
|
+
<scope.attributes:{it | <it.decl>}; separator=", ">
|
383
485
|
>>
|
384
486
|
|
385
487
|
positiveClosureBlockLoop() ::= <<
|
@@ -388,7 +490,7 @@ while true
|
|
388
490
|
alt_<decisionNumber> = <maxAlt>
|
389
491
|
<@decisionBody><decision><@end>
|
390
492
|
case alt_<decisionNumber>
|
391
|
-
<alts:altSwitchCase(); separator="\n">
|
493
|
+
<alts:{a | <altSwitchCase(i,a)>}; separator="\n">
|
392
494
|
else
|
393
495
|
match_count_<decisionNumber> > 0 and break
|
394
496
|
<ruleBacktrackFailure()>
|
@@ -400,11 +502,15 @@ while true
|
|
400
502
|
end<\n>
|
401
503
|
>>
|
402
504
|
|
403
|
-
returnScope(
|
505
|
+
returnScope(ruleDescriptor) ::= <%
|
404
506
|
<if(ruleDescriptor.hasMultipleReturnValues)>
|
405
|
-
<ruleDescriptor
|
507
|
+
<if(ruleDescriptor.returnScope)>
|
508
|
+
<returnStructName(r=ruleDescriptor)> = define_return_scope <ruleDescriptor.returnScope.attributes:{it | :<it.decl>}; separator=", ">
|
509
|
+
<else>
|
510
|
+
<returnStructName(r=ruleDescriptor)> = define_return_scope
|
406
511
|
<endif>
|
407
|
-
|
512
|
+
<endif>
|
513
|
+
%>
|
408
514
|
|
409
515
|
returnStructName(r) ::= "<r.name; format=\"camelcase\">ReturnValue"
|
410
516
|
|
@@ -432,7 +538,7 @@ begin
|
|
432
538
|
<if(!emptyRule)>
|
433
539
|
<if(actions.(actionScope).rulecatch)>
|
434
540
|
|
435
|
-
# - - - - - - - - @rulecatch - - - - - - - -
|
541
|
+
# - - - - - - - - @rulecatch - - - - - - - -
|
436
542
|
<actions.(actionScope).rulecatch>
|
437
543
|
<else>
|
438
544
|
rescue ANTLR3::Error::RecognitionError => re
|
@@ -448,7 +554,7 @@ ensure
|
|
448
554
|
end
|
449
555
|
>>
|
450
556
|
|
451
|
-
ruleReturnValue() ::=
|
557
|
+
ruleReturnValue() ::= <%
|
452
558
|
<if(!ruleDescriptor.isSynPred)>
|
453
559
|
<if(ruleDescriptor.hasReturnValue)>
|
454
560
|
<if(ruleDescriptor.hasSingleReturnValue)>
|
@@ -458,7 +564,7 @@ return_value
|
|
458
564
|
<endif>
|
459
565
|
<endif>
|
460
566
|
<endif>
|
461
|
-
|
567
|
+
%>
|
462
568
|
|
463
569
|
|
464
570
|
ruleDeclarations() ::= <<
|
@@ -468,8 +574,10 @@ return_value = <returnStructName(r=ruleDescriptor)>.new
|
|
468
574
|
# $rule.start = the first token seen before matching
|
469
575
|
return_value.start = @input.look<\n>
|
470
576
|
<else>
|
577
|
+
<if(ruleDescriptor.returnScope)>
|
471
578
|
<ruleDescriptor.returnScope.attributes:{a|<a.name> = <if(a.initValue)><a.initValue><else>nil<endif><\n>}>
|
472
579
|
<endif>
|
580
|
+
<endif>
|
473
581
|
<if(memoize)>
|
474
582
|
<ruleDescriptor.name>_start_index = @input.index<\n>
|
475
583
|
<endif>
|
@@ -479,22 +587,21 @@ ruleLabelDef(label) ::= <<
|
|
479
587
|
<label.label.text; format="label"> = nil<\n>
|
480
588
|
>>
|
481
589
|
|
482
|
-
ruleLabelDefs() ::= <<
|
590
|
+
ruleLabelDefs(desc) ::= <<
|
483
591
|
<[
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
]:
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
]:
|
497
|
-
{list_of_<it.label.text; format="label"> = []<\n>}
|
592
|
+
desc.tokenLabels,
|
593
|
+
desc.tokenListLabels,
|
594
|
+
desc.wildcardTreeLabels,
|
595
|
+
desc.wildcardTreeListLabels,
|
596
|
+
desc.ruleLabels,
|
597
|
+
desc.ruleListLabels
|
598
|
+
]:{it|<if(it.label)><it.label.text; format="label"> = nil<\n><endif>}
|
599
|
+
>
|
600
|
+
<[
|
601
|
+
desc.tokenListLabels,
|
602
|
+
desc.ruleListLabels,
|
603
|
+
desc.wildcardTreeListLabels
|
604
|
+
]:{it|<if(it.label)>list_of_<it.label.text; format="label"> = []<\n><endif>}
|
498
605
|
>
|
499
606
|
>>
|
500
607
|
|
@@ -539,11 +646,11 @@ end<\n>
|
|
539
646
|
|
540
647
|
|
541
648
|
ruleScopeSetUp() ::= <<
|
542
|
-
<ruleDescriptor.useScopes:{@<it>_stack.push( @@<it>.new )<\n>}><ruleDescriptor.ruleScope:{@<it.name>_stack.push( @@<it.name>.new )<\n>}>
|
649
|
+
<ruleDescriptor.useScopes:{it | @<it>_stack.push( @@<it>.new )<\n>}><ruleDescriptor.ruleScope:{it | @<it.name>_stack.push( @@<it.name>.new )<\n>}>
|
543
650
|
>>
|
544
651
|
|
545
652
|
ruleScopeCleanUp() ::= <<
|
546
|
-
<ruleDescriptor.useScopes:{@<it>_stack.pop<\n>}><ruleDescriptor.ruleScope:{@<it.name>_stack.pop<\n>}>
|
653
|
+
<ruleDescriptor.useScopes:{it | @<it>_stack.pop<\n>}><ruleDescriptor.ruleScope:{it | @<it.name>_stack.pop<\n>}>
|
547
654
|
>>
|
548
655
|
|
549
656
|
memoize() ::= <<
|
@@ -576,7 +683,7 @@ alt_<decisionNumber> = <maxAlt>
|
|
576
683
|
<decls>
|
577
684
|
<@decision><decision><@end>
|
578
685
|
case alt_<decisionNumber>
|
579
|
-
<alts:altSwitchCase(); separator="\n">
|
686
|
+
<alts:{a | <altSwitchCase(i,a)>}; separator="\n">
|
580
687
|
end
|
581
688
|
>>
|
582
689
|
|
@@ -632,19 +739,19 @@ alt(elements,altNum,description,autoAST,outerAlt,treeLevel,rew) ::= <<
|
|
632
739
|
>>
|
633
740
|
|
634
741
|
/** match a token optionally with a label in front */
|
635
|
-
tokenRef(token,label,elementIndex,
|
636
|
-
<if(label)><label; format="label"> = <endif>match( <token>, TOKENS_FOLLOWING_<token>_IN_<ruleName>_<elementIndex> )
|
742
|
+
tokenRef(token,label,elementIndex,terminalOptions) ::= <<
|
743
|
+
<if(label)><label; format="label"> = <endif>match( <token; format="tokenLabel">, TOKENS_FOLLOWING_<token; format="tokenLabel">_IN_<ruleName>_<elementIndex> )
|
637
744
|
>>
|
638
745
|
|
639
746
|
/** ids+=ID */
|
640
|
-
tokenRefAndListLabel(token,label,elementIndex,
|
747
|
+
tokenRefAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
|
641
748
|
<tokenRef(...)>
|
642
749
|
<addToList(elem={<label; format="label">},...)>
|
643
750
|
>>
|
644
751
|
|
645
752
|
/* TRY THIS:
|
646
|
-
tokenRefAndListLabel(token,label,elementIndex,
|
647
|
-
list_of_<label; format="label"> << match( <token>, TOKENS_FOLLOWING_<token>_IN_<ruleName>_<elementIndex> )
|
753
|
+
tokenRefAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
|
754
|
+
list_of_<label; format="label"> << match( <token; format="tokenLabel">, TOKENS_FOLLOWING_<token; format="tokenLabel">_IN_<ruleName>_<elementIndex> )
|
648
755
|
>>
|
649
756
|
*/
|
650
757
|
|
@@ -655,7 +762,7 @@ list_of_<label; format="label"> \<\< <elem><\n>
|
|
655
762
|
listLabel ::= addToList
|
656
763
|
|
657
764
|
/** For now, sets are interval tests and must be tested inline */
|
658
|
-
matchSet(s,label,elementIndex,postmatchCode) ::= <<
|
765
|
+
matchSet(s,label,elementIndex,terminalOptions,postmatchCode) ::= <<
|
659
766
|
<if(label)>
|
660
767
|
<label; format="label"> = @input.look<\n>
|
661
768
|
<endif>
|
@@ -687,7 +794,7 @@ matchSetAndListLabel(s,label,elementIndex,postmatchCode) ::= <<
|
|
687
794
|
|
688
795
|
matchRuleBlockSet ::= matchSet
|
689
796
|
|
690
|
-
wildcard(label,elementIndex) ::= <<
|
797
|
+
wildcard(token,label,elementIndex,terminalOptions) ::= <<
|
691
798
|
<if(label)>
|
692
799
|
<label; format="label"> = @input.look<\n>
|
693
800
|
<endif>
|
@@ -700,7 +807,7 @@ wildcard(label,elementIndex) ::= <<
|
|
700
807
|
>>
|
701
808
|
*/
|
702
809
|
|
703
|
-
wildcardAndListLabel(label,elementIndex) ::= <<
|
810
|
+
wildcardAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
|
704
811
|
<wildcard(...)>
|
705
812
|
<addToList(elem={<label; format="label">},...)>
|
706
813
|
>>
|
@@ -710,7 +817,7 @@ wildcardAndListLabel(label,elementIndex) ::= <<
|
|
710
817
|
* arguments and a return value or values.
|
711
818
|
*/
|
712
819
|
ruleRef(rule,label,elementIndex,args,scope) ::= <<
|
713
|
-
@state.following.push( TOKENS_FOLLOWING_<rule.name>_IN_<ruleName>_<elementIndex> )
|
820
|
+
@state.following.push( TOKENS_FOLLOWING_<rule.name; format="tokenLabel">_IN_<ruleName>_<elementIndex> )
|
714
821
|
<if(label)><label; format="label"> = <endif><methodCall(del=scope, n={<rule.name>}, args=args)>
|
715
822
|
@state.following.pop
|
716
823
|
>>
|
@@ -857,7 +964,7 @@ end
|
|
857
964
|
>>
|
858
965
|
|
859
966
|
dfaEdgeSwitch(labels, targetState) ::= <<
|
860
|
-
when <labels:{
|
967
|
+
when <labels:{it|<it; format="tokenLabel">}; separator=", "> then <targetState>
|
861
968
|
>>
|
862
969
|
|
863
970
|
/** The code to initiate execution of a cyclic DFA; this is used
|
@@ -887,15 +994,15 @@ class DFA<dfa.decisionNumber> \< ANTLR3::DFA
|
|
887
994
|
TRANSITION = [
|
888
995
|
<dfa.javaCompressedTransition:{s|unpack( <s; wrap="\n", anchor, separator=", "> )}; separator=",\n">
|
889
996
|
].freeze
|
890
|
-
|
997
|
+
|
891
998
|
( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
|
892
|
-
if a
|
999
|
+
if a > 0 and z \< 0
|
893
1000
|
MAX[ i ] %= 0x10000
|
894
1001
|
end
|
895
1002
|
end
|
896
|
-
|
1003
|
+
|
897
1004
|
@decision = <dfa.decisionNumber>
|
898
|
-
|
1005
|
+
|
899
1006
|
<@errorMethod()>
|
900
1007
|
<if(dfa.description)>
|
901
1008
|
|
@@ -935,7 +1042,7 @@ cyclicDFAInit(dfa) ::= <<
|
|
935
1042
|
<dfa.specialStateSTs:{state|when <i0>
|
936
1043
|
<state>}; separator="\n">
|
937
1044
|
end
|
938
|
-
|
1045
|
+
|
939
1046
|
if s \< 0
|
940
1047
|
<if(backtracking)>
|
941
1048
|
@state.backtracking > 0 and raise ANTLR3::Error::BacktrackingFailed<\n>
|
@@ -944,7 +1051,7 @@ cyclicDFAInit(dfa) ::= <<
|
|
944
1051
|
@dfa<dfa.decisionNumber>.error( nva )
|
945
1052
|
raise nva
|
946
1053
|
end
|
947
|
-
|
1054
|
+
|
948
1055
|
s
|
949
1056
|
end<\n>
|
950
1057
|
<else>
|
@@ -988,15 +1095,15 @@ e
|
|
988
1095
|
|
989
1096
|
andPredicates(left,right) ::= "( <left> ) and ( <right> )"
|
990
1097
|
|
991
|
-
orPredicates(operands) ::= "
|
1098
|
+
orPredicates(operands) ::= "<operands:{o|( <o> )}; separator=\" or \">"
|
992
1099
|
|
993
1100
|
notPredicate(pred) ::= "not ( <pred> )"
|
994
1101
|
|
995
1102
|
evalPredicate(pred,description) ::= "( <pred> )"
|
996
1103
|
|
997
|
-
evalSynPredicate(pred,description) ::=
|
998
|
-
syntactic_predicate?( :<pred:{<it>}> )
|
999
|
-
|
1104
|
+
evalSynPredicate(pred,description) ::= <%
|
1105
|
+
syntactic_predicate?( :<pred:{it | <it>}> )
|
1106
|
+
%>
|
1000
1107
|
|
1001
1108
|
lookaheadTest(atom, k, atomAsInt) ::= "look_<decisionNumber>_<stateNumber> == <atom>"
|
1002
1109
|
|
@@ -1006,23 +1113,23 @@ lookaheadTest(atom, k, atomAsInt) ::= "look_<decisionNumber>_<stateNumber> == <a
|
|
1006
1113
|
*/
|
1007
1114
|
isolatedLookaheadTest(atom, k, atomAsInt) ::= "@input.peek(<k>) == <atom>"
|
1008
1115
|
|
1009
|
-
lookaheadRangeTest(lower, upper, k, rangeNumber, lowerAsInt, upperAsInt) ::=
|
1116
|
+
lookaheadRangeTest(lower, upper, k, rangeNumber, lowerAsInt, upperAsInt) ::= <%
|
1010
1117
|
look_<decisionNumber>_<stateNumber>.between?( <lower>, <upper> )
|
1011
|
-
|
1118
|
+
%>
|
1012
1119
|
|
1013
|
-
isolatedLookaheadRangeTest(lower, upper, k, rangeNumber, lowerAsInt, upperAsInt) ::=
|
1120
|
+
isolatedLookaheadRangeTest(lower, upper, k, rangeNumber, lowerAsInt, upperAsInt) ::= <%
|
1014
1121
|
@input.peek( <k> ).between?( <lower>, <upper> )
|
1015
|
-
|
1122
|
+
%>
|
1016
1123
|
|
1017
|
-
setTest(ranges) ::=
|
1124
|
+
setTest(ranges) ::= <%
|
1018
1125
|
<ranges; separator=" || ">
|
1019
|
-
|
1126
|
+
%>
|
1020
1127
|
|
1021
1128
|
parameterAttributeRef(attr) ::= "<attr.name>"
|
1022
1129
|
|
1023
1130
|
parameterSetAttributeRef(attr,expr) ::= "<attr.name> = <expr>"
|
1024
1131
|
|
1025
|
-
scopeAttributeRef(scope, attr, index, negIndex) ::=
|
1132
|
+
scopeAttributeRef(scope, attr, index, negIndex) ::= <%
|
1026
1133
|
<if(negIndex)>
|
1027
1134
|
@<scope>_stack[ -<negIndex> ].<attr.name>
|
1028
1135
|
<else>
|
@@ -1032,10 +1139,10 @@ scopeAttributeRef(scope, attr, index, negIndex) ::= <<
|
|
1032
1139
|
@<scope>_stack.last.<attr.name>
|
1033
1140
|
<endif>
|
1034
1141
|
<endif>
|
1035
|
-
|
1142
|
+
%>
|
1036
1143
|
|
1037
1144
|
|
1038
|
-
scopeSetAttributeRef(scope, attr, expr, index, negIndex) ::=
|
1145
|
+
scopeSetAttributeRef(scope, attr, expr, index, negIndex) ::= <%
|
1039
1146
|
<if(negIndex)>
|
1040
1147
|
@<scope>_stack[ -<negIndex> ].<attr.name> = <expr>
|
1041
1148
|
<else>
|
@@ -1045,7 +1152,7 @@ scopeSetAttributeRef(scope, attr, expr, index, negIndex) ::= <<
|
|
1045
1152
|
@<scope>_stack.last.<attr.name> = <expr>
|
1046
1153
|
<endif>
|
1047
1154
|
<endif>
|
1048
|
-
|
1155
|
+
%>
|
1049
1156
|
|
1050
1157
|
|
1051
1158
|
/** $x is either global scope or x is rule with dynamic scope;
|
@@ -1058,29 +1165,29 @@ isolatedDynamicScopeRef(scope) ::= "@<scope>_stack"
|
|
1058
1165
|
/** reference an attribute of rule; might only have single
|
1059
1166
|
* return value
|
1060
1167
|
*/
|
1061
|
-
ruleLabelRef(referencedRule, scope, attr) ::=
|
1168
|
+
ruleLabelRef(referencedRule, scope, attr) ::= <%
|
1062
1169
|
<if(referencedRule.hasMultipleReturnValues)>
|
1063
1170
|
( <scope; format="label">.nil? ? nil : <scope; format="label">.<attr.name> )
|
1064
1171
|
<else>
|
1065
1172
|
<scope; format="label">
|
1066
1173
|
<endif>
|
1067
|
-
|
1174
|
+
%>
|
1068
1175
|
|
1069
|
-
returnAttributeRef(ruleDescriptor, attr) ::=
|
1176
|
+
returnAttributeRef(ruleDescriptor, attr) ::= <%
|
1070
1177
|
<if(ruleDescriptor.hasMultipleReturnValues)>
|
1071
1178
|
return_value.<attr.name>
|
1072
1179
|
<else>
|
1073
1180
|
<attr.name>
|
1074
1181
|
<endif>
|
1075
|
-
|
1182
|
+
%>
|
1076
1183
|
|
1077
|
-
returnSetAttributeRef(ruleDescriptor, attr, expr) ::=
|
1184
|
+
returnSetAttributeRef(ruleDescriptor, attr, expr) ::= <%
|
1078
1185
|
<if(ruleDescriptor.hasMultipleReturnValues)>
|
1079
1186
|
return_value.<attr.name> = <expr>
|
1080
1187
|
<else>
|
1081
1188
|
<attr.name> = <expr>
|
1082
1189
|
<endif>
|
1083
|
-
|
1190
|
+
%>
|
1084
1191
|
|
1085
1192
|
/** How to translate $tokenLabel */
|
1086
1193
|
tokenLabelRef(label) ::= "<label; format=\"label\">"
|
@@ -1100,7 +1207,7 @@ ruleLabelPropertyRef_start(scope, attr) ::= "<scope; format=\"label\">.start"
|
|
1100
1207
|
ruleLabelPropertyRef_stop(scope, attr) ::= "<scope; format=\"label\">.stop"
|
1101
1208
|
ruleLabelPropertyRef_tree(scope, attr) ::= "<scope; format=\"label\">.tree"
|
1102
1209
|
|
1103
|
-
ruleLabelPropertyRef_text(scope, attr) ::=
|
1210
|
+
ruleLabelPropertyRef_text(scope, attr) ::= <%
|
1104
1211
|
<if(TREE_PARSER)>
|
1105
1212
|
(
|
1106
1213
|
@input.token_stream.to_s(
|
@@ -1111,7 +1218,7 @@ ruleLabelPropertyRef_text(scope, attr) ::= <<
|
|
1111
1218
|
<else>
|
1112
1219
|
( <scope; format="label"> && @input.to_s( <scope; format="label">.start, <scope; format="label">.stop ) )
|
1113
1220
|
<endif>
|
1114
|
-
|
1221
|
+
%>
|
1115
1222
|
ruleLabelPropertyRef_st(scope, attr) ::= "( <scope; format=\"label\"> && <scope; format=\"label\">.template )"
|
1116
1223
|
|
1117
1224
|
/******************************************************************************
|
@@ -1120,7 +1227,7 @@ ruleLabelPropertyRef_st(scope, attr) ::= "( <scope; format=\"label\"> && <scope;
|
|
1120
1227
|
|
1121
1228
|
lexerSynpred(name) ::= ""
|
1122
1229
|
|
1123
|
-
lexer(grammar, name, tokens, scopes, rules, numRules, labelType="ANTLR3::Token",
|
1230
|
+
lexer(grammar, name, tokens, scopes, rules, numRules, filterMode, labelType="ANTLR3::Token", superClass="ANTLR3::Lexer") ::= <<
|
1124
1231
|
<if(grammar.grammarIsRoot)><autoloadDelegates()><endif>
|
1125
1232
|
|
1126
1233
|
class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
@@ -1132,14 +1239,14 @@ class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
|
1132
1239
|
<if(filterMode)>
|
1133
1240
|
include ANTLR3::FilterMode<\n>
|
1134
1241
|
<endif>
|
1135
|
-
<scopes:{<if(it.isDynamicGlobalScope)><globalAttributeScopeClass(scope=it)><\n><endif>}>
|
1136
|
-
|
1242
|
+
<scopes:{it | <if(it.isDynamicGlobalScope)><globalAttributeScopeClass(scope=it)><\n><endif>}>
|
1243
|
+
|
1137
1244
|
begin
|
1138
1245
|
generated_using( "<fileName>", "<ANTLRVersion>", "<runtimeLibraryVersion()>" )
|
1139
1246
|
rescue NoMethodError => error
|
1140
1247
|
# ignore
|
1141
1248
|
end
|
1142
|
-
|
1249
|
+
|
1143
1250
|
RULE_NAMES = [ <trunc(rules):{r|"<r.ruleName>"}; separator=", ", wrap="\n", anchor> ].freeze
|
1144
1251
|
RULE_METHODS = [ <trunc(rules):{r|:<r.ruleName; format="lexerRule">}; separator=", ", wrap="\n", anchor> ].freeze
|
1145
1252
|
|
@@ -1149,7 +1256,7 @@ class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
|
1149
1256
|
<if(grammar.directDelegates)>
|
1150
1257
|
imports( <grammar.directDelegates:{d|:<d.name>}; separator=", "> )<\n>
|
1151
1258
|
<endif>
|
1152
|
-
|
1259
|
+
|
1153
1260
|
def initialize( <grammar.delegators:{g|<g:delegateName()>, }>input=nil, options = {} )
|
1154
1261
|
super( input, options )
|
1155
1262
|
<if(memoize)>
|
@@ -1157,25 +1264,25 @@ class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
|
1157
1264
|
@state.rule_memory = {}<\n>
|
1158
1265
|
<endif>
|
1159
1266
|
<endif>
|
1160
|
-
<grammar.delegators:{g|@<g:delegateName()> = <g:delegateName()><\n>}><grammar.directDelegates:{g|@<g:delegateName()> = <newDelegate(g)><\n>}><last(grammar.delegators):{g|@parent = @<g:delegateName()><\n>}><placeAction(scope="lexer",name="init")>
|
1267
|
+
<grammar.delegators:{g|@<g:delegateName()> = <g:delegateName()><\n>}><grammar.directDelegates:{g|@<g:delegateName()> = <newDelegate(g)><\n>}><last(grammar.delegators):{g|@parent = @<g:delegateName()><\n>}><placeAction(scope="lexer", name="init", ...)>
|
1161
1268
|
end
|
1162
|
-
|
1163
|
-
<placeAction(scope="lexer",name="members")>
|
1164
|
-
|
1269
|
+
|
1270
|
+
<placeAction(scope="lexer", name="members", ...)>
|
1271
|
+
|
1165
1272
|
# - - - - - - - - - - - lexer rules - - - - - - - - - - - -
|
1166
|
-
<rules:{<it><\n>}>
|
1273
|
+
<rules:{it | <it><\n>}>
|
1167
1274
|
<if(grammar.delegatedRules)>
|
1168
|
-
|
1275
|
+
|
1169
1276
|
# - - - - - - - - - - delegated rules - - - - - - - - - - -
|
1170
1277
|
<grammar.delegatedRules:{ruleDescriptor|<delegateLexerRule(ruleDescriptor)><\n><\n>}>
|
1171
1278
|
<endif>
|
1172
1279
|
<if(cyclicDFAs)>
|
1173
|
-
|
1280
|
+
|
1174
1281
|
# - - - - - - - - - - DFA definitions - - - - - - - - - - -
|
1175
1282
|
<cyclicDFAs:cyclicDFA()>
|
1176
|
-
|
1283
|
+
|
1177
1284
|
private
|
1178
|
-
|
1285
|
+
|
1179
1286
|
def initialize_dfas
|
1180
1287
|
super rescue nil
|
1181
1288
|
<cyclicDFAs:cyclicDFAInit()>
|
@@ -1193,8 +1300,8 @@ at_exit { <if(grammar.delegator)><grammar.name><else>Lexer<endif>.main( ARGV ) }
|
|
1193
1300
|
lexerRuleLabelDefs() ::= <<
|
1194
1301
|
<if([ruleDescriptor.tokenLabels,ruleDescriptor.tokenListLabels,ruleDescriptor.ruleLabels,ruleDescriptor.charLabels,ruleDescriptor.tokenListLabels,ruleDescriptor.ruleListLabels])>
|
1195
1302
|
# - - - - label initialization - - - -
|
1196
|
-
<[ruleDescriptor.tokenLabels,ruleDescriptor.tokenListLabels,ruleDescriptor.ruleLabels,ruleDescriptor.charLabels]:{<it.label.text; format="label"> = nil<\n>}>
|
1197
|
-
<[ruleDescriptor.tokenListLabels,ruleDescriptor.ruleListLabels]:{list_of_<it.label.text; format="label"> = [] unless defined?(list_of_<it.label.text; format="label">)<\n>}>
|
1303
|
+
<[ruleDescriptor.tokenLabels,ruleDescriptor.tokenListLabels,ruleDescriptor.ruleLabels,ruleDescriptor.charLabels]:{it | <it.label.text; format="label"> = nil<\n>}>
|
1304
|
+
<[ruleDescriptor.tokenListLabels,ruleDescriptor.ruleListLabels]:{it | list_of_<it.label.text; format="label"> = [] unless defined?(list_of_<it.label.text; format="label">)<\n>}>
|
1198
1305
|
<endif>
|
1199
1306
|
>>
|
1200
1307
|
|
@@ -1205,17 +1312,17 @@ lexerRuleLabelDefs() ::= <<
|
|
1205
1312
|
lexerRule(ruleName,nakedBlock,ruleDescriptor,block,memoize) ::= <<
|
1206
1313
|
# lexer rule <ruleName; format="lexerRule"> (<ruleName>)
|
1207
1314
|
# (in <fileName>)
|
1208
|
-
def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(
|
1209
|
-
<traceIn()><ruleScopeSetUp()><ruleDeclarations()><if(memoize)>
|
1315
|
+
def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope()> )<endif>
|
1316
|
+
<traceIn(...)><ruleScopeSetUp(...)><ruleDeclarations(...)><if(memoize)>
|
1210
1317
|
<if(backtracking)>
|
1211
|
-
|
1318
|
+
|
1212
1319
|
# backtracking success
|
1213
1320
|
success = false<\n>
|
1214
1321
|
<endif>
|
1215
1322
|
<endif>
|
1216
1323
|
<if(nakedBlock)>
|
1217
1324
|
<ruleMemoization({<ruleName; format="lexerRule">})><lexerRuleLabelDefs()><action(name="init", code=ruleDescriptor.actions.init)>
|
1218
|
-
|
1325
|
+
|
1219
1326
|
# - - - - main rule block - - - -
|
1220
1327
|
<block>
|
1221
1328
|
<else>
|
@@ -1223,11 +1330,11 @@ def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDesc
|
|
1223
1330
|
type = <ruleName>
|
1224
1331
|
channel = ANTLR3::DEFAULT_CHANNEL
|
1225
1332
|
<ruleMemoization(ruleName)><lexerRuleLabelDefs()><action(name="init", code=ruleDescriptor.actions.init)>
|
1226
|
-
|
1333
|
+
|
1227
1334
|
# - - - - main rule block - - - -
|
1228
1335
|
<block>
|
1229
1336
|
<ruleCleanUp()>
|
1230
|
-
|
1337
|
+
|
1231
1338
|
@state.type = type
|
1232
1339
|
@state.channel = channel
|
1233
1340
|
<(ruleDescriptor.actions.after):execAction()>
|
@@ -1262,7 +1369,7 @@ tokensRule(ruleName,nakedBlock,args,block,ruleDescriptor) ::= <<
|
|
1262
1369
|
# main rule used to study the input at the current position,
|
1263
1370
|
# and choose the proper lexer rule to call in order to
|
1264
1371
|
# fetch the next token
|
1265
|
-
#
|
1372
|
+
#
|
1266
1373
|
# usually, you don't make direct calls to this method,
|
1267
1374
|
# but instead use the next_token method, which will
|
1268
1375
|
# build and emit the actual next token
|
@@ -1376,6 +1483,13 @@ match( ANTLR3::EOF )<\n>
|
|
1376
1483
|
<endif>
|
1377
1484
|
>>
|
1378
1485
|
|
1486
|
+
// used for left-recursive rules
|
1487
|
+
recRuleDefArg() ::= "int <recRuleArg()>"
|
1488
|
+
recRuleArg() ::= "_p"
|
1489
|
+
recRuleAltPredicate(ruleName,opPrec) ::= "<recRuleArg()> \<= <opPrec>"
|
1490
|
+
recRuleSetResultAction() ::= "root_0=$<ruleName>_primary.tree;"
|
1491
|
+
recRuleSetReturnAction(src,name) ::= "$<name>=$<src>.<name>;"
|
1492
|
+
|
1379
1493
|
/** $start in parser rule */
|
1380
1494
|
rulePropertyRef_start(scope, attr) ::= "return_value.start"
|
1381
1495
|
|
@@ -1413,50 +1527,5 @@ end
|
|
1413
1527
|
|
1414
1528
|
codeFileExtension() ::= ".rb"
|
1415
1529
|
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
action(name, code) ::= <<
|
1420
|
-
<if(code)>
|
1421
|
-
# - - - - @<name> action - - - -
|
1422
|
-
<code><\n>
|
1423
|
-
<endif>
|
1424
|
-
>>
|
1425
|
-
|
1426
|
-
autoloadDelegates() ::= <<
|
1427
|
-
<if(grammar.directDelegates)>
|
1428
|
-
<grammar.directDelegates:{autoload :<it.name>, "<it.recognizerName>"<\n>}>
|
1429
|
-
<endif>
|
1430
|
-
>>
|
1431
|
-
|
1432
|
-
delegateLexerRule(ruleDescriptor) ::= <<
|
1433
|
-
# delegated lexer rule <ruleDescriptor.name; format="lexerRule"> (<ruleDescriptor.name> in the grammar)
|
1434
|
-
def <ruleDescriptor.name; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(scope=it)> )<endif>
|
1435
|
-
<methodCall(del=ruleDescriptor.grammar, n={<ruleDescriptor.name; format="lexerRule">}, args=ruleDescriptor.parameterScope.attributes)>
|
1436
|
-
end
|
1437
|
-
>>
|
1438
|
-
|
1439
|
-
rootClassName() ::= <<
|
1440
|
-
<if(grammar.grammarIsRoot)><grammar.name><else><grammar.composite.rootGrammar.name><endif>::<if(TREE_PARSER)>TreeParser<elseif(PARSER)>Parser<else>Lexer<endif>
|
1441
|
-
>>
|
1442
|
-
|
1443
|
-
grammarClassName() ::= <<
|
1444
|
-
<gram.name>::<if(TREE_PARSER)>TreeParser<elseif(PARSER)>Parser<else>Lexer<endif>
|
1445
|
-
>>
|
1446
|
-
|
1447
|
-
newDelegate(gram) ::= <<
|
1448
|
-
<gram.name>.new( <trunc(gram.delegators):{p|<p:delegateName()>, }>
|
1449
|
-
self, @input, :state => @state<@delegateOptions()>
|
1450
|
-
)
|
1451
|
-
>>
|
1452
|
-
|
1453
|
-
placeAction(scope, name) ::= <<
|
1454
|
-
<if(actions.(scope).(name))>
|
1455
|
-
# - - - - - - begin action @<scope>::<name> - - - - - -
|
1456
|
-
<if(fileName)># <fileName><\n><endif>
|
1457
|
-
<actions.(scope).(name)>
|
1458
|
-
# - - - - - - end action @<scope>::<name> - - - - - - -<\n>
|
1459
|
-
<endif>
|
1460
|
-
>>
|
1461
|
-
|
1462
|
-
runtimeLibraryVersion() ::= "1.8.13"
|
1530
|
+
true_value() ::= "true"
|
1531
|
+
false_value() ::= "false"
|