在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#端口,但我仍然遇到同样的错误。
答案 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。