Terence Parr schrieb:
> Ok, last runtime and template change before we go beta. I have one  
> customer with an outstanding bug (I *think*), but they should be able  
> to wait for 3.2.  I now need to go work on the documentation. This  
> last change was motivated by discussions with an important customer  
> this week. They were talking about the need for excellent error  
> recovery so I spent the time to figure out how to handle error  
> recovery within an alternative in the presence of actions a tree  
> construction. previously x=ID {f($x);} would do crazy things if ID  
> we're missing from input string. now, people have the opportunity to  
> specify how to conjure up the missing ID. gets added to the tree and  
> everything. Very cool... okay, here we go.
> 
> Single token insertion and deletion is back in with improvements so  
> that it works properly with actions and AST construction :)
> 
> Trivial change to Java.stg code gen template so that token labels are  
> set according to what match() does in terms of recovery:
> 
> /** match a token optionally with a label in front */
> tokenRef(token,label,elementIndex,hetero) ::= <<
> <if(label)>
> <label>=(<labelType>)input.LT(1);<\n>
> <endif>
> match(input,<token>,FOLLOW_<token>_in_<ruleName><elementIndex>);  
> <checkRuleBacktrackFailure()>
>  >>
> 
> becomes
> 
> /** match a token optionally with a label in front */
> tokenRef(token,label,elementIndex,hetero) ::= <<
> < 
> if 
> (label 
> )> 
> < 
> label 
>  > 
> = 
> (< 
> labelType 
>  > 
> )< 
> endif>match(input,<token>,FOLLOW_<token>_in_<ruleName><elementIndex>);  
> <checkRuleBacktrackFailure()>
>  >>
> 
> The runtime has some easy but widespread changes across files:
> 
> Added BaseRecognizer methods: getCurrentInputSymbol(),  
> getMissingSymbol()
> 
> Made match() return an object so that I can appropriately set token  
> labels in the parser or tree parser.
> 
> Updated unit tests.
> 
> Had to to do some re-factoring of the error handling code, I'm afraid.  
> Sorry!  EOF wasn't handled properly in some cases and I needed to make  
> the error recovery work better with token labels.
> 
> Made debug tree adaptor deal with tokens conjured up during error  
> recovery.
> 
> I was tempted to improves the debugging protocol to deal better with  
> exception information for AW, but decided against it.
> 
> Ter

Applying the changes (and some more) to the C# target I receive for the 
C example grammar these errors:

                  [exec] ANTLR Parser Generator  Version 3.1b1 (??) 
1989-2007
                  [exec] error(118): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:0:0: symbol Symbols conflicts with global dynamic scope 
with same
name
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:267:4: duplicate token type 'static' when collapsing 
subrule into
set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:269:4: duplicate token type 'auto' when collapsing subrule 
into se
t
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:271:4: duplicate token type 'register' when collapsing 
subrule int
o set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:341:4: duplicate token type 'union' when collapsing 
subrule into s
et
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:423:4: duplicate token type 'volatile' when collapsing 
subrule int
o set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:669:4: duplicate token type '*' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:671:4: duplicate token type '+' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:673:4: duplicate token type '-' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:675:4: duplicate token type '~' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:677:4: duplicate token type '!' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:699:9: duplicate token type OCTAL_LITERAL when collapsing 
subrule
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:701:9: duplicate token type DECIMAL_LITERAL when 
collapsing subrul
e into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:703:7: duplicate token type CHARACTER_LITERAL when 
collapsing subr
ule into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:705:4: duplicate token type STRING_LITERAL when collapsing 
subrule
  into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:707:9: duplicate token type FLOATING_POINT_LITERAL when 
collapsing
  subrule into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:755:4: duplicate token type '*=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:757:4: duplicate token type '/=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:759:4: duplicate token type '%=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:761:4: duplicate token type '+=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:763:4: duplicate token type '-=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:765:4: duplicate token type '<<=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:767:4: duplicate token type '>>=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:769:4: duplicate token type '&=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:771:4: duplicate token type '^=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:773:4: duplicate token type '|=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:827:33: duplicate token type '!=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:835:27: duplicate token type '>' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:835:31: duplicate token type '<=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:835:36: duplicate token type '>=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:843:31: duplicate token type '>>' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:827:33: duplicate token type '!=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:835:27: duplicate token type '>' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:835:31: duplicate token type '<=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:835:36: duplicate token type '>=' when collapsing subrule 
into set
                  [exec] error(204): 
/home/verequus/Arbeit/ANTLR/code/examples-v3
/csharp/C/C.g:843:31: duplicate token type '>>' when collapsing subrule 
into set
                  [exec] error(10):  internal error: 
/home/verequus/Arbeit/ANTLR/
code/examples-v3/csharp/C/C.g : java.lang.ArrayIndexOutOfBoundsException: -1
                  [exec] org.antlr.misc.BitSet.range(BitSet.java:365)
                  [exec] org.antlr.misc.BitSet.addAll(BitSet.java:105)
                  [exec] org.antlr.misc.BitSet.of(BitSet.java:351)
                  [exec] 
org.antlr.codegen.CodeGenerator.generateLocalFOLLOW(Code
Generator.java:590)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.atom(CodeGenTreeWalk
er.java:1993)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.element(CodeGenTreeW
alker.java:1686)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.alternative(CodeGenT
reeWalker.java:1290)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.block(CodeGenTreeWal
ker.java:1063)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.ebnf(CodeGenTreeWalk
er.java:1862)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.element(CodeGenTreeW
alker.java:1682)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.alternative(CodeGenT
reeWalker.java:1290)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.block(CodeGenTreeWal
ker.java:1063)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.rule(CodeGenTreeWalk
er.java:779)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.rules(CodeGenTreeWal
ker.java:570)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.grammarSpec(CodeGenT
reeWalker.java:512)
                  [exec] 
org.antlr.codegen.CodeGenTreeWalker.grammar(CodeGenTreeW 
    alker.java:330)
                  [exec] 
org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenera 
    tor.java:421)
                  [exec] org.antlr.Tool.generateRecognizer(Tool.java:419)
                  [exec] org.antlr.Tool.process(Tool.java:286)
                  [exec] org.antlr.Tool.main(Tool.java:71)


Did I do something wrong?

Johannes
_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org:8080/mailman/listinfo/antlr-dev

Reply via email to