Antlr3(C#目标)持续命中幻影EOF角色

本文关键字:幻影 EOF 角色 目标 Antlr3 | 更新日期: 2023-09-27 18:26:53

在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版本没有经过彻底的调试,但到目前为止,我已经找到了解决这些问题的方法。思考如何在匹配这个lexer规则时不出现这个错误?

更新

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

Antlr3(C#目标)持续命中幻影EOF角色

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版本。