[antlr-interest] CSharp2 -debug generation bug

Dukie Banderjee dukie_banderjee at hotmail.com
Mon Jun 15 20:21:32 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

====

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090615/c830991f/attachment.html 


More information about the antlr-interest mailing list