编译原理 实验1 编译预处理

实验1 编译预处理

ps:AI版实验报告

[实验目的]:

1.了解程序设计语言的编译系统;
2. 从编译程序的角度理解程序设计语言。

[实验内容]:

请设计一个编译预处理程序对源程序进行处理,产生标准源程序。C语言编译系统的预处理器主要完成一下3个功能。

(1) 注释处理。 C语言提供了两种注释形式:
A:单行注释,“//”结构,如:
//这是一个单行注释,C99标准引入
B:多行注释也称块注释或经典注释,“/* /”结构,如:
/这是一个经典注释,C89标准引入/
注意:多行注释注释不能嵌套,且遵循就近匹配原则。
/这是一个多行的著述
/嵌套注释/
/
上面这个注释会报错,因为C语言的经典注释符号遵循就近匹配原则,第一行/会和第二行的/进行匹配,形成一个完整的经典注释,然后最后一个
/就悬空了,就会报错,所以经典注释(快注释)不要在注释中引入
/符号。
但是以下注释是合法的:
/

//在其中嵌入第二种注释
*/

(2)宏处理。 C语言允许用户在程序中定义宏,以提高编程效率。如:
#define PI ,3.1415926
预处理器将源程序的所有符号PI换成3.1415926

(3)文件包含。 如果C源程序中含有#include “stack.h”,那么预处理器处理到这条语句时,用stack.h的实际内容替换该语句。

(4)条件编译。[选做] 并非源程序的每一行都要进行编译,有时情况不同要编译程序的不同语句。C语言预处理器处理条件编译,将真正需要编译的语句组成标准源程序。
学生可以用c语言或其他程序设计语言来实现编译预处理器程序。

[实验要求]:

每位同学撰写一份试验报告,并提交电子版的源程序和实验报告。
实验报告的要求:
(1)程序流程图(为节约时间,可手工画图再拍照插入文档)
在这里插入图片描述

(2)源程序(写出核心代码/函数)

#include <iostream>  
#include <fstream>  
#include <sstream>  
#include <unordered_map>  
#include <string>  
#include <vector>  
#include <algorithm>  

using namespace std;  

// 用于存储宏定义  
unordered_map<string, string> macros;  

// 处理文件包含  
void handleInclude(const string &filename, ostringstream &output) {
     
    ifstream file(filename);  
    if (!file.is_open()) {
     
        cerr << "Error opening file: " << filename << endl;  
        return;  
    }  
    output << file.rdbuf(); // 读取整个文件内容  
    file.close();  
}  

// 移除注释  
void removeComments(string &line) {
     
    // 处理单行注释  
    size_t singleLineCommentPos = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值