【发布时间】:2010-02-26 00:33:59
【问题描述】:
我想测试两种语言是否有共同的字符串。这两种语言都来自下面描述的常规语言的子集,我只需要知道两种语言中是否存在字符串,而不是生成示例字符串。
语言由类似 glob 的字符串指定,如
/foo/**/bar/*.baz
其中** 匹配0 个或多个字符,* 匹配零个或多个不是/ 的字符,所有其他字符都是文字。
有什么想法吗?
谢谢, 迈克
编辑:
我实现了一些似乎表现良好的东西,但还没有尝试过正确性证明。你可以看到source和unit tests
【问题讨论】:
-
您将使用什么语言来执行检查?您可能需要为此编写一个测试平台。如果您可以发布一个相当完整的测试平台,那将会有所帮助。
-
这需要在 JS 中运行。我当然要写一个测试平台。我找到了一个有用的子集,我可以通过一些技巧有效地计算交集。有用的子集是 * 和 ** 只能出现在开头或直接出现在 / 之后,并且 / 不能与另一个 / 相邻。这意味着我永远不需要担心 foo 是否可以匹配 boo*baz ——我必须进行回溯,但不是荒谬的数量,因为我总是可以将 * 或 ** 后面的文本变成后缀检查。
标签: parsing finite-automata automata