编译原理:编写一个语法高亮程序

本文介绍了一个编程题目,目标是创建一个语法高亮转换软件,将C/C++源代码文件转化为含有高亮语法的HTML文件。实现过程中涉及词法分析,需要构建状态转换图,并处理HTML转义字符。最终展示的效果是在浏览器中以高亮形式查看C/C++代码。
摘要由CSDN通过智能技术生成

编程题目 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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值