从样本数据中创建解析器语法

时间:2011-10-21 16:55:50

标签: ide grammar parser-generator

我一直在寻找可以帮助用户创建语法的可用内容。有各种IDE,但......它们似乎是文本编辑器,它们处理语法文件本身。我正在寻找一种以数据为中心的方法。所以,假设我有很多我想用解析器解析的数据的例子。所以,我想通过该样本数据并直接从中定义语法。

是否有任何现有软件可以做类似的事情?

我会试着更清楚......

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

与大多数IDE相反,我看到只有文本编辑器用于编写语法语言本身。

2 个答案:

答案 0 :(得分:2)

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

话虽如此,如果你想生成一个语法来生成字符串,可能还有其他人...你的问题似乎不合适。对于任何有限的字符串集,无限多的语法生成它们和其他字符串......只要您点击目标数据集,就可以生成任何其他字符串这一事实的数字的无限性。你的问题基本上是,“考虑到序列a1,a2,...,a,......的开头,说明接下来的n个元素是什么。”这是不可能的,除非你只是想要一些答案......在这种情况下,你总是可以从DFA开始并提出一般化方法(即只接受更多字符串)。

确实,例如一个普通的语法,很容易引入新的字符串...所以也许使用第一个答案作为起点。但是请注意,从NFA到DFA的转换可能非常低效......渐近指数。

答案 1 :(得分:1)

我认为您不希望将此限制为FSA,而是将语法限制为(无论是否为上下文)。我建议看http://en.wikipedia.org/wiki/Grammar_induction;似乎有一些关于算法的讨论(对不起,不是软件)。