编译原理:在Visual Studio中编译运行TINY编译器源代码

一、实验任务

本部分取自编译原理实验一:词法分析器生成工具FLEX在TINY语言上的应用。

我们知道,TINY是一门高级程序语言。TINY有它的词法规则和语法规则。TINY既然是一门高级程序语言,就要有TINY语言的编译器。TINY语言的编译器叫TINY编译器。

我们需要熟悉TINY编译器的源代码,并根据编译过程的七个步骤,弄清楚TINY编译器源代码中每个函数的功能,重点是找出词法分析部分的源代码。用C语言开发工具Visual Studio,把TINY编译器的源代码文件编译成可执行文件TINY.exe。然后用TINY.exe编译一个用TINY语言写的源程序(放在sample.tny文件中)。TINY.exe会生成sample.tm文件,这个就是编译后的目标文件(可执行文件)。再用TM.exe这个虚拟机来运行sample.tm文件,得到sample.tm文件的运行结果。

在这一部分,我们介绍如何在Visual Studio中编译运行TINY编译器源代码。这是后续实验的基础。

二、实验环境

Windows 10

三、实验步骤

  1. 观察到实验压缩包中提供两个执行文件,但无法运行,这是由运行环境不兼容导致的。删掉这两个文件,在后面自己生成。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. 在Visual Studio(已配置C++编译环境)中新建一个“Win32 控制台应用程序”,并将其命名为“TINY”,点击“确定”。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. VS(Visual Studio的缩写,下同)将显示Win32应用程序向导。因为我们需要导入TINY编译器的.c文件与.h头文件,因此在这里选择“空项目”。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. 选择【项目】-【添加现有项】,将TINY编译器的.c文件与.h头文件导入。即loucomp文件夹下除TM.c以外的全部.c文件与.h头文件

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. 可以观察到这些文件已经成功导入到TINY项目中。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. 运行该项目,观察到C4996报错。

编译原理:在Visual Studio中编译运行TINY编译器源代码

ERROR C4996:‘strcpy’: This function or variable may be unsafe. Consider using strcpt_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

查阅相关资料,这是由于C语言不同版本函数用法不一致导致的。为解决该问题,选择【项目】-【属性】,在高级设置中的“禁用特定警告”一栏中填入4996。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. 再次运行项目文件,生成TINY.exe成功。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. VS默认将exe文件存储在项目目录下的debug文件夹下,如下图。

编译原理:在Visual Studio中编译运行TINY编译器源代码

  1. 使用同样的方法,在VS中创建一个名为TM的项目,导入TM.c文件,运行生成TM.exe可执行文件。TM.exe可以作为.tm文件的虚拟机,解释执行得到.tm文件的运行结果。
    编译原理:在Visual Studio中编译运行TINY编译器源代码

  2. 完成!