我目前正在尝试在Unity项目中使用我的ANTLR4解析器/词法分析器。
我采取的步骤是:


在一个单独的项目中从语法生成解析器和词法分析器,然后将Lexer,解析器和访问者/侦听器复制到Unity项目中
因为显然缺少Antlr4运行时,所以我添加了Antlr4.Runtime.v3.5.dll,因为Unity使用.NET 3.5
我修复了解析器中的一个错误,因为无法解析IReadOnlyList。我只是将其更改为IList


完成所有这些步骤后,Unity提示我以下错误:

-----CompilerOutput:-stdout--exitcode:
-1073741819--compilationhadfailure: True
--outfile: Temp/Assembly-CSharp.dll

compute_class_bitmap: Invalid type 13 for field
Antlr4.Runtime.Recognizer`2[Symbol,ATNInterpreter]:_interp


谁能帮我解决这个问题?非常重要的一点是,我要启动并运行该解析器,因为否则我将需要自己编写解析器,这将非常烦人...

最佳答案

确保您正在使用ANTLR的C#运行时,可以在github上找到它:

https://github.com/tunnelvisionlabs/antlr4cs

该链接上的自述文件包含有关安装运行时的大量信息。当我给您逐步的清单时,我将多次参考本自述文件。

我假设您正在使用Windows。您目前无法使用Mac为C#编译ANTLR4解析器。

1)安装Visual Studio社区(如果尚未安装),并在安装时确保安装:


核心Visual Studio编辑器(默认)
.NET桌面开发(在“工作量”下)
NuGet软件包管理器(在“单个组件”->“代码工具”下)


2)创建一个新项目。


选择Windows经典桌面
选择一个.NET Framework应用
创建项目后,右键单击项目名称,然后选择“属性”,并记下您的.NET Framework版本(我的版本为4.6.1)


3)使用NuGet安装ANTLR4。安装最新稳定版本的ANTLR4(我的是4.6.4)


右键单击“解决方案资源管理器”窗口中的顶级解决方案节点,然后选择“为解决方案管理NuGet软件包...”
选择浏览,然后在搜索框中键入Antlr4
在搜索结果中将有几个选项。单击名称恰好是Antlr4的那个
在右侧窗格中,将版本选择为最新的稳定版本(4.6.4),然后单击“安装”。


4)通过单击项目->添加现有项...,然后导航到.g4文件,将语法文件(.g4)添加到项目中。

5)在上面链接的github自述文件中:

如果安装了ANTLR语言支持扩展,则会自动执行此步骤。否则,您将需要在解决方案资源管理器中右键单击语法文件,然后选择“属性”。在属性窗口中,配置以下项目。


生成操作:Antlr4(如果Antlr4在下拉列表中没有显示为选项,请重新启动Visual Studio,然后重试)
自定义工具:MSBuild:Compile
自定义工具命名空间:您希望生成的类位于其中的命名空间的完整名称


6)重新启动Visual Studio并重新加载项目

7)选择Build-> Build Solution

8)在〜/ repos / projectName / projectName / obj / Debug中查找以查找生成的文件


将* .tokens和* .cs复制到新文件夹
还将repos / projectName / projectName / Properties / AssemblyInfo.cs复制到该新文件夹
打开AssemblyInfo.cs并添加“ using System;”行。在顶部,“ [assembly:CLSCompliant(false)]”行在底部


9)移至Unity并导入在上一步中创建的文件夹。

10)打开已安装Antlr4的目录,然后找到子目录Antlr4.Runtime.4.6.4 / lib(您可能需要将4.6.4替换为您的ANTLR4版本),然后选择相应.NET版本的文件夹如第2步中所用(在我的情况下,最接近的是net4.5)。将Antlr4.Runtime.dll从该子目录拖到Unity项目中。

而且您应该很好地在Unity中使用ANTLR4。

关于c# - 带有Unity3D的ANTLR4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22375476/

10-09 04:43