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

时间:2011-10-12 12:59:10

标签: java graph grammar reverse

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

DB2命令的一个示例是:http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0001933.html

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

助理http://www.youtube.com/watch?v=5sBoUHJupvs

的示例

如果您有关于如何使用Java(不生成)分析语法图的信息,我将非常感谢这些信息。

2 个答案:

答案 0 :(得分:3)

我见过的最接近的工具是Ralf Lammel的Grammar Recovery System。它取决于铁路图的可访问性为文本字符串。这通常不是他们的发现方式。你似乎在DB2案例中很幸运,Ralf的工作指向了正确的方向。

考虑到这些图表通常只是一组像素(PLSQL在为文档提供的PDF文件中就像这样),你有几组问题:从像素中识别图形实体,将它们组合成实际的表示形式。铁路图,然后使用你的助手。

我认为这是一个漫长,艰难,不切实际的方法。如果你让它发挥作用,你会发现这些图表在许多地方都有些错误(阅读Ralf的论文或找出困难的方法),因此无法用于生成“正确”的东西以帮助你的DBA。

当然,你反对另一种漫长,艰难,“不切实际”的方法来阅读文档并生成匹配的语法,然后验证那些语法对抗现实世界。是的,这也是一个艰难的跋涉,但它确实产生了有用的结果。您需要找到完成此操作的供应商,并将其提供给您。

ANTLR.org提供各种语法。你在那里检查过吗?

我公司提供处理它们的语法和工具。我们已经为PLSQL和SQL2011做了这个,但还没有DB2。

鉴于语法,您现在需要使用它来为您的用户提供“建议”。您的用户不会输入完整的“程序”;他们想要生成片段(例如,SELECT语句)。现在你需要一个解析器来处理语法片段,至少说“合法”或“不”。大多数人不会这样做。我们的DMS Software Reengineering Toolkit 会这样做。

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

但这看起来相当多,我觉得你会对你需要的机器数量感到惊讶。

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

答案 1 :(得分:0)

您可以尝试使用ANTLR http://www.antlr.org/ 它将无法理解语法的ASCII表示,但如果您不介意花时间学习该软件,它就足以执行您需要的任何其他操作。