资源简介
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
相关资源
- 中缀表达式转化成后缀表达式并计算
- 五子棋游戏开发程序及源代码C++开发
- C++MFC 银行管理系统
- vc++6.0完整版
- C++游戏编程入门(第4版)
- 信息学奥赛一本通.rar
- Visual C++开发实战1200例(第2卷).(配
- 深度探索C++对象模型 2012 中文 高清高
- C++反汇编与逆向分析技术揭秘 带书签
- C++基于HTTP的POST上传,C#的网站接收并
- [开发工具] Codejock Xtreme Suite Pro Activ
- Visual C++ 20082010201220132015(x86 x64)
- 采用C++、curses、多线程实现的俄罗斯
- C++GUI QT4 高清版 155MB
- Visual C++串口通信及测控应用详解
- 剑指offer第二版书和代码c++版本.zip
- MFC.Windows程序设计第二版、电子书、安
- 精通visual c++图像处理编程(第三版)
- C++程序设计语言_特别版
- C++版本俄罗斯方块代码
- 黑马程序员2017STL视频教程链接.txt
- Essential C++2013中文版高清带完整标签
- C++ primer第四、五版和C++ primer plus 高清
- C++Primer+Plus第6版_中文版_带书签_超清
- 黑马最新c、c++全栈培训第24期高清无
- c++用SQL语句实现SQL Server的增、删、改
- 数字图像处理,c++
- c++ mfc 单词及其释义的录入和读取,查
- 数据结构与算法分析C++语言描述 第四
- [高质量程序设计指南:C++/C语言第
评论
共有 条评论