使用 C 语言的 ADD 编写语法分析器

Writting a syntax analyser using an AFD for C language

我接到一项任务,要使用 AFD 编写 C 语言分析器。我可以选择我想要的任何语言,所以我想我会选择 Ruby。然而,这个任务在开始时有点难以掌握。

我遇到的问题是:我什至如何表示整个C语言的AFD?

我进行了一些挖掘工作,最后阅读了 this 有关词法分析的内容。在本文中,作者将语言的每个标记定义为 2 个状态之间的转换(这是非常合乎逻辑的)。我发现我几乎不可能不遗漏一些或手工构建这么大的 AFD 而不会出现很多错误。有小费吗 ?

你的任务与每年在数千所大学的编译器课程中向许多本科生提出的任务类似,你引用的笔记是关于该主题的许多课程笔记的很好样本。

解决方案与任何软件工程问题相同:根据规范测试

尽管手动分析和创建整个语言的 AFD 的智力问题似乎极易出错,但请不要忘记您还负责实现这一点(在您选择的 Ruby 语言中).

可以通过为它提供仔细分级和选择的 C 语言输入样本来测试此实现。当它没有提供预期的结果时,要么是 AFD 的编码错误,要么是您构建的 AFD 中的错误。您进行必要的更改并再次进行测试循环。

您最终会得到整个 C 语言的有效 AFD 和用 Ruby 编写的分析器。

从小处着手并实现 C 语言的一个子集通常是个好主意,首先让它工作,然后使用逐步细化向其添加更多内容。与尝试一次完成所有事情相比,这是一种风险较小的策略。

你需要应用所有你应该学习的关于构建规范、设计、程序和测试的技术,并将其应用到这个问题上。将好的计算机科学和软件工程应用到这个问题上。