您的项目的目标是编写一个名为 runml.c的C11程序,该程序可以解析并执行用一种小型编程语言(ml 语言)编写的程序。具体任务包括:
1.解析 ml 语言:读取 .ml 文件中的代码,并逐行解析每个语句。支持的语句包括变量赋值(例如x<-8)和 print 语句(例如 print x*y)。变量名必须由1到 12 个小写字母组成,最多允许 50 个唯一的标识符,2.处理变量和表达式:
存储变量及其对应的实数值(浮点数)。
处理简单的算术运算,例如乘法()和打印结果3.输出结果:
·根据 ml 语言代码的要求,计算并输出最终结果,例如 print x*y 应输出计算结果。
4.错误处理
检查语法错误,例如标识符长度不合法或变量名中包含非小写字母。
限制最多 50 个唯一标识符,超出时输出错误并终止程序。5.最终执行:
·将 ml 代码转换为 C11 代码,编译并执行生成的 C程序,
项目目标
该项目的目标是实现一个 C11 程序,将用一个小型迷你语言编写的程序翻译为 C11 代码,然后编译并执行该程序。
成功完成该项目将增强您对 C11编程语言核心功能的理解,包括 C11 标准库中的函数、操作系统的系统调用、操作系统进程的创建和管理,并帮助您熟悉在线系统的文档。
项目描述
该项目的目标是实现一个名为 runml 的 C11程序,该程序接受一个命令行参数,该参数提供包含ml 程序的文本文件的路径名。runml 的成功执行将涉及检查 m 程序的语法,将有效的 ml 程序翻译为 C11 程序,编译生成的 C 程序,最后执行编译后的程序。
我们的 ml 语言
ml 程序的语法
0
sample01.mlsample06.ml.
sample02.ml.sample03.mlsample04.ml ,sample05.ml.
sample07.ml .
sample08.ml
程序写在以 .ml 结尾的文本文件中。
语句每行一条(不带终止分号)0
。行中任何地方出现的 #字符表示注释,注释延伸至该行末尾
。仅支持一种数据类型--实数,例如 2.71828
标识符(变量和函数名)由1至12 个小写字母字符组成,例如 budgie0
任何程序中最多有 50 个唯一标识符
0
变量在表达式中使用前不需要定义,并自动初始化为(实数)值 0.0。
变量 arg0 ,arg1 等提供对程序命令行参数的访问,这些参数提供实数值0
函数必须在表达式中调用之前定义。
函数体中的每个语句(每行一条)均以制表符缩进。
函数可以有零个或多个形式参数
。
函数的参数和函数体中使用的其他标识符是该函数的局部变量,并在函数执行完成时变得不可用
。
程序从上到下依次执行其语句,函数调用是唯一的控制流形式(是的,带有循环和条件的语。言会更有用,但本项目不是关于设计编程语言的--对有兴趣的人来说,这是未来的工作)
编译和执行 ml 程序的步骤
1.编辑一个名为 program.ml 的文本文件。
2.将 program.ml 作为命令行参数传递给您的 runml 程序
3.runml 验证 ml 程序,报告任何错误
4.runml 生成 C11 代码,文件名例如 ml-12345.c(其中 12345 可能是一个进程 ID)
5.runml使用系统的 C11编译器编译 ml-12345.c
6.runml执行编译后的 C11 程序 ml-12345 ,传递任何可选的命令行参数(实数)
7.runml 删除它创建的所有文件
项目要求
编写语言:您的项目必须用 C11编程语言编写,且仅包含一个源代码文件,文件名为 runml.c程序表现:/您的项目必须表现为一个标准的实用程序程序--检查其命令行参数,在出错时显示使用消息,正常输出打印到 stdout ,错误消息打印到 stderr ,并以反映其执行成功的退出状态终止
库依赖:您的项目不得依赖于除系统提供的库(提供 OS、C11和 POSIX功能)之外的任何库(例如第三方库,从互联网下载)
语法错误处理:所有在无效 ml程序中检测到的语法错误必须通过 stderr 报告,并以 !字符开头的行显示。您的 runl 程序必须能够检测所有无效的 ml 程序--但不需要验证表达式的语法,因为您的程序不会通过任何无效的表达式进行测试
输出要求:您翻译并编译后的程序(运行时)唯一的“真实"输出是执行 ml的 print 语句的结
果。任何“调试"输出应出现在以 @ 字符开头的行上数值输出:当打印时,精确的整数必须不带小数位打印;其他数字必须精确到6位小数动态内存分配:可以成功完成项目而不使用C中的动态内存分配(如 malloc())。您可以选择使用动态内存分配,但不会因此获得额外的分数
代码非免费,CSDN私信基本不看,可以直接加下方v进行咨询。