- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用从 plsql antlr4 语法文件生成的 Java 类来解析存储在应用程序配置中的一些 SQL。
在这种情况下,我想知道如何正确使用这些类并利用 grun (org.antlr.v4.gui.TestRig) 进行一些测试。
我发现了一些元素here但它可能已经过时了,因为上一篇文章
一方面,我使用 org.antlr:antlr4-maven-plugin:4.7.2 创建了一个 Maven Java 项目,它从 Garmmar 文件 PlSqlLexer.g4 生成词法分析器、解析器、监听器和访问者类。和 PlSqlParser.g4从antlr4 github repository下载
现在我需要提示如何正确使用生成的类
@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
}
问题1触发整个InputStream处理的正确方法是什么,是按照上面的代码片段调用sql_script()方法吗?
注意 sql_script 是语法的顶级元素
另一方面,我想使用 antlr4 getting-started doc 中的 org.antlr.v4.gui.TestRig 工具进行一些测试。
我按照说明在 Windows 上安装了 antlr-4.7.2并从语法生成词法分析器和解析器,如下所示
>antlr4 PlSqlLexer.g4
>java org.antlr.v4.Tool PlSqlLexer.g4
>antlr4 PlSqlParser.g4
>java org.antlr.v4.Tool PlSqlParser.g4
我在文件夹中添加了 PlSqlBaseLexer.java 和 PlSqlBaseParser.java 来编译生成的类
> javac Pl*.java
然后我寻找正确的参数来启动 grun
>grep -i grammar *.g4
PlSqlLexer.g4:lexer grammar PlSqlLexer;
PlSqlParser.g4:parser grammar PlSqlParser;
但是,上述 2 个语法名称(PlSqlLexer、PlSqlParser)不起作用,仅使用“PlSql”通过以下命令触发工具执行
>grun PlSql r -tree
>grun PlSql r -gui
但是他们(都一致)返回了以下错误(以 -gui 风格为例)
>java org.antlr.v4.gui.TestRig PlSql r -gui
SELECT FIELD1 FROM TABLE1;
^Z
No method for rule r or it has arguments
问题2要使用的正确语法名称是什么?是 PlSql 吗?
问题3有什么建议如何成功使用 grun 脚本与此 antlr4 plsql 语法 吗?
最佳答案
What is the proper method to trigger the processing of the whole InputStream, is it as per the above snippet calling sql_script() method ?
是的,要根据 sql_script
规则解析输入,请调用解析器对象上的 sql_script
方法。
What is the correct grammar name to be used ? is it PlSql ?
是的。
Any advise how to use successfully grun script with this antlr4 plsql grammar ?
您需要指定要调用的规则的名称。在您的调用中,您传递了 r
作为规则名称,但语法未定义名为 r
的规则。这就是错误消息试图告诉您的内容。如果您想调用 sql_script
规则,则需要传递该规则而不是 r
,因此 grun PlSql sql_script -tree
或 grun PlSql sql_script -gui
。
关于java - 如何使用antlr4 plsql语法(java和org.antlr.v4.gui.TestRig),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56660700/
Schema.org、Goodrelations-vocabulary.org 和 Productontology.org 之间有什么关系? Schema.org 告知,“W3C schema.org
大家好,我想知道包 org.ietf、org.omg、org.w3c 和 org 是如何实现的.xml 已进入 "official" Java classes ? 例如,默认 JDK 不会包含 Apa
首先,我试图用来自 Schema.org 的属性定义数据库表,例如,例如,我有一个名为“JobPosting”的表,它或多或少具有与 http://schema.org/JobPosting 中定义的
我有一个 org.w3c.dom.Document 被 org.dom4j.io.DOMReader 解析。 我想通过 org.w3c.dom.Element 搜索 dom4j DOM 文档。 比方说
我正在将我的应用程序部署到 Tomcat 6.0.20。 应用程序使用 Hibernate 作为 Web 层的 ORM、Spring 和 JSF。 我还从 main() 方法制作了简单的运行器来测试
我有一个使用 hibernate > 4 的 gradle 项目。如果我在 Apache tomcat 中运行我的 war 文件,我不会收到任何错误。但是当我在 Wildfly 8.2 中部署它时,出
我正在尝试将 JaCoCo 添加到我的 Android 以覆盖 Sonar Qube。但是在运行命令 ./gradlew jacocoTestReport 时,我收到以下错误。 Task :app:
如何在 emacs 组织模式中格式化日期? 例如,在下表中,我希望日期显示为“Aug 29”或“Wed, Aug 29”而不是“” #+ATTR_HTML: border="2" rules="all
我想使用 org 模式来写一本技术书籍。我正在寻找一种将外部文件中的现有代码插入到 babel 代码块中的方法,该代码块在导出为 pdf 时会提供很好的格式。 例如 #+BEGIN_SRC pytho
用作引用:https://support.google.com/webmasters/answer/146750?hl=en 您会注意到在“产品”下有一个属性类别,此外页面下方还有一个示例: Too
我读了这个Google doc .它说我们不使用列表中的产品。 那么对于产品列表(具有多页的类似产品的类别,如“鞋子”),推荐使用哪种模式? 我用这个: { "@context": "htt
我目前在做DBpedia数据集,想通过wikidata实现schema.org和DBpedia的映射。因此我想知道 schema.org 和 wikidata 之间是否存在任何映射。 最佳答案 我认为
我爱org-tables ,我用它们来记录各种事情。我现在正在为 Nix 记录一些单行代码(在阅读了 Domen Kožar 的 excellent guide 后,在 this year's Eur
如果看一下 Movie在 schema.org 中输入,actor 和 actors 属性都是允许的(actor 取代 actors)。但是 author 和 contributor 属性没有等效项。
我们有一些餐厅有多个地点或分支机构。我想包含正确的 Schema.org 标记,但找不到任何允许列出多个餐厅的内容。 每家餐厅都有自己的地址、电子邮件、电话和营业时间,甚至可能是“分店名称”。 两个分
我在一个页面中有多个综合评分片段。 有没有办法让其中之一成为默认值?将显示在搜索引擎结果中的那个? 谢谢大家! 更新:该网页本质上是品牌的页面。它包含品牌评论的总评分及其产品列表(每个产品的总评分)。
我提到了一些相关的职位,但并没有解决我的问题。因为我正在使用maven-jar-plugin-2.4 jar。 我正在使用JBoss Developer Studio 7.1.1 GA IDE,并且正
网站的根页面(即 http://example.com/ )的特殊之处在于它是默认的着陆页。它可能包含许多不同的对象类型。 它可能被认为是一个网站,或者一个博客等... 但它是否也应该被标记为给定对象
我想将一些文本放入一个 org 文件中,当我将内容导出到其中一种目标类型(在本例中为 HTML)时,该文件不会发布。有什么方法可以实现这个目标吗? 最佳答案 您可能想要使用 :noexport: 标签
org-mode 是否有一个键绑定(bind)可以在编号/项目符号列表项之间移动,就像您可以对标题一样? 喜欢的功能: org-forward-heading-same-level 大纲下一个可见标题
我是一名优秀的程序员,十分优秀!