最近我需要创建ANTLR语言语法,以实现编译器的目的(将一种脚本语言转换为另一种脚本语言)。在我看来,Google翻译在翻译自然语言方面做得很好。我们拥有各种各样的递归神经网络模型,LSTM,并且GPT-2正在生成语法正确的文本。
问题:是否有足够的模型来训练语法/代码示例组合,然后在给定任意示例源代码的情况下输出新的语法文件?
答案 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。