我目前正在尝试使用我的 ANTLR4 Unity 项目中的解析器/词法分析器。 我采取的步骤是:
- 从单独项目中的语法生成解析器和词法分析器,并将词法分析器、解析器和访问者/监听器复制到 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 Community(如果您尚未安装)并在安装时确保安装:
- 核心 Visual Studio 编辑器(默认)
- .NET 桌面开发(在工作负载下)
- NuGet 包管理器(在单个组件下 -> 代码工具)
2) 创建一个新项目。
- 选择 Windows 经典桌面
- 选择 .NET Framework 应用
- 创建项目后,右键单击项目名称并选择“属性”并记下您的 .NET Framework 版本(我的是 4.6.1)
3) 使用 NuGet 安装 ANTLR4。安装最新的稳定版 ANTLR4(我的是 4.6.4)
- 右键单击“解决方案资源管理器”窗口中的顶级解决方案节点,然后选择“管理解决方案的 NuGet 包...”
- 选择浏览并在搜索框中键入 Antlr4
- 在搜索结果中会有几个选项。点击名字刚好是Antlr4的
- 在右侧 Pane 中,选择最新的稳定版本 (4.6.4),然后单击安装
4) 通过单击项目 -> 添加现有项... 并导航到您的 .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 并添加行“using System;”在顶部和底部的行“[assembly: CLSCompliant(false)]”
9) 移动到 Unity 并导入您在上一步中创建的文件夹。
10) 打开你安装Antlr4的目录,找到子目录Antlr4.Runtime.4.6.4/lib(你可能需要把4.6.4替换成你的ANTLR4版本)然后选择对应的文件夹步骤 2 中使用的 .NET 版本(在我的例子中,最接近的版本是 net4.5)。将 Antlr4.Runtime.dll 从该子目录拖到您的 Unity 项目中。
您应该可以在 Unity 中使用 ANTLR4。
关于c# - ANTLR4 与 Unity3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375476/