用于生成新编程语言语法的神经网络

时间:2019-05-15 02:08:24

标签: machine-learning grammar code-translation transpiler language-recognition

最近我需要创建ANTLR语言语法,以实现编译器的目的(将一种脚本语言转换为另一种脚本语言)。在我看来,Google翻译在翻译自然语言方面做得很好。我们拥有各种各样的递归神经网络模型,LSTM,并且GPT-2正在生成语法正确的文本。

问题:是否有足够的模型来训练语法/代码示例组合,然后在给定任意示例源代码的情况下输出新的语法文件?

3 个答案:

答案 0 :(得分:2)

您所描述的是上下文无关文法的“只是”学习结构。

我不确定这种方法是否真的适合您的情况,但这在NLP中是一个长期存在的问题:grammar induction for Context-Free Grammars。在Charniak的Statistical Language Learning中可以找到有关如何使用统计学习方法解决此问题的示例介绍。

请注意,我所描述的通常是关于CFG的,但是您可能要检查LL语法的归纳,因为解析器生成器主要使用这些类型的语法。

答案 1 :(得分:1)

我怀疑是否存在这样的模型。

主要问题是languages是由grammars生成的,由于无穷数量的parser trees(组合)可用于各种来源,因此几乎无法转换回来,代码。

因此,在您的情况下,假设您在python code上训练(1000个示例代码),则训练所得的语法将相同。因此,无论示例源代码如何,该模型将始终生成相同的语法。

如果您使用多种语言的训练样本,则该模型仍然无法生成语法,因为它包含无数种可能性。

您的Google翻译示例可用于现实生活翻译,因为可以接受小的错误,但是这些模型不依赖于为每种语言生成根语法。有一些工具可以翻译编程语言example,但它们不生成语法,而是基于语法工作的。

答案 2 :(得分:0)

我对ANTLR一无所知,但是有很好的自然语言翻译示例,例如进入有效的SQL请求:http://nlpprogress.com/english/semantic_parsing.html#sql-parsing