资源简介
合工大编译原理实验报告(附源码),用c++编写。11111
代码片段和文件信息
#include
#include
#include
using namespace std;
string key[8] = { “do““end““for““if““printf““scanf““then““while“ };
string optr[4] = { “+““-““*““/“ };
string separator[6] = { “““;““{““}““(““)“ };
char ch;
//判断是否为保留字
bool IsKey(string ss) {
int i;
for (i = 0; i<8; i++)
if (!strcmp(key[i].c_str() ss.c_str()))
return true;
return false;
}
//字母判断函数
bool IsLetter(char c) {
if (((c >= ‘a‘) && (c <= ‘z‘)) || ((c >= ‘A‘) && (c <= ‘Z‘)))
return true;
return false;
}
//数字判断函数
bool IsDigit(char c) {
if (c >= ‘0‘&&c <= ‘9‘)
return true;
return false;
}
//运算符判断函数
bool IsOptr(string ss) {
int i;
for (i = 0; i<4; i++)
if (!strcmp(optr[i].c_str() ss.c_str()))
return true;
return false;
}
//分界符判断函数
bool IsSeparator(string ss) {
int i;
for (i = 0; i<6; i++)
if (!strcmp(separator[i].c_str() ss.c_str()))
return true;
return false;
}
void analyse(ifstream &in) {
string st = ““;
char ch;
int line = 1 row = 0;
while ((in.get(ch))) {
st = ““;
if ((ch == ‘ ‘) || (ch == ‘\t‘)) {} //空格,tab健
else
if (ch == ‘\n‘) { line++; row = 0; } //换行行数加一处理
else
if (IsLetter(ch)) //关键字、标识符的处理
{
row++;
while (IsLetter(ch) || IsDigit(ch))
{
st += ch;
in.get(ch);
}
in.seekg(-1 ios::cur);//文件指针(光标)后退一个字节
if (IsKey(st)) //判断是否为关键字 查询关键字表;
cout << st << “\t(“ << st << ““ << 1 << “)“ << ‘\t‘ << “关键字“ << ‘\t‘ << ‘\t‘ << “(“ << line << ““ << row << “)“ << endl;
else //否则为标示符
cout << st << “\t(“ << st << ““ << 2 << “)“ << ‘\t‘ << ‘\t‘ << “标识符“ <<‘\t‘<< ‘\t‘ << “(“ << line << ““ << row << “)“ << endl;
}
else
if (IsDigit(ch)) //无符号整数处理
{
row++;
while (IsDigit(ch))
{
st += ch;
ch = in.get();
}
in.seekg(-1 ios::cur);
cout << st << “\t(“ << st << ““ << 3 << “)“ << ‘\t‘ << ‘\t‘ << “常数“ << ‘\t‘ << ‘\t‘ << “(“ << line << ““ << row << “)“ << endl;
// break;
}
else
{
st = ““;
st += ch;
if (IsOptr(st)) //运算符处理
{
row++;
cout << st << “\t(“ << st << ““ << 4 << “)“ << ‘\t‘ << ‘\t‘<< “运算符“ << ‘\t‘ <<‘\t‘<< “(“ << line << ““ << row << “)“ << endl;
}
else
if (IsSeparator(st))//分隔符处理
{
row++;
cout << st << “\t(“ << st << ““ << 5 << “)“ << ‘\t‘ << ‘\t‘ << “分界符“ << ‘\t‘ << ‘\t‘ << “(“ << line << ““ << row << “)“ << endl;
}
else {
switch (ch) {
row++;
case‘=‘: {row++; cout << “=“ << “\t(“ << “=“ << ““ << “6“ << “)“ << ‘\t‘ << “\t关系运算符“ << ‘\t‘ << “(“ << line << ““ << row << “)“ << endl; }
case‘>‘: {row++; ch = in.get();
if (ch == ‘=‘) cout << “>=“ << ‘\t‘ << “(“ << “>=“ << ““ << “6“ << “)“ << ‘\t‘ << “\t关系运算符“ << ‘\t‘ << “(“ << line << ““ << row << “)“ <
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 786392 2018-06-19 19:37 2016212234余达昊.docx
目录 0 2018-05-24 19:44 ConsoleApplication1\
目录 0 2018-05-24 18:47 ConsoleApplication1\.vs\
目录 0 2018-05-24 18:47 ConsoleApplication1\.vs\ConsoleApplication1\
目录 0 2018-06-19 19:34 ConsoleApplication1\.vs\ConsoleApplication1\v15\
文件 27648 2018-06-19 19:34 ConsoleApplication1\.vs\ConsoleApplication1\v15\.suo
文件 4829184 2018-06-19 19:34 ConsoleApplication1\.vs\ConsoleApplication1\v15\Browse.VC.db
目录 0 2018-05-24 18:49 ConsoleApplication1\.vs\ConsoleApplication1\v15\ipch\
目录 0 2018-05-24 18:49 ConsoleApplication1\.vs\ConsoleApplication1\v15\ipch\AutoPCH\
目录 0 2018-05-24 18:49 ConsoleApplication1\.vs\ConsoleApplication1\v15\ipch\AutoPCH\CONSOLEAPPLICATION1-6cc9b11c\
目录 0 2018-05-24 18:49 ConsoleApplication1\.vs\ConsoleApplication1\v15\ipch\AutoPCH\CONSOLEAPPLICATION1-6cc9b11c\源-b6faddeb\
文件 25690112 2018-06-19 19:33 ConsoleApplication1\.vs\ConsoleApplication1\v15\ipch\AutoPCH\CONSOLEAPPLICATION1-6cc9b11c\源-b6faddeb\源.ipch
目录 0 2018-06-07 19:11 ConsoleApplication1\ConsoleApplication1\
文件 7052 2018-05-24 18:50 ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.vcxproj
文件 944 2018-05-24 18:50 ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.vcxproj.filters
目录 0 2018-06-07 19:11 ConsoleApplication1\ConsoleApplication1\Debug\
目录 0 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\
文件 762 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\CL.command.1.tlog
文件 12296 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\CL.read.1.tlog
文件 640 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\CL.write.1.tlog
文件 235 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\ConsoleApplication1.lastbuildstate
文件 1332 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\li
文件 2918 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\li
文件 624 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleA.DE846A07.tlog\li
文件 265 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\ConsoleApplication1.log
文件 322560 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\vc141.idb
文件 430080 2018-06-07 19:11 ConsoleApplication1\ConsoleApplication1\Debug\vc141.pdb
文件 316564 2018-06-14 19:05 ConsoleApplication1\ConsoleApplication1\Debug\源.obj
文件 33 2018-05-24 19:37 ConsoleApplication1\ConsoleApplication1\test.txt
文件 4352 2018-06-07 19:11 ConsoleApplication1\ConsoleApplication1\源.cpp
文件 1340 2018-05-24 18:48 ConsoleApplication1\ConsoleApplication1.sln
............此处省略70个文件信息
相关资源
- svm分类算法(附实验报告)
- 实验报告-门电路逻辑功能及测试.do
- Alpha-Beta剪枝算法一字棋源码及实验报
- 算法设计实验报告-求最大子段和问题
- 华中科技大学操作系统实验报告.doc
- 《Linux操作系统》实验报告
- c语言+贪吃蛇+实验报告+ppt
- 数据结构实验报告~通讯录管理系统
- 数据结构迷宫算法源码+实验报告
- 数值计算中算法实现和实验报告(C
- 编译原理SLR(1)语法分析实验报告
- 编译原理实验报告+语法分析代码C语言
- LL1分析法实验报告
- 数据结构实验报告-实现二叉树的基本
- 编译原理实验报告 语法分析 语义分
- 华中科技大学 编译原理 词法分析 实
- 编译原理词法分析器实验报告
- 语义分析实验报告和代码
- 算法分析与设计实验代码.cpp
- 华中科技大学 编译原理 词法分析 实
- 数据结构实验栈和队列详细实验报告
- 算法设计实验报告-快速排序和归并排
- 8数码难题含代码,实验报告
- 编译原理词法分析含实验报告及源码
- 计算机图形学 图形几何变换 程序运行
- c语言版学生成绩管理系统实验报告
- c语言 词法分析器实验报告及源代码
- C++多态性实验报告
- 词法分析C语言源代码附实验报告
- 编译原理的词法分析实验报告
评论
共有 条评论