有偿+,具体如下,关于用C语言写编译器

这个homework要做四件事情:(会前三步也行)

  1. 实现一个递归下降解析器——这将报告一个给定的NLab程序是否遵循形式语法。输入文件通过argv[1]指定-如果输入文件有效,则没有输出。否则,一个非0的exit被生成。
  2. 扩展解析器,使它成为一个解释器。这些指令现在已被“执行”。不要为此编写一个新程序,只需扩展您现有的解析器。
  3. 展示上述测试策略-您应该给出单元测试的细节,白/黑盒测试完成您的代码。描述所使用的任何测试安全带。此外,还要给出许多不同的NLab程序的输出示例。让我相信C代码里的每一行都被测试过了。
  4. 以您选择的方向显示项目的扩展。它应该证明您对编程或软件工程的某些方面的理解。如果您扩展了形式语法,请确保您显示了新的、完整的语法。

简单来说就是先实现一个解析器parser,然后扩展这个parser成为一个解释器interpreter,然后展示测试,最后选择一个项目的方向进行扩展。

背景介绍:
编程语言MATLAB(起源于上世纪七十年代末,免费)是世界上最广泛使用的科学语言之一。
一个关于MATLAB最有趣的事情是每个单一变量作为一个二维数组被储存,甚至一个定标器整数是一个简单的1*1数组。
在这里,我们发展一个此概念的非常简单的版本——一个允许这种数组被创造或从文件里读取的语言,并且函数在数组的每一个部分被执行,每次一个元素。
举例:
创建变量I为5,并且打印到屏幕上:

img

你可以创造一个全是1的数组,然后在数组的每个单元格加2:

img

循环,这里有一个从1数到10的循环,通过变量I并且计算在变量F里的阶乘。这两个变量都是定标器(一个1*1数组):

img

这类循环(如C中)的计数器存储在变量中。在循环内更改此变量会影响循环结束的时间:

img

像语法告诉你的那样,循环也可以被嵌套:

img

形式语法:

img

img

提示:

  1. 不要试图一次性编写整个程序。首先尝试一个语法的简化版本,例如:

img

  1. 此语言只是一系列单词(甚至是冒号),所以使用fscanf()。
  2. 有些问题,比如如果你使用一个未定义的变量会发生什么,或者如果你在变量未被创建之前使用这个变量,这些问题不能被形式语法所解释。用你自己的常识,解释你已经做的。
  3. 解析器工作后,将其扩展为解释器。目的不要是首先解析程序,然后单独解释它。解释和解析将不可分割地绑定在一起。
  4. 很早就开始测试——这是一个复杂的测试,在接近尾声的时候才做测试是行不通的

关于提交homework:
两个文件,一个叫testing.txt,里面放着你对你的测试策略的解释,另一个叫extension.txt,里面是你的扩展。对于解析器、解释器和扩展部分,请确保有一个Makefile,这样make就可以用make parse、make interp和make extension来构建代码。全部放到nlab.zip里面。