[antlr-interest] Bug when using multi-parameter generics as return values?
Niemeijer, R.A.
r.a.niemeijer at tue.nl
Thu Jul 31 06:20:25 PDT 2008
Yep, setting the target to CSharp2 solved both problems.
Thanks!
-----Original Message-----
From: Johannes Luber [mailto:jaluber at gmx.de]
Sent: donderdag 31 juli 2008 15:21
To: Niemeijer, R.A.
Cc: antlr-interest at antlr.org
Subject: Re: [antlr-interest] Bug when using multi-parameter generics as
return values?
Niemeijer, R.A. schrieb:
> I switched to AntlrWorks 1.2b5 and Antlr 3.1b2.
> Unfortunately this causes two problems.
>
> The generated code for both the lexer and parser contains a group of
> code that looks like this (the real version is longer):
>
> const string DFA3_eotS =
> "\1\uffff\1\17\31\uffff";
> const string DFA3_eofS =
> "\33\uffff";
> const string DFA3_minS =
>
> "\1\52\1\105\10\uffff\1\125\2\uffff\1\106\2\uffff\1\116\2\uffff"+
> "\1\103\1\61\2\105\4\uffff";
>
> This causes compile errors. These can be overcome by putting @'s in
> front of the strings, but that is not something you want to do after
> every code generation.
Are you using CSharp as the target? AW 1.2b5 uses still ANTLR 3.1b1
which contains the bug you encounter above (although using @'s to "fix"
it won't actually work - use the command line or the CSharp2 target
which has further improvements like being maintained beyound ANTLR 3.2).
>
> Also, the code
>
> var input = sequence.Select(p => p.ParserText).Flatten();
> var lexer = new PuzzleLexer(new ANTLRStringStream(input));
>
> now throws a TypeInitializationException with an InnerException of
> "Index was outside the bounds of the array."
>
> I have the suspicion that both of these have to do with encoding, but
> I'm not sure. Does anyone happen to know the solution to these
problems?
>
> Thanks.
If the encoding doesn't cause the bug tell me about it.
Johannes
>
> -----Original Message-----
> From: Johannes Luber [mailto:jaluber at gmx.de]
> Sent: donderdag 31 juli 2008 12:24
> To: Niemeijer, R.A.
> Cc: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Bug when using multi-parameter generics
as
> return values?
>
> Niemeijer, R.A. schrieb:
>> Hello everyone,
>>
>> I have a question about using generics as return values (with C# as
> the
>> target language). When the generic has only one parameter everything
>> works correctly, e.g.
>>
>> elements[Scene scene] returns [IEnumerable<BuildingElement> elems]
>>
>> : ELEMS p=piece { $elems =
>> (IEnumerable<BuildingElement>)p.piece.Eval(scene); }
>> ;
>>
>> However, when I want to return a generic with more than one
parameter,
>
>> e.g. a Func<BuildingElement, int>, the code generation screws up: it
>> splits the type at the comma, giving one line with
> Func<BuildingElement
>> and one with int>, which obviously results in a compile error.
>>
>> It is possible to get around this problem with using-statements, such
> as
>> using FBI = System.Func<BuildingElement, int>;
>>
>> and then saying returns [FBI func]. However, this is far from
elegant,
>
>> especially when you have a lot of different types. Is there a correct
>> way to do this or if not, has this bug been fixed since Antlr 3.0.1?
>>
>> Thanks in advance.
>
> Try the newest beta. I believe some bugs regarding the handling of
> generics have been fiyed. Possibly you may need to escape <, >, [ and
]
> with a \.
>
> Johannes
>
More information about the antlr-interest
mailing list