我当前正在尝试在Unity项目中使用我的Antlr4 Parser/Lexer。我采取的步骤是:
- 在一个单独的项目中从语法中生成解析器和Lexer,并将Lexer,Parser和访客/听众复制到Unity Project
- 由于显然缺少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
该链接上的readme文件有很多有关安装运行时的信息。当我给您一个分步列表时,我将几次参考此读数。
我假设您正在使用Windows。您当前无法使用Mac编译C#的Antlr4解析器。
1)安装Visual Studio社区(如果还没有),并在安装时间确保安装:
- Core Visual Studio编辑器(默认)
- .NET桌面开发(在工作负载下)
- Nuget软件包管理器(在单个组件 ->代码工具下)
2)创建一个新项目。
- 选择Windows经典桌面
- 选择.NET Framework应用
- 创建了项目后,右键单击项目名称并选择属性,并记下您的.NET框架版本(我的是4.6.1)
3)使用nuget安装antlr4。安装最新的Antlr4稳定版本(我的是4.6.4)
- 右键单击"解决方案资源管理器"窗口中的顶级解决方案节点,然后选择"解决方案的Nuget软件包" ...
- 选择"浏览",然后在搜索框中类型antlr4
- 在搜索结果中,将有几个选项。单击其名称恰好是Antlr4 的那个
- 在右侧窗格中,选择为最新稳定版本(4.6.4)的版本,然后单击install
4)通过单击项目 ->添加现有项目...并导航到.G4文件。
,将您的语法文件(.G4)添加到您的项目中。5)从上面发布的链接中的github readme中:
如果已安装了ANTLR语言支持扩展,则将自动执行此步骤。否则,您将需要右键单击"解决方案资源管理器"中的语法文件,然后选择属性。在属性窗口中,配置以下项目。
- 构建操作:antlr4(如果antlr4在下拉列表中没有作为选项出现,请重新启动Visual Studio,然后重试) )
- 自定义工具:msbuild:编译
- 自定义工具名称空间:您希望生成的类位于 中的名称空间的完整名称
6)重新启动Visual Studio和Reload Project
7)选择构建 ->构建解决方案
8)查看〜/repos/projectName/projectName/obj/debug查找生成的文件
- 复制 *.tokens和 *.cs到新文件夹
- 还将repos/projectName/projectname/properties/assemblyInfo.cs复制到该新文件夹
- 打开汇编Info.cs,并添加"使用系统"行;在顶部和" [汇编:ClsCompliant(false)]"的线上
9)移至Unity并导入您在上一步中创建的文件夹。
10)您已经安装了antlr4的打开目录,并找到子目录antlr4.runtime.4.6.4/lib(您可能需要用Antlr4版本替换4.6.4),然后选择相应的文件夹步骤2中使用的.NET版本(在我的情况下,最接近的是Net4.5)。将antlr4.runtime.dll从该子目录中拖到您的Unity项目中。
,您应该在Uneine内使用Antlr4。
假设您已经在另一个项目中创建了解析器,并且只想使用与Unity一起生成的类,它就像放置 antlr4.runtime.standard.dll一样简单/em>文件到您的Unity文件夹资产/插件。这在 Unity 2019.3.9f1 。