【发布时间】:2017-09-05 10:31:45
【问题描述】:
我想知道编程语言开发人员如何验证和证明他们的语法是正确的。假设我为一种新语言创建了一个新语法。我可以通过提供不同类型的测试程序,使用单元测试工具测试我的语法。但是,我永远不会 100% 确保我的语法是正确的。语言开发者如何确保他们的语法在现实世界中是正确的?
假设我使用铅笔和纸为一门新语言创建了语法。但是,我犯了一个错误,我的语法接受以 + 结尾的表达式,如 2+2+。如果我没有发现错误,我将使用这个不正确的语法来实现我的语言。经过实施和单元测试,我可以找到错误。是否可以在开始实施之前找到它?
当然,我可以使用铅笔和纸(推导等)输入一些示例输入来尝试我的语法,但我可能会错过一些极端情况。有没有更好的方法或如何在真正的语言开发人员中测试他们的语法?
【问题讨论】:
-
语法“正确”是什么意思?或者您的意思是要问如何检查解析器是否正确识别了预期的语法?
-
理论上,你会产生一个正确性证明。我不知道这是否在现实世界中完成,但我对此表示怀疑。但是,如果没有正确性证明,您将不知道语法是否正确。所以也许人们不知道他们的语法是否正确——或者更确切地说,语法被定义为正确的,没有人真正知道他们描述的是什么语言!
-
我更新了我的问题。如何为语法做正确性证明?任何链接或解释?
标签: programming-languages grammar context-free-grammar formal-verification context-free-language