parsing - 测试两种常规语言的交集

标签 parsing finite-automata automata

我想测试两种语言是否有共同的字符串。这两种语言都来自下面描述的常规语言的子集,我只需要知道两种语言中是否存在字符串,而不是生成示例字符串。

语言由类似 glob 的字符串指定

/foo/**/bar/*.baz

其中 ** 匹配 0 个或多个字符,* 匹配零个或多个非 / 的字符,所有其他字符均为字面意思。

有什么想法吗?

谢谢, 麦克

编辑:

我实现了一些似乎表现良好的东西,但尚未尝试正确性证明。你可以看到sourceunit tests

最佳答案

为两种语言构建 FA AB,并构造“交集 FA”AnB。如果 AnB 至少有一个可从开始状态访问的接受状态,则存在一个同时使用两种语言的单词。

构造 AnB 可能很棘手,但我确信有 FA 教科书涵盖了它。我会采取的方法是:

  • AnB 的状态分别是 AB 状态的笛卡尔积。 AnB 中的状态写作 (a, b),其中 aA 中的状态bB 中的状态。
  • 转换 (a, b) ->r (c, d) (意思是,从 (a, b)(符号 r 上的 c, d) 存在,当且仅当 a ->r cA 中的转换,并且 b ->r dB 中的转换。
  • (a, b)AnB 中的开始状态,当且仅当 ab 是分别是AB
  • (a, b)AnB 中的接受状态,前提是每个状态都是其各自 FA 中的接受状态。

这完全是我的想法,因此完全未经证实!

关于parsing - 测试两种常规语言的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338716/

相关文章:

finite-automata - Dead state 是否包含在 Minimized DFA 中?

c++ - 在 C++ 中模拟确定性下推自动机 (PDA)

algorithm - 使用元胞自动机对图中的顶点进行可达性分析

c# - 从屏幕抓取中解析文本

finite-automata - NFA 相对于 DFA 的优点/缺点,反之亦然

c++ - 是否有可从 C++ 调用的良好图形布局库?

regex - 计算机是否可以通过用户提供的示例将 "learn"转换为正则表达式?

java - 如何读取可能是 int 或 double 的输入?

java - 无法让我的程序接受多个整数

java - java从xml文档接收子节点