正式语言生成器?

时间:2013-07-02 12:05:56

标签: c# .net grammar formal-languages

我想知道是否存在基于正式语法生成输出的库(最好是在.NET中)。

我正在谈论这个: https://en.wikipedia.org/wiki/Chomsky_hierarchy#Formal_grammars

所以你给它的语法如下:

(非终端符号,终端符号,生产规则,开始符号)

这样:

Grammar = ({E,A,B}, {(,),a,+,*}, P, E);
Where
P = {
    E -> A,
    E -> E + A,
    A -> B,
    A -> A * B,
    B -> a,
    B -> (E)
};

然后该库将生成该语法的示例随机输出,如:

a * a + a
a + (a + a)
a * a * a

在创建或找到这样的库之后,我要做的就是改变它产生输出的方式,使其更偏向于生成某些例子而不是其他例子,所以在前面的例子中我可以做它更偏向于产生更多的表达式,而不是乘法。

因此,基本上将权重分配给生产规则,以便在有多个有效数据时更有可能应用它们。

所以我的主要问题是,是否有一个库可以做第一步,根据像我的例子那样的正式语法产生随机输出?

更新

再次考虑这个问题,我还有一些注意事项:

  • 此处的问题之一是知道何时停止应用生产规则。要么确保语法在某个时刻停止,要么在算法/代码中设计一种方式,使其不太可能继续扩展表达式。

  • 我现在意识到这可能过于理论化,可能还有更实用的方法。我的意思是,必须有一些工具基本上做同样的事情,但可能只是使用不同的语法或方法,更具体的某些问题或更灵活的东西。

0 个答案:

没有答案