资源简介
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
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- 北邮-编译原理-词法分析
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
评论
共有 条评论