[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