【问题标题】:How can the PL/SQL grammar included with ANTLR4 be tested?如何测试 ANTLR4 中包含的 PL/SQL 语法?
【发布时间】:2017-04-03 04:25:31
【问题描述】:

我刚刚开始使用 ANTLR,并想尝试使用 plsql.g4 语法测试解析一些简单的 PL/SQL 语句。我遵循Getting Started with ANTLR v4 中使用的格式。

以下命令执行没有问题:

antlr4 plsql.g4
java org.antlr.v4.Tool plsql.g4
javac plsql*.java

在入门示例中,他们运行以下命令:

grun Hello r -tree

其中“Hello”是语法的名称,“r”是其产生式规则之一。语法表明 'sql_script' 产生规则由零个或多个单元语句或 sqlplus 命令组成,后跟输入流的结尾:

sql_script
    : (unit_statement | sql_plus_command)* EOF
    ;

所以我尝试像这样调用 PL/SQL 解析器:

grun plsql sql_script -tree

但我收到以下错误:

Can't load plsql as lexer or parser

调用此语法的解析器以生成简单 PL/SQL 语句的解析树的正确方法是什么?我在 Windows 机器上使用 JDK 8。这是一个screenshot,显示了我的终端窗口的内容。

【问题讨论】:

  • 我像你一样执行了所有命令,一切正常!当我删除 plsqlLexer.class 文件时,我设法重现错误。你确定在plsqlLexer.classplsqlParser$*.class文件所在的目录下执行grun plsql sql_script -tree命令吗?
  • 是的。这是一个screenshot,显示了我的终端窗口的内容。
  • 在截图上:为什么ls命令列出的所有plsqlParser$*.class文件都用单引号'括起来?
  • @Quepas 我不确定。我认为这只是 Windows 命令提示符的一个怪癖。如果我在 PowerShell 中使用相同的命令,它会在不带单引号的情况下显示它们。

标签: java oracle parsing plsql antlr4


【解决方案1】:

JVM 是罪魁祸首。在检查系统范围的 %CLASSPATH% 环境变量(如果存在)之前,它不会自动检查工作目录。添加一个“。”到 %CLASSPATH% 环境变量的开头将解决问题并允许命令按预期工作。请参阅 Windows 10 中编辑环境变量工具的 screenshot 以了解其外观。

这个工具可以通过控制面板 -> 系统和安全 -> 系统来访问,单击左侧的“高级系统设置”项,然后单击标有“环境变量”的按钮。选择一个变量,然后单击“编辑...”按钮将在屏幕截图中显示该工具。

【讨论】:

  • 没有这样的变化。自 1997 年以来我一直在使用 Java,它一直都是这样工作的。 . 是默认的 CLASSPATH,如果你根本没有的话,但如果有的话,它永远不会自动假装。
  • @EJP 我的理解是行为是特定于 JVM 实现的。例如,我不记得 OpenJDK 是这样工作的。
  • @EJP 我已经更改了答案的措辞,以免将责任归咎于行为的变化,而是简单地描述了当前的行为。无论哪种方式,这都是正确的答案;作为提出问题的人,我可以确认这是问题的解决方案。如果您撤回反对票,我们将不胜感激。
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2022-01-09
  • 2015-12-05
  • 2019-11-12
相关资源
最近更新 更多