Brad Ross
Brad Ross

Reputation: 461

Antlr3 (C# Target) Consistently Hits Phantom EOF Character

While writing an Antlr3 grammar in AntlrWorks (generating C#), I wrote the following set of lexer rules as follows:

array :
    '[' properties? ']' -> ^(ARR properties?)
    ;

properties :
    propertyName (','! propertyName)*
    ;

propertyName :
    ID
|   ESC_ID
    ;

ESC_ID :
    '\'' ESC_STRING '\''
    ;

fragment
ESC_STRING
    :   ( ESCAPE_SEQ | ~('\u0000'..'\u001f' | '\\' | '\"' ) )*
    ;

However, whenever I try to parse any string where the ESC_ID rule is matched, I hit a phantom EOF character at the end of the string:

Input: ['testing 123']

<mismatched token: [@4,15:15='<EOF>',<-1>,1:15]

I know that the Java version of ANTLR's generated code is not thoroughly debugged, but I've managed to find my way around the quirks so far. Thoughts on how not to hit this error when matching this lexer rule?

UPDATE

I have now tried using the official C# port of Antlr3, and I still get the same error.

Upvotes: 0

Views: 109

Answers (1)

Sam Harwell
Sam Harwell

Reputation: 100029

ANTLRWorks can't be used to generate code for the C# targets. You'll need to generate your C# code using the Antlr3.exe tool that's included in the C# port. The preferred method is using the MSBuild integration, which can either be done manually or (finally!) automatically using NuGet.

The latest official release is found here: http://www.antlr.org/wiki/display/ANTLR3/Antlr3CSharpReleases

In addition to that, I have released an alpha build of ANTLR 3 on NuGet. If you enable the "Include Prereleases" in the NuGet package manager in Visual Studio 2010+, you'll find it listed as ANTLR 3 version 3.5.0.3-alpha002.

Upvotes: 0

Related Questions