我想知道是否存在用于基于形式语法生成输出的库(最好在 .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
在创建或找到这样的库之后,我要做的是改变它产生输出的方式,使其更偏向于产生某些示例而不是其他示例,所以在前面的示例中,我可以使它更偏向用加法而不是乘法来产生更多的表达式。
因此,基本上为生产规则分配权重,以使其中一些在有多个有效规则时更有可能被应用。
所以我的主要问题是,是否有一个库可以执行第一步,即根据我的示例这样的形式语法生成随机输出?
更新
再次思考这个问题,我还有几点笔记:
这里的问题之一是知道何时停止应用生产规则。要么确保语法确实在某个点停止,要么在算法/代码中设计一种方法,使其不太可能继续扩展表达式。
我现在意识到这可能太理论化了,可能有更实用的方法。我的意思是,必须有一些工具基本上可以做同样的事情,但可能只是使用不同的语法或方法,这些语法或方法对某些问题更具体,或者可能更灵活。