Antlr3(C#目标)始终击中幻影EOF角色

时间:2013-08-09 00:46:13

标签: c# java antlr antlr3

在AntlrWorks中编写Antlr3语法(生成C#)时,我编写了以下lexer规则集如下:

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

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

propertyName :
    ID
|   ESC_ID
    ;

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

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

但是,每当我尝试解析匹配ESC_ID规则的任何字符串时,我会在字符串末尾点击一个幻像EOF字符:

输入:['testing 123']

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

我知道ANTLR生成的代码的Java版本没有经过彻底的调试,但到目前为止我已经设法找到了解决问题的方法。关于如何在匹配此词法规则时不会出现此错误的想法?

更新

我现在尝试使用Antlr3的官方C#端口,但我仍然遇到同样的错误。

1 个答案:

答案 0 :(得分:0)

ANTLRWorks不能用于为C#目标生成代码。您需要使用C#端口中包含的Antlr3.exe工具生成C#代码。首选方法是使用MSBuild集成,可以手动完成,也可以(最后!)使用NuGet自动完成。

最新的官方发布在这里: http://www.antlr.org/wiki/display/ANTLR3/Antlr3CSharpReleases

除此之外,我还在NuGet上发布了ANTLR 3的alpha版本。如果在Visual Studio 2010+中的NuGet包管理器中启用“包含预发布”,则会发现它列为ANTLR 3版本3.5.0.3-alpha002。