[antlr-interest] CSharp2 -debug generation bug

Johannes Luber JALuber at gmx.de
Tue Jun 16 14:10:50 PDT 2009


> The following grammar compiles fine under ANTLR 3.1.3 except if you use
> the -debug option, in which case it throws an exception during generation.
> Exception trace follows.
> 
> The culprit line is:
> message: unhSegment bgmSegment segment+ linLoop untSegment -> ^(MESSAGE
> unhSegment bgmSegment segment+ linLoop untSegment) ;
> 
> On this line, I added linLoop on both sides. linLoop in turn references
> segment+, which I suspect might be the problem. However, this grammar appears
> to generate okay when -debug is off. (The grammar is functionally flawed,
> but in any case it should not cause an exception for ANTLR to generate the
> parser from it.)
> 
> 
> Thanks,
> Rob

Testing with both the Java CSharp2 targets results in the following error for me:

error(10):  internal error: Test.g : java.util.NoSuchElementException: no such a
ttribute: description in template context [outputFile parser genericParser(...)
cyclicDFA if(dfa.specialStateSTs)_subtemplate anonymous cyclicDFAState cyclicDFA
Edge notPredicate evalPredicate(...)]
org.antlr.stringtemplate.StringTemplate.checkNullAttributeAgainstFormalArguments
(StringTemplate.java:1276)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:800)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
org.antlr.stringtemplate.StringTemplate.getAttribute(StringTemplate.java:682)
org.antlr.stringtemplate.language.ActionEvaluator.attribute(ActionEvaluator.java
:360)
org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:136)

org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:84
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ConditionalExpr.writeSubTemplate(ConditionalEx
pr.java:152)
org.antlr.stringtemplate.language.ConditionalExpr.write(ConditionalExpr.java:103
)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86
)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1278)
org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:463)
org.antlr.Tool.generateRecognizer(Tool.java:607)
org.antlr.Tool.process(Tool.java:429)
org.antlr.Tool.main(Tool.java:91)


No idea why I get a different error descritption, but it seems to be an error in all targets.

Johannes

> 
> ====
> 
> grammar Test;
> 
> options {
>   language = 'CSharp2' ;
>   output = AST ;
> }
> 
> tokens {
>     INTERCHANGE;
>     GROUP;
>     MESSAGE;
>     LOOP;
>     SECTION;
>     SEGMENT;
>     ELEMENT;
>     COMPONENT;
> }
> 
> file        : interchange EOF -> interchange;
> 
> interchange: unaSegment? unbSegment group unzSegment -> ^(INTERCHANGE
> unaSegment? unbSegment group unzSegment) ;
> group: ungSegment message+ uneSegment -> ^(GROUP ungSegment message+
> uneSegment) ;
> message: unhSegment bgmSegment segment+ linLoop untSegment -> ^(MESSAGE
> unhSegment bgmSegment segment+ linLoop untSegment) ;
> 
> linLoop: linSection+ -> ^(LOOP linSection+) ;
> linSection: linSegment segment+ -> ^(SECTION linSegment segment+ ) ;
> 
> bgmSegment: tagBGM elements -> ^(SEGMENT tagBGM elements) ;
> linSegment: tagLIN elements -> ^(SEGMENT tagLIN elements) ;
> 
> tagBGM    : { input.LT(1).Text == "BGM" }? TEXT ;
> tagLIN    : { input.LT(1).Text == "LIN" }? TEXT ;
> 
> 
> unaSegment: tagUNA elements -> ^(SEGMENT tagUNA elements) ;
> unbSegment: tagUNB elements -> ^(SEGMENT tagUNB elements) ;
> ungSegment: tagUNG elements -> ^(SEGMENT tagUNG elements) ;
> unhSegment: tagUNH elements -> ^(SEGMENT tagUNH elements) ;
> untSegment: tagUNT elements -> ^(SEGMENT tagUNT elements) ;
> uneSegment: tagUNE elements -> ^(SEGMENT tagUNE elements) ;
> unzSegment: tagUNZ elements -> ^(SEGMENT tagUNZ elements) ;
> 
> tagUNA    : { input.LT(1).Text == "UNA" }? TEXT ;
> tagUNB    : { input.LT(1).Text == "UNB" }? TEXT ;
> tagUNG    : { input.LT(1).Text == "UNG" }? TEXT ;
> tagUNH    : { input.LT(1).Text == "UNH" }? TEXT ;
> tagUNT    : { input.LT(1).Text == "UNT" }? TEXT ;
> tagUNE    : { input.LT(1).Text == "UNE" }? TEXT ;
> tagUNZ    : { input.LT(1).Text == "UNZ" }? TEXT ;
> 
> segment: tag elements -> ^(SEGMENT tag elements);
> //{ Console.WriteLine("Found segment: " + $tag.text); } 
> tag    :    TEXT
>     ;
> 
> ignoredLine    : unknownDiscriminator! elements! ;
> 
> unknownDiscriminator: TEXT;
> 
>         
> elements        : element* terminator! ;
> element        : ELEMENT_SEPARATOR t=components? -> ^(ELEMENT $t?) ;
> components    : comp1 comp2* ;
> 
> comp2        : COMPONENT_SEPARATOR t=TEXT? -> ^(COMPONENT $t?)
>     ;
> 
> comp1        : t=TEXT -> ^(COMPONENT $t)
>         | COMPONENT_SEPARATOR t=TEXT? -> ^(COMPONENT) ^(COMPONENT $t?) ;
> 
> terminator    : SEGMENT_TERMINATOR ;
> 
> //terminator    : (EOL | WS)+ ;
> 
> SEGMENT_TERMINATOR: '\'';
> ELEMENT_SEPARATOR: '+';
> COMPONENT_SEPARATOR:  ':';
> //TEXT: ('a'..'z'|'A'..'Z'|'0'..'9'|' '|'-'|','|'.'|'/'|'?')+ ;
> TEXT: ('a'..'z'|'A'..'Z'|'0'..'9'|' '|'-'|','|'.'|'/'|ESCAPE)+ ;
> fragment ESCAPE : '?' . ;
> 
> WS: ('\r'? '\n')+ { $channel = 99; }  ;
> 
> ====
> error(10):  internal error: <<OMITTED>>.g :
> java.util.NoSuchElementException: no such attribute: description in template context [out
> putFile parser genericParser(...) cyclicDFA
> if(dfa.specialStateSTs)_subtemplate anonymous cyclicDFAState cyclicDFAEdge notPredicate eva
> lPredicate(...)]
> org.antlr.stringtemplate.StringTemplate.checkNullAttributeAgainstFormalArguments(StringTemplate.java:1276)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:800)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:798)
> org.antlr.stringtemplate.StringTemplate.getAttribute(StringTemplate.java:682)
> org.antlr.stringtemplate.language.ActionEvaluator.attribute(ActionEvaluator.java:360)
> org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:136)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:84)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ConditionalExpr.writeSubTemplate(ConditionalExpr.java:152)
> org.antlr.stringtemplate.language.ConditionalExpr.write(ConditionalExpr.java:103)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:659)
> org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:148)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:700)
> org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1278)
> org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
> org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:463)
> org.antlr.Tool.generateRecognizer(Tool.java:607)
> org.antlr.Tool.process(Tool.java:429)
> org.antlr.Tool.main(Tool.java:91)
> 
> 
> _________________________________________________________________
> We are your photos. Share us now with Windows Live Photos.
> http://go.microsoft.com/?linkid=9666047

-- 
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01


More information about the antlr-interest mailing list