Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ide 从示例数据创建语法分析器_Ide_Grammar_Parser Generator - Fatal编程技术网

Ide 从示例数据创建语法分析器

Ide 从示例数据创建语法分析器,ide,grammar,parser-generator,Ide,Grammar,Parser Generator,我一直在四处寻找,看看有什么可以帮助用户创建语法。有各种各样的IDE,但是。。。它们似乎是处理语法文件本身的文本编辑器。我正在寻找一种以数据为中心的方法。所以,假设我有很多我想用解析器解析的数据示例。因此,我想处理这个示例数据,并直接从中定义语法 有没有任何现有的软件可以做这样的事情 我想说得更清楚些 我要提到的一种以数据为中心的方法是用户加载数据样本。然后,他们会选择其中的部分,表示它们是字段,或者选择项目并将它们标记为分隔符,等等 与我看到的大多数IDE不同的是,只有文本编辑器可以用语法语言

我一直在四处寻找,看看有什么可以帮助用户创建语法。有各种各样的IDE,但是。。。它们似乎是处理语法文件本身的文本编辑器。我正在寻找一种以数据为中心的方法。所以,假设我有很多我想用解析器解析的数据示例。因此,我想处理这个示例数据,并直接从中定义语法

有没有任何现有的软件可以做这样的事情

我想说得更清楚些

我要提到的一种以数据为中心的方法是用户加载数据样本。然后,他们会选择其中的部分,表示它们是字段,或者选择项目并将它们标记为分隔符,等等


与我看到的大多数IDE不同的是,只有文本编辑器可以用语法语言本身进行编写。

任何有限的字符串集都构成一种常规语言。编写接受这样一种语言的NFA是微不足道的。由此,您可以使用子集构造生成DFA,并使用DFA对于不可区分关系的每个等价类只需要一个状态这一事实将其最小化。所以这是一个完全的算法过程。。。获得正则表达式和/或语法同样简单

也就是说,如果你想生成一个语法来生成字符串,可能还有其他字符串。。。你的问题似乎不对劲。对于任何有限的字符串集,无限多的语法生成它们和其他字符串。。。这个数字的无穷大来源于这样一个事实:只要您点击目标数据集,就可以生成任何其他字符串。你的问题本质上是,“给定序列a1,a2,…,an,…,的开头,说出接下来的n个元素是什么。”这是不可能做到的,除非你只是想要一些答案。。。在这种情况下,您总是可以从DFA开始,并建议推广这一点的方法(即,只接受更多字符串)


事实上,如果使用常规语法,很容易引入新字符串。。。所以,也许可以用第一个答案作为起点。不过,请注意,从NFA到DFA的转换效率可能非常低。。。渐近指数。

我认为您不想将此限制为FSA,而是语法(无论是否与上下文无关)。我建议看看;那里似乎有一些关于算法(对不起,不是软件)的讨论。

我一直想知道这一点,但我认为您必须从数据集中推断语法,但我渴望看到其他人的答案。有趣的问题。看看我的答案是否指向正确的方向。。。我可以详细说明我在获取正则语法/正则表达式时提到的任何步骤。1)一般来说,不可能从数据中推断出唯一的语法。2) 语法描述语言的存在是因为人们认真研究了这个问题,并提出了最好的(从他们的角度)解决方案。因此,缺乏“以数据为中心的方法”是这一想法不可行的一个迹象。提出这个问题的通常方式是,“覆盖所有数据的最小描述是什么?”这导致了一组小得多的语法,它们在某些大小或其他复杂度指标上并不占主导地位。OP还需要反例来获得好的语法,否则语法G=CHAR*将是他得到的唯一答案(非常小)。从根本上说,这是一个机器学习问题。总的来说,我不认为他会做得很好,除非他的数据是非常正常的,在这种情况下,他将不需要一个工具。伟大的信息,但。。。我问的是软件工具,不是算法。我并不是说有什么东西可以自动完成,而是说有一个以数据为中心的IDE而不是以语法为中心的IDE。@taotree:正如我在文章中提到的,似乎制作一个最小的DFA和相应的规则语法是一个很好的起点。。。不知道到底有没有什么东西在做这件事!