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