资源简介
自己实现的编译原理的词法分析器,是自己的实验作业,用Vs2017实现,可以直接运行,代码注释丰富,希望与大家交流学习!欢迎大家下载!
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
#define NR 32//保留字数量
#define NU 20//单目运算符界符数量
#define NB 18//双目运算符界符数量
//保留字
static char ReverseW[NR][15] = {
“auto“ “break“ “case“ “char“ “const“ “continue“
“default“ “do“ “double“ “else“ “enum“ “extern“
“float“ “for“ “goto“ “if“ “int“ “long“
“register“ “return“ “short“ “signed“ “sizeof“ “static“
“struct“ “switch“ “typedef“ “union“ “unsigned“ “void“
“volatile“ “while“
};
//单目界符与运算符
static char UnaryOperatorADelimiter[NU][10] = {
“*“ “/“
“;“ “(“ “)“ “^“ ““ “\““ “\‘“ “#“ “%“ “~““[“ “]“ “{“
“}“ “\\“ “.“ “\?“ “:“
};
//双目界符与运算符
static char BinaryOperatorADelimiter[NB][10] = {
“!““&““|““<“ “>“ “=““!=““<=“ “>=“ “==“ “&&“ “||“ “<<“ “>>““+“ “-““++““--“
};
//标识符表
static char IDTable[1000][50] = { ““ };
//整数表
static char NUMintTable[1000][50] = { ““ };
//浮点数表
static char NUMfloatTable[1000][50] = { ““ };
//16进制表
static char NUMhexTable[1000][50] = { ““ };
//8进制数表
static char NUMoctalTable[1000][50] = { ““ };
//保留字查找
int FindReverse(char ReserverW[][15] char s[])
{
for (int i = 0; i < NR; i++)
{
//成功匹配,返回属性值
if (strcmp(ReserverW[i] s) == 0)
{
return i + 1;
}
}
//未成功匹配返回-1
return -1;
}
//单目运算符界符查找
int FindUOAD(char UnaryOperatorADelimiter[][10] char s[])
{
for (int i = 0; i < NU; i++)
{
//成功匹配,返回属性值
if (strcmp(UnaryOperatorADelimiter[i] s) == 0)
{
return i + 1;
}
}
//未成功匹配返回-1
return -1;
}
//双目运算符界符查找
int FindBOAD(char BinaryOperatorADelimiter[][10] char s[])
{
for (int i = 0; i < NB; i++)
{
//成功匹配,返回属性值
if (strcmp(BinaryOperatorADelimiter[i] s) == 0)
{
return i + 1;
}
}
//未成功匹配返回-1
return -1;
}
//判断是否是字母和下划线
bool IsLetter_(char l)
{
if ((l >= ‘a‘&&l <= ‘z‘) || (l >= ‘A‘&&l <= ‘Z‘) || l == ‘_‘)
{
return true;
}
return false;
}
//判断是否为数字
bool IsDigit(char d)
{
if (d >= ‘0‘&&d <= ‘9‘)
return true;
return false;
}
//判断是否为数字1-9
bool IsDigit9(char d)
{
if (d >= ‘1‘&&d <= ‘9‘)
return true;
return false;
}
//判断是否为数字0-9及A-F
bool IsDigitX(char d)
{
if ((d >= ‘0‘&&d <= ‘9‘)||(d>=‘A‘&&d<=‘F‘))
return true;
return false;
}
//删除空格和注释
void Filter(char r[] int Pcode)
{
char temp[10000];
int count = 0;
for (int i = 0; i <= Pcode; i++)
{
//删除单行‘//’注释
if (r[i] == ‘/‘&&r[i + 1] == ‘/‘)
{
while (r[i] != ‘\n‘)
{
i++;
}//换行符在后面空白字符中统一处理
}
//删除多行注释
if (r[i] == ‘/‘&&r[i + 1] == ‘*‘)
{
i = i + 2;//指针移到‘*’后面
while (r[i] != ‘*‘&&r[i + 1] != ‘/‘)
{
i++;
if (r[i] == ‘$‘)
{
printf(“程序出错,多行注释负号不匹配!“);
exit(0);
}
}
i = i + 2;//指针移到‘*’后面
}
//除换行符、制表符、回车之外,全部加载
if (r[i] != ‘\n‘&&r[i] != ‘\t‘&&r[i] != ‘\r‘)
{
temp[count++] = r[i];
}
}
temp[count] = ‘\0‘;
strcpy(r temp);//将过滤后的程序写回源程序
}
void Scan
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 36352 2019-01-05 13:29 Project2\.vs\Project2\v15\.suo
文件 5804032 2019-01-05 13:29 Project2\.vs\Project2\v15\Browse.VC.db
文件 39190528 2018-12-09 18:38 Project2\.vs\Project2\v15\ipch\AutoPCH\6118facd8172655f\LL.ipch
文件 30408704 2019-01-05 13:27 Project2\.vs\Project2\v15\ipch\AutoPCH\b897107968fe6c44\FEX.ipch
文件 63488 2019-01-05 13:28 Project2\Debug\Project2.exe
文件 439788 2019-01-05 13:28 Project2\Debug\Project2.ilk
文件 643072 2019-01-05 13:28 Project2\Debug\Project2.pdb
文件 87774 2019-01-05 13:28 Project2\Project2\Debug\fex.obj
文件 326 2019-01-05 13:28 Project2\Project2\Debug\Project2.log
文件 732 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\CL.command.1.tlog
文件 18792 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\CL.read.1.tlog
文件 496 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\CL.write.1.tlog
文件 1184 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\li
文件 3502 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\li
文件 476 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\li
文件 217 2019-01-05 13:28 Project2\Project2\Debug\Project2.tlog\Project2.lastbuildstate
文件 158720 2019-01-05 13:28 Project2\Project2\Debug\vc141.idb
文件 364544 2019-01-05 13:28 Project2\Project2\Debug\vc141.pdb
文件 18726 2019-01-05 13:28 Project2\Project2\fex.cpp
文件 37 2019-01-05 13:28 Project2\Project2\floatlist.txt
文件 23 2019-01-05 13:28 Project2\Project2\hexlist.txt
文件 54 2019-01-05 13:28 Project2\Project2\idlist.txt
文件 19 2019-01-05 13:28 Project2\Project2\octallist.txt
文件 978 2019-01-05 13:28 Project2\Project2\output.txt
文件 6125 2018-12-09 19:27 Project2\Project2\Project2.vcxproj
文件 948 2018-12-09 19:27 Project2\Project2\Project2.vcxproj.filters
文件 165 2018-11-14 10:08 Project2\Project2\Project2.vcxproj.user
文件 358 2018-12-10 15:04 Project2\Project2\resource.txt
文件 30 2019-01-05 13:28 Project2\Project2\uintlist.txt
文件 1438 2018-11-14 10:08 Project2\Project2.sln
............此处省略15个文件信息
- 上一篇:个人物品管理程序
- 下一篇:C++ Prime Plus第6版
相关资源
- Visual C++ MFC 源代码大全
- 《C++游戏开发》笔记十二 战争迷雾的
- 《MFC游戏开发》笔记九 碰撞检测 怪物
- 源代码——MFC的WebBrowser控件 C++与ja
- 无线通信系统仿真--C++实用模型包含源
- vc++之mfc屏幕监控系统源代码
- 《C++游戏开发》笔记十四 平滑过渡的
- C++ Builder 6实用编程100例光盘、源代码
- C++ Builder 5高级编程精解光盘、源代码
- Visual C++/Turbo C串口通信编程实践第2版
- CTP_API_C++可实盘多合约多策略版本源代
- C++ MFC 吹泡泡 源代码
- C++ Primer第五版 源代码
- 序贯相似算法图像匹配
- 杨淑莹 数字图像处理VC++ 源代码 全
- 数据包捕获与分析 端口扫描 流量统计
- C++数值算法第二版PDF文档和源代码
- Visual C++数字图像获取、处理及实践应
- 一个回合制游戏demo
- Visual C++面向对象与可视化程序设计(
- 精通Visual C++数字图像处理典型算法及
- 局域网监控系统demo含源代码
- c++项目开发全程实录 随书源代码 刘志
- 网上超市购物管理系统C++源代码
- Visual C++网络高级编程pdf+源代码
- Harris算法源代码
- VS2008的基于MFC的四则运算测试程序源
- C++参考大全第四版中文版pdf + 英文p
- 现代编译原理-c语言描述虎书
- xgboost源代码
评论
共有 条评论