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