Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java语法分析器(ASCII到图形)_Java_Graph_Grammar_Reverse - Fatal编程技术网

Java语法分析器(ASCII到图形)

Java语法分析器(ASCII到图形),java,graph,grammar,reverse,Java,Graph,Grammar,Reverse,我正在开发一个助手来为DBA键入数据库命令,因为这些命令有许多参数,而助手将对他们的工作有很大帮助。对于这个助手,我需要命令的语法,但是数据库供应商(Oracle、DB2)不提供任何格式的信息,唯一的事情是文档 DB2命令的一个示例是: 出于这个原因,我试图分析语法图或铁路图(),但在Java中没有找到任何可以帮助我的东西。我想要一些重新设计(反向)工具,它采用语法的ASCII(文本表示),并用Java创建一个图形。然后,使用Java中的图形,助手可以提出当前类型命令的选项 论助手的例子 如果您

我正在开发一个助手来为DBA键入数据库命令,因为这些命令有许多参数,而助手将对他们的工作有很大帮助。对于这个助手,我需要命令的语法,但是数据库供应商(Oracle、DB2)不提供任何格式的信息,唯一的事情是文档

DB2命令的一个示例是:

出于这个原因,我试图分析语法图或铁路图(),但在Java中没有找到任何可以帮助我的东西。我想要一些重新设计(反向)工具,它采用语法的ASCII(文本表示),并用Java创建一个图形。然后,使用Java中的图形,助手可以提出当前类型命令的选项

论助手的例子

如果您有关于如何使用Java(而不是generate)分析语法图的信息,我将不胜感激。

您可以尝试使用ANTLR
它无法理解语法的ASCII表示形式,但如果您不介意花时间学习该软件,它的功能足够强大,可以做任何您需要的事情。

我见过的最接近的工具是拉尔夫·拉梅尔(Ralf Lammel)。它取决于铁路图作为文本字符串的可访问性。一般来说,他们不是这样被发现的。在DB2的例子中,您似乎很幸运,Ralf的工作指向了正确的方向

考虑到此类图表通常仅呈现为一组像素(PLSQL在为文档提供的PDF文件中类似于此),您有几组问题:从像素中识别图形实体,将它们组合到铁路图的实际表示中,然后使用例如您的助手

我认为这是一个漫长、艰难、不切实际的方法。如果你让它工作起来,你会发现图表在很多地方都有轻微的错误(阅读Ralf的论文或找出困难的方法),因此对于一个应该产生“正确”的东西来帮助你的DBA的工具来说是不可用的

当然,您反对另一种冗长、艰难、不切实际的方法,即阅读文档并生成匹配的语法,然后对照真实世界验证这些语法。是的,这也是一个艰难的过程,但它确实产生了有用的结果。您需要找到这样做的供应商,并将其提供给您

提供多种语法。你查过了吗

我的公司提供语法和处理它们的工具。我们已经为SQL和SQL2011完成了这项工作,但还没有为DB2完成

给定语法,您现在需要使用它向用户提供“建议”。您的用户不会输入完整的“程序”;他们希望生成片段(例如,SELECT语句)。现在您需要一个解析器来处理语法片段,并至少说“合法”或“不合法”。大多数人不会这么做。我们的国家将这样做

为了提供建议,您需要能够按照语法(就像您考虑的铁路图一样)来计算“下一步什么是合法的”。这实际上相当困难(事实上,它大致相当于LR/GLR解析器生成器在构建表时所做的工作)。我们的DMS引擎在语法错误修复期间通过遍历其GLR解析表来完成这项工作(因为这项工作已经在表中编码了!)。这并不容易做到,因为这是GLR解析算法的一个特殊变体。使用Earley解析器可能会做得更好,它将所有可能的解析作为一组选择保留下来;你可以简单地检查每一个

但是这看起来需要做很多工作,我想你会对你需要的机器数量感到惊讶

这方面最好的工作是,它为代码生成增量编辑器。我们的DMS引擎的解析器是基于这个项目的早期工作的,因为我们对增量方面感兴趣