0

在 AntlrWorks(生成 C#)中编写 Antlr3 语法时,我编写了以下一组词法分析器规则,如下所示:

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# 端口,我仍然得到同样的错误。

4

1 回答 1

0

ANTLRWorks 不能用于为 C# 目标生成代码。您需要使用Antlr3.exeC# 端口中包含的工具生成 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。

于 2013-08-09T02:39:26.970 回答