编译原理

您所在的位置:网站首页 源程序的例子 编译原理

编译原理

2024-07-15 22:35| 来源: 网络整理| 查看: 265

代码及结果:task1 任务二博客:编译原理 | 实验任务二:扩展Read和Write语句 1 找到PASCAL编译系统

下载安装free pascal,设置环境变量,然后用vscode编辑。 参考资料:在windows命令行下编译运行Pascal程序

2 在PASCAL系统上运行PL0编译程序,需要对PL0编译程序作一些修改、调试

1.改格式(缩进、注释)

2.符号修改

~ -> not//~这个符号打不出来,反正就是非的意思 //procedure和object在pascal中是关键字,所以分别使用proceduree和objectt替代 object -> objectt; procedure -> proceduree; cc—1 -> cc-1; ↑ -> ^; ≤ -> ; 3. 注释掉不必要的(其实是报错的)语句,如

在这里插入图片描述 直接注释掉(或删掉) 在这里插入图片描述

4.标号99原来是用于退出程序的,由于不支持跨过程的跳转,所以直接退出 在这里插入图片描述

//procedure gen(x : fct; y, z : integer); if cx > cxmax then begin write('PROGRAM TOO LONG'); exit //goto 99 end; //procedure getch ; if eof(fin) then { 如果已到文件尾} begin writeln('PROGRAM INCOMPLETE'); exit; //goto 99 end; //主程序 //99 : writeln writeln;

5.现在暂时没有错误了 在这里插入图片描述

3 建立输入文件和输出文件

在输入文件中存放PL0源程序 在这里插入图片描述 在输出文件中存放PL0源程序被编译后产生的中间代码和运行数据 在这里插入图片描述

4 通过输入文件输入PL0源程序,在输出文件中产生源程序的中间代码, 然后运行该中间代码, 在输出文件中产生运行数据

1.增加变量fin和fout,以命令行形式读取和写入文件 在这里插入图片描述

//{全局变量定义} //var fin : text; { 源代码文件} fout : text; { 输出文件} ... begin { 主程序} assign(fin,paramstr(1)); assign(fout,paramstr(2)); { 将命令行参数str变量赋值给文件变量} reset(fin); rewrite(fout); { 打开输入输出文件} ... //99 : writeln writeln; close(fin); close(fout);

2.exit时关闭文件

//getch begin writeln('PROGRAM INCOMPLETE'); close(fin); close(fout); exit; //goto 99 end; //gen begin write('PROGRAM TOO LONG'); close(fin); close(fout); exit //goto 99 end;

3.将所有input改成fin,有read的地方都改成从fin文件读入,有write的地方都改成写到fout文件:

//getch if eof(fin) then { 如果已到文件尾} ... while not eoln(fin) do { 如果不是行末} begin ll := ll + 1; { 将行缓冲区的长度+1} read(fin, ch); { 从源文件中读取一个字符到ch中} write(fout, ch);{ 输出ch到输出文件中} line[ll] := ch { 把这个字符放到当前行末尾} end; writeln(fout); { 换行} readln(fin);{ 从源文件下一行开始读取} ll := ll + 1; { 将行缓冲区的长度+1} line[ll] := ' ' { pro


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3