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

如何使用antlr4 plsql语法(java和org.antlr.v4.gui.testrig)

齐思淼
2023-03-14

我试图使用从plsql antlr4语法文件生成的Java类解析存储在应用程序配置中的一些SQL。

在这个上下文中,我想知道如何正确使用这些类,以及如何利用grun(org.antlr.v4.gui.testrig)进行一些测试。

我在这里发现了一些元素,但它可能已经过时了,因为这篇文章

    null
@Test
public void testPlSqlGrammar() throws IOException {
    InputStream is = this.getClass().getClassLoader().getResourceAsStream("testfile.sql");
    CharStream s = CharStreams.fromStream(is);
    CaseChangingCharStream upper = new CaseChangingCharStream(s, true);
    Lexer lexer = new PlSqlLexer(upper);
    final CommonTokenStream tokenStream = new CommonTokenStream(lexer);
    PlSqlParser parser = new PlSqlParser(tokenStream);

    PlSqlParserListener listener = new PlSqlParserListener() {
        //here is my listener code
        //(...)
    }

    ParseTreeWalker walker = new ParseTreeWalker();
    parser.addParseListener(listener);
    parser.sql_script(); // <-- here I called this method which trigger a processing
}

注sql_script是语法的顶层元素

另一方面,我想使用antlr4入门文档中的org.antlr.v4.gui.testrig工具进行一些测试

我按照说明在Windows上安装了ANTLR-4.7.2,并根据语法生成了lexer和parser,如下所示

>antlr4 PlSqlLexer.g4
>java org.antlr.v4.Tool PlSqlLexer.g4
>antlr4 PlSqlParser.g4
>java org.antlr.v4.Tool PlSqlParser.g4
> javac Pl*.java
>grep -i grammar *.g4
PlSqlLexer.g4:lexer grammar PlSqlLexer;
PlSqlParser.g4:parser grammar PlSqlParser;
>grun PlSql r -tree
>grun PlSql r -gui
>java org.antlr.v4.gui.TestRig PlSql r -gui
SELECT FIELD1 FROM TABLE1;
^Z
No method for rule r or it has arguments

问题3有什么建议如何成功地使用这个antlr4 plsql语法的grun脚本吗?

共有1个答案

茹康裕
2023-03-14

触发整个InputStream处理的正确方法是什么?是否按照上面调用sql_script()方法的代码片段?

是的,要根据sql_script规则解析输入,可以调用解析器对象上的sql_script方法。

要使用的正确语法名称是什么?是PlSql吗?

 类似资料:
  • 我试图写一个翻译,将内缀转换为前缀。我知道语法,并阅读了“编译器原理,技术, 我不要求整个代码,我只需要一个例子,一个链接或任何东西来理解我应该如何做(不使用数组,动态数组,堆栈和任何在数据结构中教授的东西)。 在书中他们用这种方式将内缀转换为后缀

  • 我正在尝试使antlr C#g4语法与Python3中的antlr运行时一起工作。 下载文件夹中的antlr jar 同时在文件夹中下载lexer和解析器语法 通过对antlr JAR的java调用生成lexer和parser类 获取相关的类,这是lexer部分失败的事情,我将回到下面的错误 肮脏的代码 这段代码除了两件事外还可以工作: 首先,我发现了一些错误,这些错误似乎实际上是警告(请参阅Gi

  • 问题内容: 我试图更深入地了解Python的工作方式,并且一直在查看http://docs.python.org/3.3/reference/grammar.html上显示的语法。 我注意到它说您也必须更改parsermodule.c,但说实话,我只是不关注这里发生的事情。 我了解语法是如何阅读该语言的规范,但是…我什至不知道该写的是什么。它看起来几乎像Python,但实际上不是。 我希望更好地了

  • 问题内容: 我尝试为此添加UTF-8,但没有成功。读取Java中的俄语文件该怎么办? 问题答案: 如果文件来自Windows PC,请尝试使用“ windows-1251”或“ Cp1251”作为字符集名称。 如果文件是以某种方式在MS-DOS编码中,请尝试使用“ Cp866”。 这两种都是单字节编码,将文件类型更改为UTF-8(多字节)没有任何作用。 如果其他所有方法均失败,请使用十六进制编辑器

  • 本文向大家介绍Java switch 语句如何使用 String 参数,包括了Java switch 语句如何使用 String 参数的使用技巧和注意事项,需要的朋友参考一下 问题 当我尝试在 switch 语句使用 String 参数时(注意ctrType为字符串) 提示如下错误: 意思是说,我的 jre 本版本太低,不支持。据查 在 Java 7之前,switch 只能支持 byte、shor

  • 我想使用react.js和语义ui构建一个网络客户端。有一个节点包可以在react.js中使用语义ui;语义ui会做出反应。我已经按照react.semantic-ui.com/usage上的说明在我的计算机上安装了这个包,但是在测试了一个简单的网页后。 我想我有这个问题是因为我没有使用最后一条指令: