Java 表示DFA的数据结构

Java 表示DFA的数据结构,java,regex,data-structures,dfa,Java,Regex,Data Structures,Dfa,我想知道,代表DFA的最佳数据结构是什么 我正在考虑将正则表达式转换为DFA,并将此特定功能作为Java中的库 主要的是,正则表达式中的每个实体都携带一组值,而不是像car这样的单个字符串值。在我的例子中,每个实体都有很多属性,比如{汽车,本田,4x4,轿车,}尽管我没有搜索汽车,这只是一个例子 有什么建议吗?web搜索将生成一些Java中的DFA示例。但是,最佳表示取决于您的具体应用要求;e、 g.您的应用程序将如何使用DFA。我认为您需要自己解决这个问题。一个web搜索将产生一些Java中D

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

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

主要的是,正则表达式中的每个实体都携带一组值,而不是像car这样的单个字符串值。在我的例子中,每个实体都有很多属性,比如{汽车,本田,4x4,轿车,}尽管我没有搜索汽车,这只是一个例子


有什么建议吗?

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

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

如果我正确理解你的问题,你想在动态类型的字母表上为任意常规语言建立一个匹配/过滤库吗?以你的汽车为例,我想你应该能够创建一个表达式来匹配一个列表,其中所有汽车都是红色的,有2到6名乘客,每个乘客的年龄在8到88岁之间,或者有1名乘客


巧合的是,我自己也在寻找类似的东西来进行文档验证,我能得到的最接近的东西是;Java RELAX-NG库。不幸的是,Jing中的字母表由XML节点组成,因此它没有解决我的问题。目前,我正试图自己编写一个库,根据Jing中的模式匹配,在任意类型的字母表上对常规语言进行匹配。如果你愿意帮忙,请告诉我

如果我正确理解了您的问题,您是否希望在动态类型的字母表上为任意常规语言提供匹配/筛选库?以你的汽车为例,我想你应该能够创建一个表达式来匹配一个列表,其中所有汽车都是红色的,有2到6名乘客,每个乘客的年龄在8到88岁之间,或者有1名乘客


巧合的是,我自己也在寻找类似的东西来进行文档验证,我能得到的最接近的东西是;Java RELAX-NG库。不幸的是,Jing中的字母表由XML节点组成,因此它没有解决我的问题。目前,我正试图自己编写一个库,根据Jing中的模式匹配,在任意类型的字母表上对常规语言进行匹配。如果你愿意帮忙,请告诉我

由于数据原因,我确信这个答案对最初的问题没有用处,但是如果有人从谷歌那里看到这个问题


DFA和NFA可以存储为,然后通过移动链接后面的表来执行解析。

我相信由于数据原因,这个答案对原始问题不会有用,但是如果有人在谷歌遇到这个问题


DFA和NFA可以存储为,然后通过移动链接后面的表来执行解析。

这不是正则表达式库已经做过的吗?JFlap就是这样做的。看看他们的工作@我认为正则表达式只能处理带有单个属性的字符串输入。但是转换的输入可能会占用多个时间values@Mike当前位置我查看了jflap,但它没有解决我的问题。我的问题是转换的输入不是单值的。它是多值的。希望,我把我的问题说清楚了。这不是正则表达式库已经做过的吗?JFlap就是这么做的。看看他们的工作@我认为正则表达式只能处理带有单个属性的字符串输入。但是转换的输入可能会占用多个时间values@Mike当前位置我查看了jflap,但它没有解决我的问题。我的问题是转换的输入不是单值的。它是多值的。希望,我把我的问题说清楚了。我不确定你的解释是否正确。实际上,文档中只包含car这个词。但是有一些与之相关的对象称为注释。所以car被标注为Vehicle,所以我通常搜索具有值car的注释类型Vehicle。该实体是众多实体中的第一个,它使正则表达式具有多个值。我所说的多重价值是指,就像汽车是一种类型的汽车。所以我可能会搜索像Seld这样的东西。这说明在doc中销售的汽车总数。这就是你所说的吗?@bsoundra:我其实不是在谈论文字,而是在谈论对象。如果您是在文本中搜索,那么它确实是不同的;。也许您可以更深入地阐述您的用例?我的i
nput就像是被卖掉的波奇。这个词可能被标记为car或Vehicle或。。。许多其他标签。这些信息存储在与文件关联的其他对象中。因此,如果我搜索的是销售,那么它应该找到匹配。我还可以搜索is Seld,它应该列出所有售出的车辆。我碰巧从中偶然发现了Java的常规语言/有限状态自动机工具包。这是一个相当理论化的解决方案,它仍然关注有限的字母表,但至少它从字符串中抽象出来,是开源的,非常完整的NFA、DFA、构建器等等。。修改源以支持不同标签之间的匹配不是一个简单的练习,但也不是不可能;。你可以在上面找到。我不确定你的解释是否正确。实际上,文档中只包含car这个词。但是有一些与之相关的对象称为注释。所以car被标注为Vehicle,所以我通常搜索具有值car的注释类型Vehicle。该实体是众多实体中的第一个,它使正则表达式具有多个值。我所说的多重价值是指,就像汽车是一种类型的汽车。所以我可能会搜索像Seld这样的东西。这说明在doc中销售的汽车总数。这就是你所说的吗?@bsoundra:我其实不是在谈论文字,而是在谈论对象。如果您是在文本中搜索,那么它确实是不同的;。也许您可以更深入地阐述您的用例?我的输入将类似于Porche被出售。这个词可能被标记为car或Vehicle或。。。许多其他标签。这些信息存储在与文件关联的其他对象中。因此,如果我搜索的是销售,那么它应该找到匹配。我还可以搜索is Seld,它应该列出所有售出的车辆。我碰巧从中偶然发现了Java的常规语言/有限状态自动机工具包。这是一个相当理论化的解决方案,它仍然关注有限的字母表,但至少它从字符串中抽象出来,是开源的,非常完整的NFA、DFA、构建器等等。。修改源以支持不同标签之间的匹配不是一个简单的练习,但也不是不可能;。你可以在电视上找到它。