antlr3 1.6.3 → 1.7.2
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.
- data/Manifest.txt +3 -3
- data/java/RubyTarget.java +374 -364
- data/java/antlr-full-3.2.1.jar +0 -0
- data/lib/antlr3/error.rb +1 -1
- data/lib/antlr3/main.rb +2 -2
- data/lib/antlr3/recognizers.rb +8 -16
- data/lib/antlr3/streams.rb +51 -0
- data/lib/antlr3/task.rb +1 -0
- data/lib/antlr3/template.rb +5 -2
- data/lib/antlr3/template/{group-lexer.rb → group-file-lexer.rb} +57 -57
- data/lib/antlr3/template/{group-parser.rb → group-file-parser.rb} +110 -110
- data/lib/antlr3/template/group-file.rb +20 -0
- data/lib/antlr3/tree.rb +16 -14
- data/lib/antlr3/tree/debug.rb +7 -7
- data/lib/antlr3/tree/wizard.rb +3 -3
- data/lib/antlr3/version.rb +2 -2
- data/samples/ANTLRv3Grammar.g +0 -9
- data/templates/AST.stg +52 -58
- data/templates/ASTDbg.stg +13 -14
- data/templates/ASTParser.stg +16 -25
- data/templates/ASTTreeParser.stg +34 -64
- data/templates/Dbg.stg +6 -6
- data/templates/Ruby.stg +159 -191
- data/test/functional/debugging/debug-mode.rb +0 -1
- data/test/functional/parser/actions.rb +15 -1
- data/test/unit/test-trees.rb +7 -7
- metadata +7 -6
data/templates/Ruby.stg
CHANGED
@@ -24,7 +24,7 @@ outputFile(LEXER, PARSER, TREE_PARSER, actionScope, actions, docComment, recogni
|
|
24
24
|
|
25
25
|
# ~~~\> start load path setup
|
26
26
|
this_directory = File.expand_path( File.dirname( __FILE__ ) )
|
27
|
-
|
27
|
+
$LOAD_PATH.unshift( this_directory ) unless $LOAD_PATH.include?( this_directory )
|
28
28
|
|
29
29
|
antlr_load_failed = proc do
|
30
30
|
load_path = $LOAD_PATH.map { |dir| ' - ' \<\< dir }.join( $/ )
|
@@ -70,6 +70,7 @@ rescue LoadError
|
|
70
70
|
end
|
71
71
|
# \<~~~ end load path setup
|
72
72
|
|
73
|
+
<placeAction(scope="all", name="header")>
|
73
74
|
<placeAction(scope=actionScope,name="header")>
|
74
75
|
|
75
76
|
<if(recognizer.grammar.grammarIsRoot)>
|
@@ -79,6 +80,7 @@ end
|
|
79
80
|
<endif>
|
80
81
|
|
81
82
|
<placeAction(scope=actionScope,name="footer")>
|
83
|
+
<placeAction(scope="all", name="footer")>
|
82
84
|
|
83
85
|
<if(actions.(actionScope).main)>
|
84
86
|
if __FILE__ == $0 and ARGV.first != '--'
|
@@ -91,7 +93,7 @@ tokenDataModule() ::= <<
|
|
91
93
|
# TokenData defines all of the token type integer values
|
92
94
|
# as constants, which will be included in all
|
93
95
|
# ANTLR-generated recognizers.
|
94
|
-
const_defined?(:TokenData) or TokenData = ANTLR3::TokenScheme.new
|
96
|
+
const_defined?( :TokenData ) or TokenData = ANTLR3::TokenScheme.new
|
95
97
|
|
96
98
|
module TokenData
|
97
99
|
<if(tokens)>
|
@@ -165,7 +167,7 @@ class <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif> \< <superClas
|
|
165
167
|
end # class <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif> \< <superClass>
|
166
168
|
<if(!actions.(actionScope).main)>
|
167
169
|
|
168
|
-
at_exit { <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif>.main(ARGV) } if __FILE__ == $0
|
170
|
+
at_exit { <if(grammar.grammarIsRoot)>Parser<else><grammar.name><endif>.main( ARGV ) } if __FILE__ == $0
|
169
171
|
<endif>
|
170
172
|
>>
|
171
173
|
|
@@ -180,7 +182,7 @@ class <if(grammar.grammarIsRoot)>TreeParser<else><grammar.name><endif> \< <super
|
|
180
182
|
end # class <if(grammar.grammarIsRoot)>TreeParser<else><grammar.name><endif> \< <superClass>
|
181
183
|
<if(!actions.(actionScope).main)>
|
182
184
|
|
183
|
-
at_exit { <if(grammar.grammarIsRoot)>TreeParser<else><grammar.name><endif>.main(ARGV) } if __FILE__ == $0
|
185
|
+
at_exit { <if(grammar.grammarIsRoot)>TreeParser<else><grammar.name><endif>.main( ARGV ) } if __FILE__ == $0
|
184
186
|
<endif>
|
185
187
|
>>
|
186
188
|
|
@@ -202,7 +204,11 @@ imports( <grammar.directDelegates:{d|:<d.name>}; separator=", "> )<\n>
|
|
202
204
|
|
203
205
|
include TokenData
|
204
206
|
|
205
|
-
|
207
|
+
begin
|
208
|
+
generated_using( "<fileName>", "<ANTLRVersion>", "<runtimeLibraryVersion()>" )
|
209
|
+
rescue NoMethodError => error
|
210
|
+
# ignore
|
211
|
+
end
|
206
212
|
|
207
213
|
<if(!grammar.grammarIsRoot)>
|
208
214
|
require '<grammar.composite.rootGrammar.recognizerName>'
|
@@ -230,7 +236,7 @@ def initialize_dfas
|
|
230
236
|
end
|
231
237
|
|
232
238
|
<endif>
|
233
|
-
<bitsets:{TOKENS_FOLLOWING_<it.name>_IN_<it.inName>_<it.tokenIndex> = Set[<it.tokenTypes:{<it>}; separator=", ">]<\n>}>
|
239
|
+
<bitsets:{TOKENS_FOLLOWING_<it.name>_IN_<it.inName>_<it.tokenIndex> = Set[ <it.tokenTypes:{<it>}; separator=", "> ]<\n>}>
|
234
240
|
>>
|
235
241
|
|
236
242
|
parserConstructor() ::= <<
|
@@ -266,7 +272,7 @@ synpredRule(ruleName, ruleDescriptor, block, description, nakedBlock) ::= <<
|
|
266
272
|
# This is an imaginary rule inserted by ANTLR to
|
267
273
|
# implement a syntactic predicate decision
|
268
274
|
#
|
269
|
-
def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>(<ruleDescriptor.parameterScope:parameterScope(scope=it)>)<endif>
|
275
|
+
def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(scope=it)> )<endif>
|
270
276
|
<traceIn()><ruleLabelDefs()>
|
271
277
|
<block>
|
272
278
|
ensure
|
@@ -287,7 +293,7 @@ rule(ruleName, ruleDescriptor, block, emptyRule, description, exceptions, finall
|
|
287
293
|
# (in <fileName>)
|
288
294
|
# <description>
|
289
295
|
#
|
290
|
-
def <ruleName><if(ruleDescriptor.parameterScope)>(<ruleDescriptor.parameterScope:parameterScope(scope=it)>)<endif>
|
296
|
+
def <ruleName><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(scope=it)> )<endif>
|
291
297
|
<traceIn()><ruleScopeSetUp()><ruleDeclarations()><ruleLabelDefs()><action(name="init", code=ruleDescriptor.actions.init)>
|
292
298
|
<@body><ruleBody()><@end>
|
293
299
|
|
@@ -301,7 +307,7 @@ end
|
|
301
307
|
|
302
308
|
delegateRule(ruleDescriptor) ::= <<
|
303
309
|
# delegated rule <ruleDescriptor.name>
|
304
|
-
def <ruleDescriptor.name>(<ruleDescriptor.parameterScope:parameterScope(scope=it)>)
|
310
|
+
def <ruleDescriptor.name><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(scope=it)> )<endif>
|
305
311
|
<methodCall(del=ruleDescriptor.grammar, n=ruleDescriptor.name, args={<ruleDescriptor.parameterScope.attributes:{<it.name>}>})>
|
306
312
|
end
|
307
313
|
>>
|
@@ -312,7 +318,9 @@ recognizerClassName() ::= <<
|
|
312
318
|
>>
|
313
319
|
|
314
320
|
initializeDirectDelegate() ::= <<
|
315
|
-
@<g:delegateName()> = <g.name>::<recognizerClassName()>.new(
|
321
|
+
@<g:delegateName()> = <g.name>::<recognizerClassName()>.new(
|
322
|
+
<trunc(g.delegators):{p|<p:delegateName()>, }>self, input, options.merge( :state => @state )
|
323
|
+
)
|
316
324
|
>>
|
317
325
|
|
318
326
|
initializeDelegator() ::= <<
|
@@ -354,7 +362,6 @@ delegateName() ::= <<
|
|
354
362
|
<if(it.label)><it.label; format="label"><else><it.name; format="snakecase"><endif>
|
355
363
|
>>
|
356
364
|
|
357
|
-
|
358
365
|
element() ::= <<
|
359
366
|
<it.el><\n>
|
360
367
|
>>
|
@@ -365,20 +372,16 @@ globalAttributeScopeClass(scope) ::= <<
|
|
365
372
|
<if(scope.attributes)>@@<scope.name> = Struct.new( <scope.attributes:{:<it.decl>}; separator=", "> )<\n><endif>
|
366
373
|
>>
|
367
374
|
|
368
|
-
|
369
375
|
globalAttributeScopeStack(scope) ::= <<
|
370
376
|
<if(scope.attributes)>@<scope.name>_stack = []<\n><endif>
|
371
377
|
>>
|
372
378
|
|
373
|
-
|
374
379
|
noRewrite(rewriteBlockLevel, treeLevel) ::= ""
|
375
380
|
|
376
|
-
|
377
381
|
parameterScope(scope) ::= <<
|
378
382
|
<scope.attributes:{<it.decl>}; separator=", ">
|
379
383
|
>>
|
380
384
|
|
381
|
-
|
382
385
|
positiveClosureBlockLoop() ::= <<
|
383
386
|
match_count_<decisionNumber> = 0
|
384
387
|
while true
|
@@ -403,14 +406,14 @@ returnScope(scope) ::= <<
|
|
403
406
|
<endif>
|
404
407
|
>>
|
405
408
|
|
406
|
-
|
407
409
|
returnStructName(r) ::= "<r.name; format=\"camelcase\">ReturnValue"
|
410
|
+
|
408
411
|
ruleAttributeScopeClass ::= globalAttributeScopeClass
|
409
412
|
ruleAttributeScopeStack ::= globalAttributeScopeStack
|
410
413
|
|
411
414
|
ruleBacktrackFailure() ::= <<
|
412
415
|
<if(backtracking)>
|
413
|
-
@state.backtracking > 0 and raise(ANTLR3::Error::BacktrackingFailed)<\n>
|
416
|
+
@state.backtracking > 0 and raise( ANTLR3::Error::BacktrackingFailed )<\n>
|
414
417
|
<endif>
|
415
418
|
>>
|
416
419
|
|
@@ -445,7 +448,6 @@ ensure
|
|
445
448
|
end
|
446
449
|
>>
|
447
450
|
|
448
|
-
|
449
451
|
ruleReturnValue() ::= <<
|
450
452
|
<if(!ruleDescriptor.isSynPred)>
|
451
453
|
<if(ruleDescriptor.hasReturnValue)>
|
@@ -473,50 +475,58 @@ return_value.start = @input.look<\n>
|
|
473
475
|
<endif>
|
474
476
|
>>
|
475
477
|
|
476
|
-
|
477
478
|
ruleLabelDef(label) ::= <<
|
478
479
|
<label.label.text; format="label"> = nil<\n>
|
479
480
|
>>
|
480
481
|
|
481
|
-
|
482
482
|
ruleLabelDefs() ::= <<
|
483
|
-
<[
|
483
|
+
<[
|
484
|
+
ruleDescriptor.tokenLabels,
|
485
|
+
ruleDescriptor.tokenListLabels,
|
486
|
+
ruleDescriptor.wildcardTreeLabels,
|
487
|
+
ruleDescriptor.wildcardTreeListLabels,
|
488
|
+
ruleDescriptor.ruleLabels,
|
489
|
+
ruleDescriptor.ruleListLabels
|
490
|
+
]:
|
491
|
+
{<it.label.text; format="label"> = nil<\n>}
|
492
|
+
><[
|
493
|
+
ruleDescriptor.tokenListLabels,
|
494
|
+
ruleDescriptor.ruleListLabels,
|
495
|
+
ruleDescriptor.wildcardTreeListLabels
|
496
|
+
]:
|
497
|
+
{list_of_<it.label.text; format="label"> = []<\n>}
|
498
|
+
>
|
484
499
|
>>
|
485
500
|
|
486
|
-
|
487
|
-
|
488
501
|
/* * * * * * * * * * * * * R U L E H E L P E R S * * * * * * * * * * * * */
|
489
502
|
|
490
503
|
traceIn() ::= <<
|
491
504
|
<if(trace)>
|
492
|
-
trace_in(__method__, <ruleDescriptor.index>)<\n>
|
505
|
+
trace_in( __method__, <ruleDescriptor.index> )<\n>
|
493
506
|
<else>
|
494
507
|
# -> uncomment the next line to manually enable rule tracing
|
495
|
-
# trace_in(__method__, <ruleDescriptor.index>)<\n>
|
508
|
+
# trace_in( __method__, <ruleDescriptor.index> )<\n>
|
496
509
|
<endif>
|
497
510
|
>>
|
498
511
|
|
499
|
-
|
500
512
|
traceOut() ::= <<
|
501
513
|
<if(trace)>
|
502
|
-
trace_out(__method__, <ruleDescriptor.index>)<\n>
|
514
|
+
trace_out( __method__, <ruleDescriptor.index> )<\n>
|
503
515
|
<else>
|
504
516
|
# -> uncomment the next line to manually enable rule tracing
|
505
|
-
# trace_out(__method__, <ruleDescriptor.index>)<\n>
|
517
|
+
# trace_out( __method__, <ruleDescriptor.index> )<\n>
|
506
518
|
<endif>
|
507
519
|
>>
|
508
520
|
|
509
|
-
|
510
521
|
ruleCleanUp() ::= <<
|
511
522
|
<if(ruleDescriptor.hasMultipleReturnValues)>
|
512
523
|
<if(!TREE_PARSER)>
|
513
524
|
# - - - - - - - rule clean up - - - - - - - -
|
514
|
-
return_value.stop = @input.look(-1)<\n>
|
525
|
+
return_value.stop = @input.look( -1 )<\n>
|
515
526
|
<endif>
|
516
527
|
<endif>
|
517
528
|
>>
|
518
529
|
|
519
|
-
|
520
530
|
ruleMemoization(name) ::= <<
|
521
531
|
<if(memoize)>
|
522
532
|
# rule memoization
|
@@ -529,34 +539,28 @@ end<\n>
|
|
529
539
|
|
530
540
|
|
531
541
|
ruleScopeSetUp() ::= <<
|
532
|
-
<ruleDescriptor.useScopes:{@<it>_stack.push(@@<it>.new)<\n>}><ruleDescriptor.ruleScope:{@<it.name>_stack.push(@@<it.name>.new)<\n>}>
|
542
|
+
<ruleDescriptor.useScopes:{@<it>_stack.push( @@<it>.new )<\n>}><ruleDescriptor.ruleScope:{@<it.name>_stack.push( @@<it.name>.new )<\n>}>
|
533
543
|
>>
|
534
544
|
|
535
|
-
|
536
545
|
ruleScopeCleanUp() ::= <<
|
537
546
|
<ruleDescriptor.useScopes:{@<it>_stack.pop<\n>}><ruleDescriptor.ruleScope:{@<it.name>_stack.pop<\n>}>
|
538
547
|
>>
|
539
548
|
|
540
|
-
|
541
549
|
memoize() ::= <<
|
542
550
|
<if(memoize)><if(backtracking)>
|
543
|
-
memoize(__method__, <ruleDescriptor.name>_start_index, success) if @state.backtracking > 0<\n>
|
551
|
+
memoize( __method__, <ruleDescriptor.name>_start_index, success ) if @state.backtracking > 0<\n>
|
544
552
|
<endif><endif>
|
545
553
|
>>
|
546
554
|
|
547
|
-
|
548
555
|
/** helper template to format a ruby method call */
|
549
556
|
methodCall(n, del, args) ::= <<
|
550
|
-
<if(del)>@<del:delegateName()>.<endif><n><if(args)>(<args; separator=", ">)<endif>
|
557
|
+
<if(del)>@<del:delegateName()>.<endif><n><if(args)>( <args; separator=", "> )<endif>
|
551
558
|
>>
|
552
559
|
|
553
|
-
|
554
560
|
/* * * * * * * * * * * * * L E X E R P A R T S * * * * * * * * * * * * * */
|
555
561
|
|
556
|
-
|
557
562
|
actionGate() ::= "@state.backtracking == 0"
|
558
563
|
|
559
|
-
|
560
564
|
/** A (...) subrule with multiple alternatives */
|
561
565
|
block(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,maxK,maxAlt,description) ::= <<
|
562
566
|
# at line <description>
|
@@ -565,7 +569,6 @@ alt_<decisionNumber> = <maxAlt>
|
|
565
569
|
<@body><blockBody()><@end>
|
566
570
|
>>
|
567
571
|
|
568
|
-
|
569
572
|
/** A rule block with multiple alternatives */
|
570
573
|
ruleBlock(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,maxK,maxAlt,description) ::= <<
|
571
574
|
# at line <description>
|
@@ -577,14 +580,12 @@ case alt_<decisionNumber>
|
|
577
580
|
end
|
578
581
|
>>
|
579
582
|
|
580
|
-
|
581
583
|
ruleBlockSingleAlt(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,description) ::= <<
|
582
584
|
<decls>
|
583
585
|
<@prealt()>
|
584
586
|
<alts>
|
585
587
|
>>
|
586
588
|
|
587
|
-
|
588
589
|
/** A special case of a (...) subrule with a single alternative */
|
589
590
|
blockSingleAlt(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,description) ::= <<
|
590
591
|
# at line <description>
|
@@ -593,7 +594,6 @@ blockSingleAlt(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber
|
|
593
594
|
<alts>
|
594
595
|
>>
|
595
596
|
|
596
|
-
|
597
597
|
/** A (..)+ block with 0 or more alternatives */
|
598
598
|
positiveClosureBlock(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,maxK,maxAlt,description) ::= <<
|
599
599
|
# at file <description>
|
@@ -603,10 +603,8 @@ positiveClosureBlock(alts,decls,decision,enclosingBlockLevel,blockLevel,decision
|
|
603
603
|
<@end>
|
604
604
|
>>
|
605
605
|
|
606
|
-
|
607
606
|
positiveClosureBlockSingleAlt ::= positiveClosureBlock
|
608
607
|
|
609
|
-
|
610
608
|
/** A (..)* block with 0 or more alternatives */
|
611
609
|
closureBlock(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,maxK,maxAlt,description) ::= <<
|
612
610
|
# at line <description>
|
@@ -616,19 +614,15 @@ closureBlock(alts,decls,decision,enclosingBlockLevel,blockLevel,decisionNumber,m
|
|
616
614
|
<@end>
|
617
615
|
>>
|
618
616
|
|
619
|
-
|
620
617
|
closureBlockSingleAlt ::= closureBlock
|
621
618
|
|
622
|
-
|
623
619
|
/** Optional blocks (x)? are translated to (x|) by before code
|
624
620
|
* generation so we can just use the normal block template
|
625
621
|
*/
|
626
622
|
optionalBlock ::= block
|
627
623
|
|
628
|
-
|
629
624
|
optionalBlockSingleAlt ::= block
|
630
625
|
|
631
|
-
|
632
626
|
/** An alternative is just a list of elements; at outermost
|
633
627
|
* level
|
634
628
|
*/
|
@@ -637,23 +631,28 @@ alt(elements,altNum,description,autoAST,outerAlt,treeLevel,rew) ::= <<
|
|
637
631
|
<elements:element()><rew>
|
638
632
|
>>
|
639
633
|
|
640
|
-
|
641
634
|
/** match a token optionally with a label in front */
|
642
635
|
tokenRef(token,label,elementIndex,hetero) ::= <<
|
643
|
-
<if(label)><label; format="label"> = <endif>match(<token>, TOKENS_FOLLOWING_<token>_IN_<ruleName>_<elementIndex>)
|
636
|
+
<if(label)><label; format="label"> = <endif>match( <token>, TOKENS_FOLLOWING_<token>_IN_<ruleName>_<elementIndex> )
|
644
637
|
>>
|
645
638
|
|
646
|
-
|
647
639
|
/** ids+=ID */
|
648
640
|
tokenRefAndListLabel(token,label,elementIndex,hetero) ::= <<
|
649
641
|
<tokenRef(...)>
|
650
642
|
<addToList(elem={<label; format="label">},...)>
|
651
643
|
>>
|
644
|
+
|
645
|
+
/* TRY THIS:
|
646
|
+
tokenRefAndListLabel(token,label,elementIndex,hetero) ::= <<
|
647
|
+
list_of_<label; format="label"> << match( <token>, TOKENS_FOLLOWING_<token>_IN_<ruleName>_<elementIndex> )
|
648
|
+
>>
|
649
|
+
*/
|
650
|
+
|
652
651
|
addToList(label,elem) ::= <<
|
653
652
|
list_of_<label; format="label"> \<\< <elem><\n>
|
654
653
|
>>
|
655
|
-
listLabel ::= addToList
|
656
654
|
|
655
|
+
listLabel ::= addToList
|
657
656
|
|
658
657
|
/** For now, sets are interval tests and must be tested inline */
|
659
658
|
matchSet(s,label,elementIndex,postmatchCode) ::= <<
|
@@ -668,10 +667,10 @@ if <s>
|
|
668
667
|
<endif>
|
669
668
|
else
|
670
669
|
<ruleBacktrackFailure()>
|
671
|
-
mse = MismatchedSet(nil)
|
670
|
+
mse = MismatchedSet( nil )
|
672
671
|
<@mismatchedSetException()>
|
673
672
|
<if(LEXER)>
|
674
|
-
recover
|
673
|
+
recover mse
|
675
674
|
raise mse<\n>
|
676
675
|
<else>
|
677
676
|
raise mse<\n>
|
@@ -686,10 +685,8 @@ matchSetAndListLabel(s,label,elementIndex,postmatchCode) ::= <<
|
|
686
685
|
<addToList(elem={<label; format="label">},...)>
|
687
686
|
>>
|
688
687
|
|
689
|
-
|
690
688
|
matchRuleBlockSet ::= matchSet
|
691
689
|
|
692
|
-
|
693
690
|
wildcard(label,elementIndex) ::= <<
|
694
691
|
<if(label)>
|
695
692
|
<label; format="label"> = @input.look<\n>
|
@@ -697,6 +694,11 @@ wildcard(label,elementIndex) ::= <<
|
|
697
694
|
match_any
|
698
695
|
>>
|
699
696
|
|
697
|
+
/* TRY THIS:
|
698
|
+
wildcard(label,elementIndex) ::= <<
|
699
|
+
<if(label)><label; format="label"> = <endif>match_any
|
700
|
+
>>
|
701
|
+
*/
|
700
702
|
|
701
703
|
wildcardAndListLabel(label,elementIndex) ::= <<
|
702
704
|
<wildcard(...)>
|
@@ -708,62 +710,65 @@ wildcardAndListLabel(label,elementIndex) ::= <<
|
|
708
710
|
* arguments and a return value or values.
|
709
711
|
*/
|
710
712
|
ruleRef(rule,label,elementIndex,args,scope) ::= <<
|
711
|
-
@state.following.push(TOKENS_FOLLOWING_<rule.name>_IN_<ruleName>_<elementIndex>)
|
713
|
+
@state.following.push( TOKENS_FOLLOWING_<rule.name>_IN_<ruleName>_<elementIndex> )
|
712
714
|
<if(label)><label; format="label"> = <endif><methodCall(del=scope, n={<rule.name>}, args=args)>
|
713
715
|
@state.following.pop
|
714
716
|
>>
|
715
717
|
|
716
|
-
|
717
718
|
/** ids+=ID */
|
718
719
|
ruleRefAndListLabel(rule,label,elementIndex,args,scope) ::= <<
|
719
720
|
<ruleRef(...)>
|
720
721
|
<addToList(elem={<label; format="label">},...)>
|
721
722
|
>>
|
722
723
|
|
723
|
-
|
724
724
|
/** match ^(root children) in tree parser */
|
725
725
|
tree(root, actionsAfterRoot, children, nullableChildList, enclosingTreeLevel, treeLevel) ::= <<
|
726
726
|
<root:element()>
|
727
727
|
<actionsAfterRoot:element()>
|
728
728
|
<if(nullableChildList)>
|
729
729
|
if @input.peek == DOWN
|
730
|
-
match(DOWN, nil)
|
730
|
+
match( DOWN, nil )
|
731
731
|
<children:element()>
|
732
|
-
match(UP, nil)
|
732
|
+
match( UP, nil )
|
733
733
|
end
|
734
734
|
<else>
|
735
|
-
match(DOWN, nil)
|
735
|
+
match( DOWN, nil )
|
736
736
|
<children:element()>
|
737
|
-
match(UP, nil)
|
737
|
+
match( UP, nil )
|
738
738
|
<endif>
|
739
739
|
>>
|
740
740
|
|
741
|
-
|
742
741
|
/** Every predicate is used as a validating predicate (even when
|
743
742
|
* it is also hoisted into a prediction expression).
|
744
743
|
*/
|
745
744
|
validateSemanticPredicate(pred,description) ::= <<
|
746
|
-
|
745
|
+
<if(backtracking)>
|
746
|
+
unless ( <evalPredicate(...)> )
|
747
747
|
<ruleBacktrackFailure()>
|
748
|
-
raise FailedPredicate("<ruleName>", "<description>")
|
748
|
+
raise FailedPredicate( "<ruleName>", "<description>" )
|
749
749
|
end
|
750
|
+
<else>
|
751
|
+
raise FailedPredicate( "<ruleName>", "<description>" ) unless ( <evalPredicate(...)> )
|
752
|
+
<endif>
|
750
753
|
>>
|
751
754
|
|
752
|
-
|
753
755
|
dfaState(k,edges,eotPredictsAlt,description,stateNumber,semPredState) ::= <<
|
754
|
-
look_<decisionNumber>_<stateNumber> = @input.peek(<k>)<\n>
|
756
|
+
look_<decisionNumber>_<stateNumber> = @input.peek( <k> )<\n>
|
755
757
|
<edges; separator="\nels">
|
756
758
|
else
|
757
759
|
<if(eotPredictsAlt)>
|
758
760
|
alt_<decisionNumber> = <eotPredictsAlt><\n>
|
759
761
|
<else>
|
760
|
-
|
761
|
-
|
762
|
+
<if(backtracking)>
|
763
|
+
<ruleBacktrackFailure()><\n>
|
764
|
+
<endif>
|
765
|
+
<@noViableAltException>
|
766
|
+
raise NoViableAlternative( "<description>", <decisionNumber>, <stateNumber> )<\n>
|
767
|
+
<@end>
|
762
768
|
<endif>
|
763
769
|
end
|
764
770
|
>>
|
765
771
|
|
766
|
-
|
767
772
|
/** Same as a normal DFA state except that we don't examine
|
768
773
|
* look for the bypass alternative. It delays error
|
769
774
|
* detection but this is faster, smaller, and more what people
|
@@ -772,7 +777,7 @@ end
|
|
772
777
|
* lookup; preds might not need.
|
773
778
|
*/
|
774
779
|
dfaOptionalBlockState(k,edges,eotPredictsAlt,description,stateNumber,semPredState) ::= <<
|
775
|
-
look_<decisionNumber>_<stateNumber> = @input.peek(<k>)<\n>
|
780
|
+
look_<decisionNumber>_<stateNumber> = @input.peek( <k> )<\n>
|
776
781
|
<edges; separator="\nels">
|
777
782
|
end
|
778
783
|
>>
|
@@ -787,7 +792,7 @@ end
|
|
787
792
|
* look lookup; preds might not need.
|
788
793
|
*/
|
789
794
|
dfaLoopbackState(k,edges,eotPredictsAlt,description,stateNumber,semPredState) ::= <<
|
790
|
-
look_<decisionNumber>_<stateNumber> = @input.peek(<k>)<\n>
|
795
|
+
look_<decisionNumber>_<stateNumber> = @input.peek( <k> )<\n>
|
791
796
|
<edges; separator="\nels"><\n>
|
792
797
|
<if(eotPredictsAlt)>
|
793
798
|
else
|
@@ -802,14 +807,13 @@ end
|
|
802
807
|
*/
|
803
808
|
dfaAcceptState(alt) ::= "alt_<decisionNumber> = <alt>"
|
804
809
|
|
805
|
-
|
806
810
|
/** A simple edge with an expression. If the expression is
|
807
811
|
* satisfied, enter to the target state. To handle gated
|
808
812
|
* productions, we may have to evaluate some predicates for
|
809
813
|
* this edge.
|
810
814
|
*/
|
811
815
|
dfaEdge(labelExpr, targetState, predicates) ::= <<
|
812
|
-
if (<labelExpr>)
|
816
|
+
if ( <labelExpr> )<if(predicates)> and ( <predicates> )<endif>
|
813
817
|
<targetState>
|
814
818
|
>>
|
815
819
|
|
@@ -819,29 +823,31 @@ if (<labelExpr>) <if(predicates)>and (<predicates>)<endif>
|
|
819
823
|
* CodeGenerator.canGenerateSwitch().
|
820
824
|
*/
|
821
825
|
dfaStateSwitch(k,edges,eotPredictsAlt,description,stateNumber,semPredState) ::= <<
|
822
|
-
case look_<decisionNumber> = @input.peek(<k>)
|
826
|
+
case look_<decisionNumber> = @input.peek( <k> )
|
823
827
|
<edges; separator="\n">
|
824
828
|
else
|
825
829
|
<if(eotPredictsAlt)>
|
826
830
|
alt_<decisionNumber> = <eotPredictsAlt><\n>
|
827
831
|
<else>
|
828
|
-
|
829
|
-
|
830
|
-
|
832
|
+
<if(backtracking)>
|
833
|
+
<ruleBacktrackFailure()><\n>
|
834
|
+
<endif>
|
835
|
+
<@noViableAltException>
|
836
|
+
raise NoViableAlternative( "<description>", <decisionNumber>, <stateNumber> )<\n>
|
837
|
+
<@end>
|
831
838
|
<endif>
|
832
839
|
end
|
833
840
|
>>
|
834
841
|
|
835
842
|
|
836
843
|
dfaOptionalBlockStateSwitch(k, edges, eotPredictsAlt, description, stateNumber, semPredState) ::= <<
|
837
|
-
case look_<decisionNumber> = @input.peek(<k>)
|
844
|
+
case look_<decisionNumber> = @input.peek( <k> )
|
838
845
|
<edges; separator="\n">
|
839
846
|
end
|
840
847
|
>>
|
841
848
|
|
842
|
-
|
843
849
|
dfaLoopbackStateSwitch(k, edges, eotPredictsAlt, description, stateNumber, semPredState) ::= <<
|
844
|
-
case look_<decisionNumber> = @input.peek(<k>)
|
850
|
+
case look_<decisionNumber> = @input.peek( <k> )
|
845
851
|
<edges; separator="\n">
|
846
852
|
<if(eotPredictsAlt)>
|
847
853
|
else
|
@@ -850,21 +856,18 @@ else
|
|
850
856
|
end
|
851
857
|
>>
|
852
858
|
|
853
|
-
|
854
859
|
dfaEdgeSwitch(labels, targetState) ::= <<
|
855
860
|
when <labels:{<it>}; separator=", "> then <targetState>
|
856
861
|
>>
|
857
862
|
|
858
|
-
|
859
863
|
/** The code to initiate execution of a cyclic DFA; this is used
|
860
864
|
* in the rule to predict an alt just like the fixed DFA case.
|
861
865
|
* The <name> attribute is inherited via the parser, lexer, ...
|
862
866
|
*/
|
863
867
|
dfaDecision(decisionNumber, description) ::= <<
|
864
|
-
alt_<decisionNumber> = @dfa<decisionNumber>.predict(@input)
|
868
|
+
alt_<decisionNumber> = @dfa<decisionNumber>.predict( @input )
|
865
869
|
>>
|
866
870
|
|
867
|
-
|
868
871
|
/** Generate the tables and support code needed for the DFAState
|
869
872
|
* object argument. Unless there is a semantic predicate (or
|
870
873
|
* syn pred, which become sem preds), all states should be
|
@@ -875,14 +878,14 @@ alt_<decisionNumber> = @dfa<decisionNumber>.predict(@input)
|
|
875
878
|
*/
|
876
879
|
cyclicDFA(dfa) ::= <<
|
877
880
|
class DFA<dfa.decisionNumber> \< ANTLR3::DFA
|
878
|
-
EOT = unpack(<dfa.javaCompressedEOT; anchor, separator=", ", wrap="\n">)
|
879
|
-
EOF = unpack(<dfa.javaCompressedEOF; anchor, separator=", ", wrap="\n">)
|
880
|
-
MIN = unpack(<dfa.javaCompressedMin; anchor, separator=", ", wrap="\n">)
|
881
|
-
MAX = unpack(<dfa.javaCompressedMax; anchor, separator=", ", wrap="\n">)
|
882
|
-
ACCEPT = unpack(<dfa.javaCompressedAccept; anchor, separator=", ", wrap="\n">)
|
883
|
-
SPECIAL = unpack(<dfa.javaCompressedSpecial; anchor, separator=", ", wrap="\n">)
|
881
|
+
EOT = unpack( <dfa.javaCompressedEOT; anchor, separator=", ", wrap="\n"> )
|
882
|
+
EOF = unpack( <dfa.javaCompressedEOF; anchor, separator=", ", wrap="\n"> )
|
883
|
+
MIN = unpack( <dfa.javaCompressedMin; anchor, separator=", ", wrap="\n"> )
|
884
|
+
MAX = unpack( <dfa.javaCompressedMax; anchor, separator=", ", wrap="\n"> )
|
885
|
+
ACCEPT = unpack( <dfa.javaCompressedAccept; anchor, separator=", ", wrap="\n"> )
|
886
|
+
SPECIAL = unpack( <dfa.javaCompressedSpecial; anchor, separator=", ", wrap="\n"> )
|
884
887
|
TRANSITION = [
|
885
|
-
<dfa.javaCompressedTransition:{s|unpack(<s; wrap="\n", anchor, separator=", ">)}; separator=",\n">
|
888
|
+
<dfa.javaCompressedTransition:{s|unpack( <s; wrap="\n", anchor, separator=", "> )}; separator=",\n">
|
886
889
|
].freeze
|
887
890
|
|
888
891
|
( 0 ... MIN.length ).zip( MIN, MAX ) do | i, a, z |
|
@@ -915,21 +918,19 @@ def special_state_transition_for_dfa<dfa.decisionNumber>(s, input)
|
|
915
918
|
<if(backtracking)>
|
916
919
|
@state.backtracking > 0 and raise ANTLR3::Error::BacktrackingFailed<\n>
|
917
920
|
<endif>
|
918
|
-
nva = ANTLR3::Error::NoViableAlternative.new(@dfa<dfa.decisionNumber>.description, <dfa.decisionNumber>, s, input)
|
919
|
-
@dfa<dfa.decisionNumber>.error(nva)
|
921
|
+
nva = ANTLR3::Error::NoViableAlternative.new( @dfa<dfa.decisionNumber>.description, <dfa.decisionNumber>, s, input )
|
922
|
+
@dfa<dfa.decisionNumber>.error( nva )
|
920
923
|
raise nva
|
921
924
|
end
|
922
925
|
>>
|
923
926
|
|
924
|
-
|
925
|
-
cyclicDFASynpred(name) ::= <<
|
927
|
+
cyclicDFASynpred( name ) ::= <<
|
926
928
|
def <name>() @recognizer.<name> end<\n>
|
927
929
|
>>
|
928
930
|
|
929
|
-
|
930
931
|
cyclicDFAInit(dfa) ::= <<
|
931
932
|
<if(dfa.specialStateSTs)>
|
932
|
-
@dfa<dfa.decisionNumber> = DFA<dfa.decisionNumber>.new(self, <dfa.decisionNumber>) do |s|
|
933
|
+
@dfa<dfa.decisionNumber> = DFA<dfa.decisionNumber>.new( self, <dfa.decisionNumber> ) do |s|
|
933
934
|
case s
|
934
935
|
<dfa.specialStateSTs:{state|when <i0>
|
935
936
|
<state>}; separator="\n">
|
@@ -939,15 +940,15 @@ cyclicDFAInit(dfa) ::= <<
|
|
939
940
|
<if(backtracking)>
|
940
941
|
@state.backtracking > 0 and raise ANTLR3::Error::BacktrackingFailed<\n>
|
941
942
|
<endif>
|
942
|
-
nva = ANTLR3::Error::NoViableAlternative.new(@dfa<dfa.decisionNumber>.description, <dfa.decisionNumber>, s, input)
|
943
|
-
@dfa<dfa.decisionNumber>.error(nva)
|
943
|
+
nva = ANTLR3::Error::NoViableAlternative.new( @dfa<dfa.decisionNumber>.description, <dfa.decisionNumber>, s, input )
|
944
|
+
@dfa<dfa.decisionNumber>.error( nva )
|
944
945
|
raise nva
|
945
946
|
end
|
946
947
|
|
947
948
|
s
|
948
949
|
end<\n>
|
949
950
|
<else>
|
950
|
-
@dfa<dfa.decisionNumber> = DFA<dfa.decisionNumber>.new(self, <dfa.decisionNumber>)<\n>
|
951
|
+
@dfa<dfa.decisionNumber> = DFA<dfa.decisionNumber>.new( self, <dfa.decisionNumber> )<\n>
|
951
952
|
<endif>
|
952
953
|
>>
|
953
954
|
|
@@ -959,12 +960,12 @@ cyclicDFAState(decisionNumber, stateNumber, edges, needErrorClause, semPredState
|
|
959
960
|
look_<decisionNumber>_<stateNumber> = @input.peek
|
960
961
|
<if(semPredState)>
|
961
962
|
index_<decisionNumber>_<stateNumber> = @input.index
|
962
|
-
@input.rewind(@input.last_marker, false)<\n>
|
963
|
+
@input.rewind( @input.last_marker, false )<\n>
|
963
964
|
<endif>
|
964
965
|
s = -1
|
965
966
|
<edges; separator="els">end
|
966
967
|
<if(semPredState)> <! return input cursor to state before we rewound !>
|
967
|
-
@input.seek(index_<decisionNumber>_<stateNumber>)<\n>
|
968
|
+
@input.seek( index_<decisionNumber>_<stateNumber> )<\n>
|
968
969
|
<endif>
|
969
970
|
>>
|
970
971
|
|
@@ -973,11 +974,10 @@ s = -1
|
|
973
974
|
* for special states.
|
974
975
|
*/
|
975
976
|
cyclicDFAEdge(labelExpr, targetStateNumber, edgeNumber, predicates) ::= <<
|
976
|
-
if (<labelExpr>)<if(predicates)>
|
977
|
+
if ( <labelExpr> )<if(predicates)> and ( <predicates> )<endif>
|
977
978
|
s = <targetStateNumber><\n>
|
978
979
|
>>
|
979
980
|
|
980
|
-
|
981
981
|
/** An edge pointing at end-of-token; essentially matches any
|
982
982
|
* char; always jump to the target.
|
983
983
|
*/
|
@@ -986,20 +986,18 @@ e
|
|
986
986
|
s = <targetStateNumber><\n>
|
987
987
|
>>
|
988
988
|
|
989
|
+
andPredicates(left,right) ::= "( <left> ) and ( <right> )"
|
989
990
|
|
990
|
-
|
991
|
+
orPredicates(operands) ::= "( <first(operands)> )<rest(operands):{o| or ( <o> )}>"
|
991
992
|
|
992
|
-
|
993
|
+
notPredicate(pred) ::= "not ( <pred> )"
|
993
994
|
|
994
|
-
|
995
|
-
|
996
|
-
evalPredicate(pred,description) ::= "(<pred>)"
|
995
|
+
evalPredicate(pred,description) ::= "( <pred> )"
|
997
996
|
|
998
997
|
evalSynPredicate(pred,description) ::= <<
|
999
|
-
syntactic_predicate?(
|
998
|
+
syntactic_predicate?( :<pred:{<it; format="lexerRule">}> )
|
1000
999
|
>>
|
1001
1000
|
|
1002
|
-
|
1003
1001
|
lookaheadTest(atom, k, atomAsInt) ::= "look_<decisionNumber>_<stateNumber> == <atom>"
|
1004
1002
|
|
1005
1003
|
/** Sometimes a look test cannot assume that LA(k) is in a
|
@@ -1008,34 +1006,30 @@ lookaheadTest(atom, k, atomAsInt) ::= "look_<decisionNumber>_<stateNumber> == <a
|
|
1008
1006
|
*/
|
1009
1007
|
isolatedLookaheadTest(atom, k, atomAsInt) ::= "@input.peek(<k>) == <atom>"
|
1010
1008
|
|
1011
|
-
|
1012
1009
|
lookaheadRangeTest(lower, upper, k, rangeNumber, lowerAsInt, upperAsInt) ::= <<
|
1013
|
-
look_<decisionNumber>_<stateNumber>.between?(<lower>, <upper>)
|
1010
|
+
look_<decisionNumber>_<stateNumber>.between?( <lower>, <upper> )
|
1014
1011
|
>>
|
1015
1012
|
|
1016
|
-
|
1017
1013
|
isolatedLookaheadRangeTest(lower, upper, k, rangeNumber, lowerAsInt, upperAsInt) ::= <<
|
1018
|
-
@input.peek(<k>).between?(<lower>, <upper>)
|
1014
|
+
@input.peek( <k> ).between?( <lower>, <upper> )
|
1019
1015
|
>>
|
1016
|
+
|
1020
1017
|
setTest(ranges) ::= <<
|
1021
1018
|
<ranges; separator=" || ">
|
1022
1019
|
>>
|
1023
1020
|
|
1024
|
-
|
1025
1021
|
parameterAttributeRef(attr) ::= "<attr.name>"
|
1026
1022
|
|
1027
|
-
|
1028
1023
|
parameterSetAttributeRef(attr,expr) ::= "<attr.name> = <expr>"
|
1029
1024
|
|
1030
|
-
|
1031
1025
|
scopeAttributeRef(scope, attr, index, negIndex) ::= <<
|
1032
1026
|
<if(negIndex)>
|
1033
|
-
@<scope>_stack[-<negIndex>].<attr.name>
|
1027
|
+
@<scope>_stack[ -<negIndex> ].<attr.name>
|
1034
1028
|
<else>
|
1035
1029
|
<if(index)>
|
1036
|
-
@<scope>_stack[<index>].<attr.name>
|
1030
|
+
@<scope>_stack[ <index> ].<attr.name>
|
1037
1031
|
<else>
|
1038
|
-
@<scope>_stack
|
1032
|
+
@<scope>_stack.last.<attr.name>
|
1039
1033
|
<endif>
|
1040
1034
|
<endif>
|
1041
1035
|
>>
|
@@ -1043,12 +1037,12 @@ scopeAttributeRef(scope, attr, index, negIndex) ::= <<
|
|
1043
1037
|
|
1044
1038
|
scopeSetAttributeRef(scope, attr, expr, index, negIndex) ::= <<
|
1045
1039
|
<if(negIndex)>
|
1046
|
-
@<scope>_stack[-<negIndex>].<attr.name> = <expr>
|
1040
|
+
@<scope>_stack[ -<negIndex> ].<attr.name> = <expr>
|
1047
1041
|
<else>
|
1048
1042
|
<if(index)>
|
1049
|
-
@<scope>_stack[<index>].<attr.name> = <expr>
|
1043
|
+
@<scope>_stack[ <index> ].<attr.name> = <expr>
|
1050
1044
|
<else>
|
1051
|
-
@<scope>_stack
|
1045
|
+
@<scope>_stack.last.<attr.name> = <expr>
|
1052
1046
|
<endif>
|
1053
1047
|
<endif>
|
1054
1048
|
>>
|
@@ -1061,19 +1055,17 @@ scopeSetAttributeRef(scope, attr, expr, index, negIndex) ::= <<
|
|
1061
1055
|
*/
|
1062
1056
|
isolatedDynamicScopeRef(scope) ::= "@<scope>_stack"
|
1063
1057
|
|
1064
|
-
|
1065
1058
|
/** reference an attribute of rule; might only have single
|
1066
1059
|
* return value
|
1067
1060
|
*/
|
1068
1061
|
ruleLabelRef(referencedRule, scope, attr) ::= <<
|
1069
1062
|
<if(referencedRule.hasMultipleReturnValues)>
|
1070
|
-
(<scope; format="label">.nil? ? nil : <scope; format="label">.<attr.name>)
|
1063
|
+
( <scope; format="label">.nil? ? nil : <scope; format="label">.<attr.name> )
|
1071
1064
|
<else>
|
1072
1065
|
<scope; format="label">
|
1073
1066
|
<endif>
|
1074
1067
|
>>
|
1075
1068
|
|
1076
|
-
|
1077
1069
|
returnAttributeRef(ruleDescriptor, attr) ::= <<
|
1078
1070
|
<if(ruleDescriptor.hasMultipleReturnValues)>
|
1079
1071
|
return_value.<attr.name>
|
@@ -1082,7 +1074,6 @@ return_value.<attr.name>
|
|
1082
1074
|
<endif>
|
1083
1075
|
>>
|
1084
1076
|
|
1085
|
-
|
1086
1077
|
returnSetAttributeRef(ruleDescriptor, attr, expr) ::= <<
|
1087
1078
|
<if(ruleDescriptor.hasMultipleReturnValues)>
|
1088
1079
|
return_value.<attr.name> = <expr>
|
@@ -1091,57 +1082,37 @@ return_value.<attr.name> = <expr>
|
|
1091
1082
|
<endif>
|
1092
1083
|
>>
|
1093
1084
|
|
1094
|
-
|
1095
1085
|
/** How to translate $tokenLabel */
|
1096
1086
|
tokenLabelRef(label) ::= "<label; format=\"label\">"
|
1097
1087
|
|
1098
|
-
|
1099
1088
|
/** ids+=ID {$ids} or e+=expr {$e} */
|
1100
1089
|
listLabelRef(label) ::= "list_of_<label; format=\"label\">"
|
1101
1090
|
|
1102
|
-
|
1103
1091
|
tokenLabelPropertyRef_text(scope, attr) ::= "<scope; format=\"label\">.text"
|
1104
|
-
|
1105
|
-
|
1106
1092
|
tokenLabelPropertyRef_type(scope, attr) ::= "<scope; format=\"label\">.type"
|
1107
|
-
|
1108
|
-
|
1109
1093
|
tokenLabelPropertyRef_line(scope, attr) ::= "<scope; format=\"label\">.line"
|
1110
|
-
|
1111
|
-
|
1112
1094
|
tokenLabelPropertyRef_pos(scope, attr) ::= "<scope; format=\"label\">.column"
|
1113
|
-
|
1114
|
-
|
1115
1095
|
tokenLabelPropertyRef_channel(scope, attr) ::= "<scope; format=\"label\">.channel"
|
1116
|
-
|
1117
|
-
|
1118
1096
|
tokenLabelPropertyRef_index(scope, attr) ::= "<scope; format=\"label\">.index"
|
1119
|
-
|
1120
|
-
|
1121
1097
|
tokenLabelPropertyRef_tree(scope, attr) ::= "tree_for_<scope>"
|
1122
1098
|
|
1123
|
-
|
1124
1099
|
ruleLabelPropertyRef_start(scope, attr) ::= "<scope; format=\"label\">.start"
|
1125
|
-
|
1126
|
-
|
1127
1100
|
ruleLabelPropertyRef_stop(scope, attr) ::= "<scope; format=\"label\">.stop"
|
1128
|
-
|
1129
|
-
|
1130
1101
|
ruleLabelPropertyRef_tree(scope, attr) ::= "<scope; format=\"label\">.tree"
|
1131
1102
|
|
1132
|
-
|
1133
1103
|
ruleLabelPropertyRef_text(scope, attr) ::= <<
|
1134
1104
|
<if(TREE_PARSER)>
|
1135
|
-
(
|
1136
|
-
|
1137
|
-
@input.tree_adaptor.
|
1105
|
+
(
|
1106
|
+
@input.token_stream.to_s(
|
1107
|
+
@input.tree_adaptor.token_start_index( <scope; format="label">.start ),
|
1108
|
+
@input.tree_adaptor.token_stop_index( <scope; format="label">.start )
|
1109
|
+
) if <scope; format="label">
|
1110
|
+
)
|
1138
1111
|
<else>
|
1139
|
-
(<scope; format="label"
|
1112
|
+
( <scope; format="label"> && @input.to_s( <scope; format="label">.start, <scope; format="label">.stop ) )
|
1140
1113
|
<endif>
|
1141
1114
|
>>
|
1142
|
-
|
1143
|
-
|
1144
|
-
ruleLabelPropertyRef_st(scope, attr) ::= "(<scope; format=\"label\">.nil? ? nil : <scope; format=\"label\">.template)"
|
1115
|
+
ruleLabelPropertyRef_st(scope, attr) ::= "( <scope; format=\"label\"> && <scope; format=\"label\">.template )"
|
1145
1116
|
|
1146
1117
|
/******************************************************************************
|
1147
1118
|
***************** L E X E R - O N L Y T E M P L A T E S ******************
|
@@ -1154,20 +1125,23 @@ lexer(grammar, name, tokens, scopes, rules, numRules, labelType="ANTLR3::Token",
|
|
1154
1125
|
|
1155
1126
|
class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
1156
1127
|
@grammar_home = <grammar.name>
|
1157
|
-
|
1128
|
+
<if(!grammar.grammarIsRoot)>
|
1129
|
+
<autoloadDelegates()><\n>
|
1130
|
+
<endif>
|
1158
1131
|
include TokenData
|
1159
1132
|
<if(filterMode)>
|
1160
1133
|
include ANTLR3::FilterMode<\n>
|
1161
1134
|
<endif>
|
1162
1135
|
<scopes:{<if(it.isDynamicGlobalScope)><globalAttributeScopeClass(scope=it)><\n><endif>}>
|
1136
|
+
|
1163
1137
|
begin
|
1164
1138
|
generated_using( "<fileName>", "<ANTLRVersion>", "<runtimeLibraryVersion()>" )
|
1165
1139
|
rescue NoMethodError => error
|
1166
|
-
|
1140
|
+
# ignore
|
1167
1141
|
end
|
1168
1142
|
|
1169
|
-
RULE_NAMES = [<trunc(rules):{r|"<r.ruleName>"}; separator=", ", wrap="\n", anchor>].freeze
|
1170
|
-
RULE_METHODS = [<trunc(rules):{r|:<r.ruleName; format="lexerRule">}; separator=", ", wrap="\n", anchor>].freeze
|
1143
|
+
RULE_NAMES = [ <trunc(rules):{r|"<r.ruleName>"}; separator=", ", wrap="\n", anchor> ].freeze
|
1144
|
+
RULE_METHODS = [ <trunc(rules):{r|:<r.ruleName; format="lexerRule">}; separator=", ", wrap="\n", anchor> ].freeze
|
1171
1145
|
|
1172
1146
|
<if(grammar.delegators)>
|
1173
1147
|
masters( <grammar.delegators:{d|:<d.name>}; separator=", "> )<\n>
|
@@ -1176,25 +1150,17 @@ class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
|
1176
1150
|
imports( <grammar.directDelegates:{d|:<d.name>}; separator=", "> )<\n>
|
1177
1151
|
<endif>
|
1178
1152
|
|
1179
|
-
def initialize(<grammar.delegators:{g|<g:delegateName()>, }>input=nil, options = {})
|
1180
|
-
super(input, options)
|
1153
|
+
def initialize( <grammar.delegators:{g|<g:delegateName()>, }>input=nil, options = {} )
|
1154
|
+
super( input, options )
|
1181
1155
|
<if(memoize)>
|
1182
1156
|
<if(grammar.grammarIsRoot)>
|
1183
1157
|
@state.rule_memory = {}<\n>
|
1184
1158
|
<endif>
|
1185
1159
|
<endif>
|
1186
|
-
<grammar.delegators:{g|@<g:delegateName()> = <g:delegateName()><\n>}><grammar.directDelegates:{g|@<g:delegateName()> = <newDelegate(g)><\n>}><last(grammar.delegators):{g|@parent = @<g:delegateName()><\n>}>
|
1187
|
-
<if(actions.lexer.init)>
|
1188
|
-
|
1189
|
-
# - - - - - - - - - - @init - - - - - - - - - - - - - - -
|
1190
|
-
<actions.lexer.init><\n>
|
1191
|
-
<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")>
|
1192
1161
|
end
|
1193
|
-
<if(actions.lexer.members)>
|
1194
1162
|
|
1195
|
-
|
1196
|
-
<actions.lexer.members>
|
1197
|
-
<endif>
|
1163
|
+
<placeAction(scope="lexer",name="members")>
|
1198
1164
|
|
1199
1165
|
# - - - - - - - - - - - lexer rules - - - - - - - - - - - -
|
1200
1166
|
<rules:{<it><\n>}>
|
@@ -1219,7 +1185,7 @@ class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
|
1219
1185
|
end # class <if(grammar.delegator)><grammar.name><else>Lexer<endif> \< <superClass>
|
1220
1186
|
<if(!actions.(actionScope).main)>
|
1221
1187
|
|
1222
|
-
at_exit { <if(grammar.delegator)><grammar.name><else>Lexer<endif>.main(ARGV) } if __FILE__ == $0
|
1188
|
+
at_exit { <if(grammar.delegator)><grammar.name><else>Lexer<endif>.main( ARGV ) } if __FILE__ == $0
|
1223
1189
|
<endif>
|
1224
1190
|
>>
|
1225
1191
|
|
@@ -1239,7 +1205,7 @@ lexerRuleLabelDefs() ::= <<
|
|
1239
1205
|
lexerRule(ruleName,nakedBlock,ruleDescriptor,block,memoize) ::= <<
|
1240
1206
|
# lexer rule <ruleName; format="lexerRule"> (<ruleName>)
|
1241
1207
|
# (in <fileName>)
|
1242
|
-
def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>(<ruleDescriptor.parameterScope:parameterScope(scope=it)>)<endif>
|
1208
|
+
def <ruleName; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(scope=it)> )<endif>
|
1243
1209
|
<traceIn()><ruleScopeSetUp()><ruleDeclarations()><if(memoize)>
|
1244
1210
|
<if(backtracking)>
|
1245
1211
|
|
@@ -1308,7 +1274,7 @@ end
|
|
1308
1274
|
lexerRulePropertyRef_text(scope, attr) ::= "self.text"
|
1309
1275
|
lexerRulePropertyRef_type(scope, attr) ::= "type"
|
1310
1276
|
lexerRulePropertyRef_line(scope, attr) ::= "@state.token_start_line"
|
1311
|
-
lexerRulePropertyRef_pos(scope, attr)
|
1277
|
+
lexerRulePropertyRef_pos(scope, attr) ::= "@state.token_start_column"
|
1312
1278
|
|
1313
1279
|
/** Undefined, but present for consistency with Token
|
1314
1280
|
* attributes; set to -1
|
@@ -1316,7 +1282,7 @@ lexerRulePropertyRef_pos(scope, attr) ::= "@state.token_start_column"
|
|
1316
1282
|
lexerRulePropertyRef_index(scope, attr) ::= "-1"
|
1317
1283
|
lexerRulePropertyRef_channel(scope, attr) ::= "channel"
|
1318
1284
|
lexerRulePropertyRef_start(scope, attr) ::= "@state.token_start_position"
|
1319
|
-
lexerRulePropertyRef_stop(scope, attr) ::= "(self.character_index - 1)"
|
1285
|
+
lexerRulePropertyRef_stop(scope, attr) ::= "( self.character_index - 1 )"
|
1320
1286
|
|
1321
1287
|
/** A lexer rule reference */
|
1322
1288
|
lexerRuleRef(rule,label,args,elementIndex,scope) ::= <<
|
@@ -1361,7 +1327,7 @@ charRef(char,label) ::= <<
|
|
1361
1327
|
<if(label)>
|
1362
1328
|
<label; format="label"> = @input.peek<\n>
|
1363
1329
|
<endif>
|
1364
|
-
match(<char>)
|
1330
|
+
match( <char> )
|
1365
1331
|
>>
|
1366
1332
|
|
1367
1333
|
/** match a character range */
|
@@ -1369,7 +1335,7 @@ charRangeRef(a,b,label) ::= <<
|
|
1369
1335
|
<if(label)>
|
1370
1336
|
<label; format="label"> = @input.peek<\n>
|
1371
1337
|
<endif>
|
1372
|
-
match_range(<a>, <b>)
|
1338
|
+
match_range( <a>, <b> )
|
1373
1339
|
>>
|
1374
1340
|
|
1375
1341
|
filteringNextToken() ::= ""
|
@@ -1379,7 +1345,7 @@ filteringActionGate() ::= "@state.backtracking == 1"
|
|
1379
1345
|
lexerStringRef(string,label) ::= <<
|
1380
1346
|
<if(label)>
|
1381
1347
|
<label; format="label">_start = self.character_index
|
1382
|
-
match(<string>)
|
1348
|
+
match( <string> )
|
1383
1349
|
<label; format="label"> = create_token do |t|
|
1384
1350
|
t.input = @input
|
1385
1351
|
t.type = ANTLR3::INVALID_TOKEN_TYPE
|
@@ -1388,16 +1354,16 @@ match(<string>)
|
|
1388
1354
|
t.stop = character_index - 1
|
1389
1355
|
end
|
1390
1356
|
<else>
|
1391
|
-
match(<string>)
|
1357
|
+
match( <string> )
|
1392
1358
|
<endif>
|
1393
1359
|
>>
|
1394
1360
|
|
1395
1361
|
|
1396
1362
|
/** EOF in the lexer */
|
1397
1363
|
lexerMatchEOF(label,elementIndex) ::= <<
|
1398
|
-
<if(label)>
|
1364
|
+
<if(label)>
|
1399
1365
|
<label; format="label">_start_<elementIndex> = character_index
|
1400
|
-
match(ANTLR3::EOF)
|
1366
|
+
match( ANTLR3::EOF )
|
1401
1367
|
<label; format="label"> = create_token do |t|
|
1402
1368
|
t.input = @input
|
1403
1369
|
t.type = ANTLR3::INVALID_TOKEN_TYPE
|
@@ -1406,7 +1372,7 @@ match(ANTLR3::EOF)
|
|
1406
1372
|
t.stop = character_index - 1
|
1407
1373
|
end<\n>
|
1408
1374
|
<else>
|
1409
|
-
match(ANTLR3::EOF)<\n>
|
1375
|
+
match( ANTLR3::EOF )<\n>
|
1410
1376
|
<endif>
|
1411
1377
|
>>
|
1412
1378
|
|
@@ -1420,7 +1386,7 @@ rulePropertyRef_stop(scope, attr) ::= "return_value.stop"
|
|
1420
1386
|
rulePropertyRef_tree(scope, attr) ::= "return_value.tree"
|
1421
1387
|
|
1422
1388
|
/** $text in parser rule */
|
1423
|
-
rulePropertyRef_text(scope, attr) ::= "@input.to_s(return_value.start, @input.look(-1))"
|
1389
|
+
rulePropertyRef_text(scope, attr) ::= "@input.to_s( return_value.start, @input.look( -1 ) )"
|
1424
1390
|
|
1425
1391
|
/** $template in parser rule */
|
1426
1392
|
rulePropertyRef_st(scope, attr) ::= "return_value.template"
|
@@ -1465,7 +1431,7 @@ autoloadDelegates() ::= <<
|
|
1465
1431
|
|
1466
1432
|
delegateLexerRule(ruleDescriptor) ::= <<
|
1467
1433
|
# delegated lexer rule <ruleDescriptor.name; format="lexerRule"> (<ruleDescriptor.name> in the grammar)
|
1468
|
-
def <ruleDescriptor.name; format="lexerRule">(<ruleDescriptor.parameterScope:parameterScope(scope=it)>)
|
1434
|
+
def <ruleDescriptor.name; format="lexerRule"><if(ruleDescriptor.parameterScope)>( <ruleDescriptor.parameterScope:parameterScope(scope=it)> )<endif>
|
1469
1435
|
<methodCall(del=ruleDescriptor.grammar, n={<ruleDescriptor.name; format="lexerRule">}, args=ruleDescriptor.parameterScope.attributes)>
|
1470
1436
|
end
|
1471
1437
|
>>
|
@@ -1479,7 +1445,9 @@ grammarClassName() ::= <<
|
|
1479
1445
|
>>
|
1480
1446
|
|
1481
1447
|
newDelegate(gram) ::= <<
|
1482
|
-
<gram.name>.new(<trunc(gram.delegators):{p|<p:delegateName()>, }>
|
1448
|
+
<gram.name>.new( <trunc(gram.delegators):{p|<p:delegateName()>, }>
|
1449
|
+
self, @input, :state => @state<@delegateOptions()>
|
1450
|
+
)
|
1483
1451
|
>>
|
1484
1452
|
|
1485
1453
|
placeAction(scope, name) ::= <<
|
@@ -1491,4 +1459,4 @@ placeAction(scope, name) ::= <<
|
|
1491
1459
|
<endif>
|
1492
1460
|
>>
|
1493
1461
|
|
1494
|
-
runtimeLibraryVersion() ::= "1.
|
1462
|
+
runtimeLibraryVersion() ::= "1.7.2"
|