【问题标题】:Simple parser for JMLJML 的简单解析器
【发布时间】:2011-04-13 16:45:20
【问题描述】:

我正在寻找一个用 Java 编写的能够读取 JML 的解析器。

基本上我希望解析器能够读取 JML 块并知道它属于哪个方法。

一直在看OpenJML项目,只是项目设置太多了。

【问题讨论】:

    标签: java jml


    【解决方案1】:

    我怀疑你会找到一个完全符合你想要的,甚至接近你想要的工具。

    您可以编写一个“部分”Java 语法来扫描输入文件中的//@ .../*@ ... @*/,直接跟在方法声明之后。 “部分”是指您不是在语义上解析输入源,而是仅在词法级别上执行此操作(因此仅用于标记)。确保您考虑了字符串文字:您不希望文字 String s = "/*@"; 成为 JML 规范的开头。

    两个著名的 Java 解析器生成器是:

    1. ANTLR
    2. JavaCC

    掌握其中任何一个都需要一些时间,特别是如果您是解析器生成器的新手,但是一旦掌握了窍门,创建一个可以做到这一点的小语法真的不需要太多工作可靠。

    【讨论】:

    • 这个想法听起来很有趣,但是,我没有时间学习解析器生成。我想我可以用几个 RegEx 来解决这个问题,您对此有何看法?
    • 使用正则表达式是不可靠的。您将无法区分有效的 JML 规范与字符串文字 (".../*@...") 和 cmets (//...@*/...) 内部的规范。
    • 我上面的例子可能永远不会出现,但是每当一大块代码被注释掉(或者被多个//'s,或者被/* ... */),一个正则表达式仍然会匹配里面的JML规范那些块。简而言之:正则表达式可能会奏效,但它永远不会是“值得生产”的解决方案,IMO(我一个真正的正则表达式爱好者!)。
    猜你喜欢
    • 2011-10-25
    • 2012-09-06
    • 1970-01-01
    • 2013-03-20
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多