我被赋予了使用AFD编写 C 语言分析器的任务。我可以选择我想要的任何语言,所以我想我会选择Ruby。然而,这项任务在开始时有点压倒性。
我遇到的问题是:我如何代表整个C语言的AFD?。
我一直在做一些挖掘,最后我在词法分析上阅读this。在本文中,作者将语言的每个标记定义为2个状态之间的过渡(这是非常合乎逻辑的)。我发现我几乎不可能不会错过一些或手工制作如此大的AFD而没有多少错误。有小费吗 ?
答案 0 :(得分:1)
您所拥有的任务类似于每年在数千所大学中为许多本科生编写的编程课程,您所引用的笔记是关于该主题的许多课程笔记的良好样本。
解决方案与任何软件工程问题相同:测试违反规范。
虽然手工分析和创建整个语言的AFD的智力问题可能看起来容易出错,但不要忘记你还要执行它(用你选择的Ruby语言)。
可以通过仔细分级和选择 C 语言输入样本来测试此实现。当它没有提供预期的结果时,错误将出现在AFD的编码中或者你构造的AFD中的错误。您进行必要的更改并再次绕过测试循环。
您最终将获得整个C语言的有效AFD以及用Ruby编写的分析器。
从小做起并实现 C 语言的子集并首先使其工作然后使用逐步细化添加更多内容通常是一个好主意。与试图一次性完成整个事情相比,这是一种风险较小的策略。
您需要应用所有那些您应该学习的有关构建规范,设计,程序和测试的技术,并将其应用于此问题。只需将良好的计算机科学和软件工程应用于此问题。