[antlr-interest] V3 BUG in C# generator (3.0b5)
Bill Mayfield
antlr at telenet.be
Sat Dec 16 12:00:52 PST 2006
Howdy,
Sorry if this isn't the right place to report bugs but I don't know
where else to go with it so...
Following rule in the 5 minute introduction sample grammar (
http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3
) produces this C# error upon compilation.
Rule: WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { channel
= 99; } ;
Compilation Error: The name channel does not exist in the current context.
I guess channel = 99 should be _channel=99? But is this a bug in the C#
generator or in the grammer?
Below is the generated code for clarity:
// $ANTLR start WHITESPACE
public void mWHITESPACE() // throws RecognitionException [2]
{
try
{
ruleNestingLevel++;
int _type = WHITESPACE;
int _start = CharIndex;
int _line = Line;
int _charPosition = CharPositionInLine;
int _channel = Token.DEFAULT_CHANNEL;
// c:\\antlr\\work\\simplecalc\\SimpleCalc.g:46:14: ( (
('\\t'|' '|'\\r'|'\\n'|'\\u000C'))+ )
// c:\\antlr\\work\\simplecalc\\SimpleCalc.g:46:14: (
('\\t'|' '|'\\r'|'\\n'|'\\u000C'))+
{
// c:\\antlr\\work\\simplecalc\\SimpleCalc.g:46:14: (
('\\t'|' '|'\\r'|'\\n'|'\\u000C'))+
int cnt2 = 0;
do
{
int alt2 = 2;
int LA2_0 = input.LA(1);
if ( ((LA2_0 >= '\t' && LA2_0 <= '\n') || (LA2_0 >=
'\f' && LA2_0 <= '\r') || LA2_0 == ' ') )
{
alt2 = 1;
}
switch (alt2)
{
case 1 :
//
c:\\antlr\\work\\simplecalc\\SimpleCalc.g:46:16: ('\\t'|'
'|'\\r'|'\\n'|'\\u000C')
{
if ( (input.LA(1) >= '\t' && input.LA(1)
<= '\n') || (input.LA(1) >= '\f' && input.LA(1) <= '\r') || input.LA(1)
== ' ' )
{
input.Consume();
}
else
{
MismatchedSetException mse =
new
MismatchedSetException(null,input);
Recover(mse); throw mse;
}
}
break;
default:
if ( cnt2 >= 1 ) goto loop2;
EarlyExitException eee =
new EarlyExitException(2, input);
throw eee;
}
cnt2++;
} while (true);
loop2:
; // Stops C# compiler whinging that label
'loop2' has no statements
channel = 99;
}
if ( (token == null) && (ruleNestingLevel == 1) )
{
Emit(_type, _line, _charPosition, _channel,
_start, CharIndex-1);
}
}
finally
{
ruleNestingLevel--;
}
}
// $ANTLR end WHITESPACE
More information about the antlr-interest
mailing list