ANTLR4 with Unity3D



我当前正在尝试在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

中为我们工作。

相关内容

  • 没有找到相关文章

最新更新