当前位置: 首页 > 知识库问答 >
问题:

删除ANTLR生成的java类中的(绝对)路径:

孔飞舟
2023-03-14

我正在使用ANTLRWorks 1.4.3和ANTLR 3.4从语法文件生成基于Java的解析器和lexer。生成的<代码>。java-文件包含如下字符串

C:\\Users\\[path to the eclipse project]\\src\\some\\package\\name\\MyGrammar.g

此绝对路径用作

  • 返回字符串,例如lexer和parser的方法getgrammaryfilename()中的字符串,以及
  • 在这两个文件中,都有不同的注释

我看到以下缺点:

  • 如果其他在其开发环境中具有不同路径的人将重新生成这些文件,那么即使没有对语法文件进行任何更改,也会引入很多更改

在AntlWorks或ANTLR s.th中是否有办法控制这种情况。至少只使用相对路径?

共有2个答案

苗学民
2023-03-14

在AntlWorks或ANTLR s.th中是否有办法控制这种情况。至少只使用相对路径?

这是特定于目标的,但是,没有目标允许您指定路径的类型(绝对或相对)。

“否”可能是因为只有在调试生成的lexer/解析器时才使用getGrammarFileName()。可能不应该将生成的源文件签入源代码管理,这样就不会有人看到您在生成的源文件中看到的路径。应该检查语法,并让开发人员从中生成自己的lexer/解析器。

同样,这都是我的猜测。

姜玮
2023-03-14

最后我找到了解决自己问题的方法。

路径似乎取决于您调用ANTLR的位置和方式。我无法使用ANTLRWorks实现这一点,但使用命令行ANTLR您可以执行此操作。您可以执行以下操作(示例适用于Windows,但也应该可以在其他操作系统上复制):

>

  • 为命令行下载Antlr并将其复制到例如。

    C:\Program Files(x86)\antlWorks\antlr-3.4-complete。jar。

    打开Windows命令行(cmd.exe)并更改到语法文件所在的目录:

    cd C:\Users[eclipse项目的路径]\src\some\package\name

    调用

    java -jar "C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar" MyGrammar.g
    

    从命令行。

    生成的java文件将只包含语法文件的名称,不再包含路径。

  •  类似资料:
    • 我有一个android应用程序,它在数组列表中绘制点的路径(名为“test”)。一种算法每次都会更新数组列表以使路径更短(它使用旅行推销员问题算法)。我目前面临的问题是以前的路径不清除,而是新的路径会覆盖以前的路径。

    • 我创建了一个jenkins服务器,并试图在该服务器上构建一个。NET Core2.0.0项目。我已经能够成功地从源代码管理中提取并在工作区中存储源文件。但是,我在运行dotnet构建命令时遇到了一个问题。这就是我得到的。 /usr/share/dotnet/sdk/2.0.0/microsoft.common.currentversion.targets(4116,5):错误MSB3021:无法将

    • 我导入了一个已经存在的gradle项目,所有的工作都很好,但是当我从eclipse刷新gradle源代码文件夹时,src和test文件夹都从构建路径中删除了,并且在test文件夹中使用的类也找不到了。 我试着把它作为一个Java和gradle项目导入,但到目前为止没有任何效果。此外,将build.gradle主源集更改为srcDirs=“src”也没有帮助。 这是我的建筑.Gradle,和原来的项

    • 问题内容: 由于GoPath约定,我将所有代码存储在仓库中的src目录下。因此,生成的BUILD.bazel文件已将src附加到importpaths中。但是从存储库中导入go代码不需要在其中包含src。因此,每次添加新的go目录时,我都必须更新生成的importpath。 我相信对go-prefix的支持正在消失。所以我不想使用它。 我总是可以更新importpath并在末尾添加#keep以防止

    • 本文向大家介绍获取Java中文件的绝对路径,包括了获取Java中文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件的绝对路径。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbsolutePath(

    • 英文原文:http://emberjs.com/guides/routing/generated-objects/ 正如在定义路由中所说的,无论何时,只要你定义了一个新的路由,Ember.js都会试着根据命名惯例寻找相对应的路由,控制器,视图还有模板类。一旦有任何一个对象找不到,那么在内存中,相对应的对象将会被生成。 生成的路由 假设你有下列路由: 1 2 3 App.Router.map(fu