编译原理去除多行注释实验代码C语言
时间: 2023-08-18 16:34:30 浏览: 256
以下是一个简单的去除多行注释的示例代码(使用C语言编写):
```c
#include <stdio.h>
void remove_comments(FILE* input_file, FILE* output_file) {
int c, prev_c;
int in_comment = 0;
while ((c = fgetc(input_file)) != EOF) {
if (in_comment) {
// 如果当前在注释中,则判断是否遇到了注释结束符号
if (prev_c == '*' && c == '/') {
in_comment = 0;
}
} else {
// 如果当前不在注释中,则判断是否遇到了注释开始符号
if (prev_c == '/' && c == '*') {
in_comment = 1;
} else {
// 如果当前不在注释中且不是注释符号,则写入输出文件
fputc(prev_c, output_file);
}
}
prev_c = c;
}
// 写入最后一个字符
fputc(prev_c, output_file);
}
int main(int argc, char* argv[]) {
if (argc != 3) {
printf("Usage: %s input_file output_file\n", argv[0]);
return 1;
}
FILE* input_file = fopen(argv[1], "r");
if (input_file == NULL) {
printf("Cannot open input file %s\n", argv[1]);
return 1;
}
FILE* output_file = fopen(argv[2], "w");
if (output_file == NULL) {
fclose(input_file);
printf("Cannot open output file %s\n", argv[2]);
return 1;
}
remove_comments(input_file, output_file);
fclose(input_file);
fclose(output_file);
return 0;
}
```
以上代码使用了一个 `in_comment` 变量来表示当前是否在多行注释中,同时使用 `prev_c` 变量来记录上一个字符。在遍历输入文件时,如果当前在注释中,则判断是否遇到了注释结束符号;如果当前不在注释中,则判断是否遇到了注释开始符号。如果当前不在注释中且不是注释符号,则将上一个字符写入输出文件。
你可以根据需要对代码进行修改和优化,例如增加错误处理、优化读写文件的方式等。
阅读全文