编程题目 1:语法高亮转换软件
(1) 问题描述:在我们使用的集成化编译环境(IDE)中,C/C++语言的源代码通常使用高亮语法表示,但是如果我们将这段代码发布到网页中,它的高亮语法表示将消失。这样看起来非常不直观,我们希望在网页中代码仍然能保持原来的高亮语法表示。
(2) 输入:C/C++源代码文件,即后缀为 c/cpp 的文件。
(3) 输出:网页文件,即后缀为 html 的文件。
(4) 实现功能:将 C/C++源代码转换为网页文件,在浏览器中打开网页文件时,网页
中显示 C/C++源代码并以高亮语法表示显示。
(5) 涉及知识点:词法分析。
开始拿到这个题目时,实在是一点思路都没有。后来经过查阅与思考,发现按照上课所讲,先建立一个状态转换图,枚举所有可能出现的状态就好。更详细的内容见代码。要注意部分html的转义字符
//注:输入的源文件需要以Unix格式保存,因为在Windows下换行符为\r\n,会导致结果错误
#include <bits/stdc++.h>
using namespace std;
bool is_keyword(string str); //关键字
bool is_operator(char ch); //运算符
bool is_seprator(char ch); //分界符
int is_notes(string str); //注释
int is_quotes(char ch); //双引号
char get_ch(ifstream &src); //读入一个字符
void point_back(ifstream &src); //回退光标
void lex(ifstream &src,ofstream &dst); //分析函数
//关键词表
string keyword[45]={"bool", "break", "case", "char",
"cin", "const", "continue", "default", "define",
"delete", "do", "double", "else", "enum", "endl",
"false", "float", "for", "friend", "goto", "if", "void"
"include", "int", "long