3

我想知道是否存在用于基于形式语法生成输出的库(最好在 .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

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

因此,基本上为生产规则分配权重,以使其中一些在有多个有效规则时更有可能被应用。

所以我的主要问题是,是否有一个库可以执行第一步,即根据我的示例这样的形式语法生成随机输出?

更新

再次思考这个问题,我还有几点笔记:

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

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

4

0 回答 0