【问题标题】:ANTLR4 with Unity3DANTLR4 与 Unity3D
【发布时间】:2014-03-13 10:20:42
【问题描述】:

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

  • 从单独项目中的语法生成解析器和词法分析器,并将词法分析器、解析器和访问者/侦听器复制到 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

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

【问题讨论】:

  • 谢谢,最好避免在帖子中出现亲切的问候等。
  • 您能提供更多信息吗?例如,收到此错误时的 Unity 日志文件。

标签: c# unity3d antlr4


【解决方案1】:

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

https://github.com/tunnelvisionlabs/antlr4cs

该链接上的自述文件包含大量有关安装运行时的信息。在为您提供分步列表时,我将多次参考此自述文件。

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

1) 安装 Visual Studio Community(如果您还没有安装的话)并确保在安装时安装:

  • 核心 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) 通过单击 Project -> Add Existing Item... 并导航到您的 .g4 文件,将您的语法文件 (.g4) 添加到您的项目中。

5) 来自上面发布的链接的 github 自述文件:

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

  • 构建操作:Antlr4(如果 Antlr4 未作为选项出现在下拉列表中,请重新启动 Visual Studio,然后重试)
  • 自定义工具:MSBuild:Compile
  • 自定义工具命名空间:您希望生成的类所在的命名空间的完整名称

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

7) 选择构建 -> 构建解决方案

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

  • 将 *.tokens 和 *.cs 复制到新文件夹
  • 还将 repos/projectName/projectName/Properties/AssemblyInfo.cs 复制到该新文件夹中
  • 打开 AssemblyInfo.cs 并添加“使用系统;”行在顶部和底部的行“[assembly: CLSCompliant(false)]”

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

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

你应该很高兴在 Unity 中使用 ANTLR4。

【讨论】:

    【解决方案2】:

    假设您已经在另一个项目中创建了解析器,并且只想在 Unity 中使用生成的类,只需将 Antlr4.Runtime.Standard.dll 文件放入 Unity 文件夹即可资产/插件。这在 Unity 2019.3.9f1 中对我们有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多