资源简介

自己实现的编译原理的词法分析器,是自己的实验作业,用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\link.command.1.tlog

     文件       3502  2019-01-05 13:28  Project2\Project2\Debug\Project2.tlog\link.read.1.tlog

     文件        476  2019-01-05 13:28  Project2\Project2\Debug\Project2.tlog\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论