资源简介

c++ 编译原理 词法分析 算术表达式 语法分析

资源截图

代码片段和文件信息

//:LexicalAnalyzer.cpp
//编译原理第一阶段:词法分析
//{L}syntacticAnalyzer.h
#include “syntacticAnalyzer.h“
#include
#include
#include
#include 
#include
using namespace std;

#define PR(arg1 arg2) \
cout<<“( “<
vector vline;//存放未处理的一行行句子
vector vword;//存放以分组的词
vector vnum;//存放整数
vector vide;//存放标识符
vector vid;//存放类别
vector vvalue;//存放属性

int id;//类别


class LAResult
{
public:
int id;
int value;
public:
LAResult();
LAResult(int idd int val);
output();
};
LAResult::LAResult(int idd int val)
{
id = idd;
value = val;
}
LAResult::LAResult()
{
id = -1;
value = -1;
}
LAResult::output()
{
PR(id value);
}


//判断空格
bool isSpace(char c)
{
if(c == 32)
return true;
return false;
}
//判断字符
bool isLet(char c)
{
if((c>=65 && c<=90) ||(c>=97 &&c<=122))
return true;
return false;
}
//判断数字
bool isNum(char c)
{
if(c>=48 && c<=57)
return true;
return false;
}
//判断界符和算符
bool isOpOrSep(char c)
{
if((c>=40 && c<=45) || (c==47) ||(c>=59 &&c<=62) || (c==123) || (c==125))
return true;
return false;
}
//返回种别id
int getId(string s)
{
//运算符
if(s==“+“)
return 0;
else if(s==“-“)
return 1;
else if(s==“*“)
return 2;
else if(s==“/“)
return 3;
else if(s==“=“)
return 4;
else if(s==“==“)
return 5;
else if(s==“>“)
return 6;
else if(s==“>=“)
return 7;
else if(s==“<“)
return 8;
else if(s==“<=“)
return 9;
//界符
else if(s==“(“)
return 10;
else if(s==“)“)
return 11;
else if(s==“{“)
return 12;
else if(s==“}“)
return 13;
else if(s==“;“)
return 14;
else if(s==““)
return 15;
//关键字
else if(s==“main“)
return 16;
else if(s==“int“)
return 17;
else if(s==“char“)
return 18;
else if(s==“string“)
return 19;
else if(s==“void“)
return 20;
else if(s==“while“)
return 21;
else if(s==“for“)
return 22;
else if(s==“if“)
return 23;
else if(s==“else“)
return 24;
else if(s==“ifstream“)
return 25;
else if(s==“ofstream“)
return 26;
else if(s==“cout“)
return 27;
else if(s==“cin“)
return 28;
else if(s==“class“)
return 29;
else if(isNum(s[0]))//整数、只要字符串包含整数,此字符串就是整数串
return 31;
//标识符
return 30;


}
//词法分析
void analyzeLexical()
{
string word;
//判断并分词
for(int i = 0; i < vline.size(); i++)
{
int j = 0;

while(j {
//判断空格
while(isSpace(vline[i][j]))
{
j++;
}

//判断字母
if(isLet(vline[i][j]))
{
while(isLet(vline[i][j])||isNum(vline[i][j]))
{
word += vline[i][j];
j++;

}
}
if(word!=““)//如果word为空,则说明word没存入数据,则不向vector添加数据
{
vword.push_back(word);
word = ““;
continue;
}

//判断数字
while(isNum(vline[i][j]))
{
word += vline[i][j];
j++;
}
if(word!=““)//同上
{
vword.push_ba

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-04-17 13:47  编译器(1+2)\
     目录           0  2014-04-17 13:47  编译器(1+2)\Compiler\
     文件        4243  2014-03-11 19:08  编译器(1+2)\Compiler\Compiler.dsp
     文件         524  2014-03-11 19:08  编译器(1+2)\Compiler\Compiler.dsw
     文件       41984  2014-04-17 10:33  编译器(1+2)\Compiler\Compiler.ncb
     文件       48640  2014-04-17 10:33  编译器(1+2)\Compiler\Compiler.opt
     目录           0  2014-04-17 13:37  编译器(1+2)\Compiler\Debug\
     文件      626770  2014-04-17 13:37  编译器(1+2)\Compiler\Debug\LexicalAnalyzer.exe
     文件     1110920  2014-04-17 13:37  编译器(1+2)\Compiler\Debug\LexicalAnalyzer.ilk
     文件      413858  2014-04-17 13:19  编译器(1+2)\Compiler\Debug\LexicalAnalyzer.obj
     文件      186920  2014-04-17 10:40  编译器(1+2)\Compiler\Debug\LexicalAnalyzer.pch
     文件     1434624  2014-04-17 13:37  编译器(1+2)\Compiler\Debug\LexicalAnalyzer.pdb
     文件      152956  2014-04-17 13:37  编译器(1+2)\Compiler\Debug\syntacticAnalyzer.obj
     文件      107520  2014-04-17 13:46  编译器(1+2)\Compiler\Debug\vc60.idb
     文件      143360  2014-04-17 13:37  编译器(1+2)\Compiler\Debug\vc60.pdb
     文件        7107  2014-04-17 13:19  编译器(1+2)\Compiler\LexicalAnalyzer.cpp
     文件        3655  2014-04-17 10:38  编译器(1+2)\Compiler\LexicalAnalyzer.dsp
     文件         538  2014-03-12 19:18  编译器(1+2)\Compiler\LexicalAnalyzer.dsw
     文件       50176  2014-04-17 13:47  编译器(1+2)\Compiler\LexicalAnalyzer.ncb
     文件       48640  2014-04-17 13:47  编译器(1+2)\Compiler\LexicalAnalyzer.opt
     文件         264  2014-04-17 13:46  编译器(1+2)\Compiler\LexicalAnalyzer.plg
     文件        2445  2014-04-17 13:37  编译器(1+2)\Compiler\syntacticAnalyzer.cpp
     文件          81  2014-04-17 11:05  编译器(1+2)\Compiler\syntacticAnalyzer.h
     文件          79  2014-04-17 13:46  编译器(1+2)\Compiler\待处理代码段.txt
     文件         601  2014-04-17 13:46  编译器(1+2)\Compiler\词法分析结果.txt
     文件         420  2014-03-11 21:28  编译器(1+2)\Compiler\词法规则对照.txt

评论

共有 条评论