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#端口,但仍然会出现同样的错误。
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版本。