【问题标题】:Data Structure to represent a DFA表示 DFA 的数据结构
【发布时间】:2011-04-24 01:57:12
【问题描述】:

我想知道,代表 DFA 的最佳数据结构是什么?

我正在考虑将正则表达式转换为 DFA,并将此特定功能作为 Java 中的库。

主要的是,正则表达式中的每个实体都带有一组值,而不是像 "car" 这样的单个字符串值。在我的例子中,每个实体都会包含许多属性,例如 {car, Honda, 4x4,轿车, ... }(虽然我不是在搜索汽车,但这只是一个示例。)

有什么建议吗?

【问题讨论】:

  • 这不是正则表达式库已经做的吗?
  • JFlap 做到了这一点。看看他们的工作。 cs.duke.edu/csed/jflap
  • @Josh :我认为正则表达式只能处理具有单个属性的字符串输入。但是转换的输入可能会占用多个值
  • @Mike :我查看了 jflap 但它没有解决我的问题。我的问题是转换的输入不是单值的。它是多值的。希望,我把我的问题说清楚了。

标签: java regex data-structures dfa


【解决方案1】:

如果我正确理解您的问题,您是否希望在具有动态类型的字母表上为任意常规语言提供匹配/过滤库?以您的汽车示例为例,我想您希望能够创建一个表达式以匹配一个列表,其中所有汽车(红色,有 2 到 6 名乘客,每个乘客在 8 到88 岁)或(有 1 名乘客)。

巧合的是,我自己一直在寻找类似的东西(用于文档验证),我能得到的最接近的是Jing; Java RELAX-NG 库。不幸的是,Jing 中的字母表由 XML 节点组成,所以它没有解决我的问题。目前,我正在尝试自己编写一个库,它可以根据 Jing 中的模式匹配来执行此操作(通过任意类型的字母与常规语言匹配)。如果你想帮忙,请告诉我;)。

【讨论】:

  • 我不确定您的解释是否正确。实际上,该文件仅包含“汽车”一词。但是有一些与之相关的对象称为注释。所以汽车被注释为“车辆”所以我通常搜索具有值“汽车”的注释类型“车辆”。该实体是要遵循的众多实体中的第一个,它使正则表达式具有多个值。我的意思是多重值,就像汽车是一种类型的车辆。所以我可能会搜索“ sold”之类的内容。这告诉文档中售出的汽车总数。你说的是这个吗?
  • @bsoundra :我实际上不是在谈论文本,而是更多地谈论对象。如果您在文本中搜索,那么它确实是不同的;)。也许您可以更深入地阐述您的用例?
  • 我的输入类似于“Porche is sold”。这个词保时捷可能被标记为“汽车”或“车辆”或......许多其他标签。这些信息存储在与该文件关联的一些其他对象中。因此,如果我搜索“ 已售出”,那么它应该会找到匹配项。我还可以搜索“ is sold”,其中应列出所有已售出的车辆。
  • 我偶然发现了来自 .这是一个相当理论化的解决方案,它仍然专注于有限字母,但至少它从字符串中抽象出来,是开源的并且非常完整(NFA、DFA、构建器等)。修改源以支持不同标签之间的匹配不是一件容易的事,但也不是不可能的;)。您可以在laser.cs.umass.edu/opensource 上找到它。
【解决方案2】:

网络搜索会产生一些 Java 中的 DFA 示例。但是,最佳表示取决于您的具体应用要求;例如您的应用程序将如何使用 DFA。我认为你需要自己解决这个问题。

【讨论】:

    【解决方案3】:

    由于数据的原因,我确信这个答案对原始问题没有用,但如果有人从谷歌遇到这个问题......

    DFA 和 NFA 可以存储为 State transition table's,然后您可以通过移动链接后面的表格来执行解析。

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 2012-03-20
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2012-10-09
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多