Java 如何测试ANTLR4中包含的PL/SQL语法?
我刚刚开始使用ANTLR,并想尝试使用语法测试解析一些简单的PL/SQL语句。我遵循中使用的格式 执行以下命令时不会出现问题:Java 如何测试ANTLR4中包含的PL/SQL语法?,java,oracle,parsing,plsql,antlr4,Java,Oracle,Parsing,Plsql,Antlr4,我刚刚开始使用ANTLR,并想尝试使用语法测试解析一些简单的PL/SQL语句。我遵循中使用的格式 执行以下命令时不会出现问题: antlr4 plsql.g4 java org.antlr.v4.Tool plsql.g4 javac plsql*.java 在入门示例中,它们运行以下命令: grun Hello r -tree 其中“Hello”是语法的名称,“r”是其产生式规则之一。语法表示“sql_脚本”生成规则由零个或多个单元语句或sqlplus命令组成,后跟输入流的结尾: sql_
antlr4 plsql.g4
java org.antlr.v4.Tool plsql.g4
javac plsql*.java
在入门示例中,它们运行以下命令:
grun Hello r -tree
其中“Hello”是语法的名称,“r”是其产生式规则之一。语法表示“sql_脚本”生成规则由零个或多个单元语句或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。这是一个显示我的终端窗口内容的示例。JVM是罪魁祸首。在检查系统范围的%CLASSPATH%环境变量(如果存在)之前,它不会首先自动检查工作目录。将“.”添加到%CLASSPATH%环境变量的开头将解决此问题,并允许命令按预期工作。请参阅Windows 10中“编辑环境变量”工具的这一部分,以了解其外观
可以通过控制面板->系统和安全->系统访问此工具,单击左侧显示“高级系统设置”的项目,然后单击标记为“环境变量”的按钮。选择一个变量,然后单击“编辑…”按钮将在屏幕截图中显示该工具。我像您一样执行了所有命令,一切正常!当我删除
plsqlLexer.class
文件时,我设法重现错误。是否确实在存在plsqlLexer.class
和plsqlParser$*.class
文件的目录中执行grun-plsql\u script-tree
命令?是。这是一个显示我的终端窗口内容的示例。在屏幕截图上:为什么用ls
命令列出的所有plsqlParser$*.class
文件都用单引号括起来'
?@Quepas我不确定。我认为这只是Windows命令提示符的一个怪癖。如果我在PowerShell中使用相同的命令,它将不带单引号地显示它们。没有这样的更改。我从1997年开始使用Java,它一直是这样工作的<代码>是默认的类路径,如果您根本没有,但如果有,它从来不会自动假装有一个。@EJP我的理解是,该行为是特定于JVM实现的。例如,我不记得OpenJDK是以这种方式工作的。@EJP我更改了答案的措辞,以便不将责任归咎于行为的改变,而是简单地描述了当前的行为。不管怎样,这都是正确的答案;作为提出问题的人,我可以确认这是问题的解决方案。如果你收回你的否决票,我将不胜感激。