【编译原理】自顶向下语法分析报告方法的实现
更新时间:2023-09-05 02:28:01 阅读量: 教育文库 文档下载
- 编译原理 语法分析推荐度:
- 相关推荐
【编译原理】自顶向下语法分析报告方法的实现
实验报告
【编译原理】自顶向下语法分析报告方法的实现
实验项目列表
2
【编译原理】自顶向下语法分析报告方法的实现
一、实验名称
自顶向下语法分析方法的实现
二、实验目的
1.掌握自顶向下语法分析的方法;
2.运用编程的手段实现自顶向下语法分析。
三、实验内容和要求
四、实验环境
1.硬件环境:PC机
2.软件环境:Windows操作系统,VC++集成开发环境五、算法设计思想
六、主要问题与解决方法
3
【编译原理】自顶向下语法分析报告方法的实现
七、实验结果
以下是程序的用户运行界面截图:
4
【编译原理】自顶向下语法分析报告方法的实现
5
【编译原理】自顶向下语法分析报告方法的实现
6
【编译原理】自顶向下语法分析报告方法的实现
7
【编译原理】自顶向下语法分析报告方法的实现
八、体会、质疑、建议
九、源代码
#include<fstream>
#include<sstream>
#include<iostream>
#include<vector>
#include<string>
#include<windows.h>
#include<iterator>
#include<algorithm>
#include<stdlib.h>
#define M 20
using namespace std;
void gotoxy(int x,int y){
COORD coord;
8
【编译原理】自顶向下语法分析报告方法的实现
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
class table
{
public:
void read();
friend class an_process;
string find_str(char row,char col);
private:
string matrix[M][M];
char start;
vector<string> vec_row;
vector<string> vec_col;
};
class sentence
9
【编译原理】自顶向下语法分析报告方法的实现
{
public:
void read_in();
friend class an_process;
private:
string str_input;
};
class an_process
{
public:
void analyse(const table LL1_table,const sentence input);
void write_result();
void print2(int x,int y);
private:
vector<int> step;
vector<vector<char> > stack_note;
vector<string> remain;
vector<string> production;
};
10
【编译原理】自顶向下语法分析报告方法的实现
void table::read()
{
string a,str;
char x,y;
int linenum = 0;
char line[1024]={0};
ifstream infile("table1.txt");
if(!infile)
{
cerr<<"错误!无法存储用户数据!\n";
}
while(infile.getline(line,sizeof(line)))
{
stringstream word(line);
if(linenum>1)
{
if(word>>x&&word>>y&&word>>str)
{
11
【编译原理】自顶向下语法分析报告方法的实现
matrix[x-48][y-48]=str;
/*cout<<x<<" ";
cout<<y<<" ";
cout<<matrix[x-48][y-48]<<" ";*/
}
}
while(word>>a&&linenum<2)
{
if(linenum==0)
{
vec_col.push_back(a);
/*cout<<a<<" ";*/
}
else if(linenum==1)
{
vec_row.push_back(a);
/* cout<<a<<" ";*/
}
}
12
【编译原理】自顶向下语法分析报告方法的实现
/*cout<<endl;*/
linenum++;
}
start=vec_col[0][0];
/* for(int icnt=0;icnt<vec_col.size();icnt++)
{
cout<<vec_col[icnt]<<" ";
}*/
}
string table::find_str(char row,char col)
{
for(int x=0;x<vec_col.size();x++)
for(int y=0;y<vec_row.size();y++)
{
if(row==vec_col[x][0]&&col==vec_row[y][0])
{
return matrix[x+1][y+1];
}
}
13
【编译原理】自顶向下语法分析报告方法的实现
return"";
}
void an_process::analyse(table LL1_table,sentence input) {
int icnt=0,jcnt=0,kcnt;
string ac,prod="",re="";
vector<char> stack;
char Now_word=input.str_input[icnt];
char NOW_state=LL1_table.start;
string::const_iterator Eiter;
string::const_iterator Biter;
stack.push_back('#');
stack.push_back(NOW_state);
for(;icnt<input.str_input.size();)
{
step.push_back(++jcnt);
stack_note.push_back(stack);
for(kcnt=icnt;kcnt<input.str_input.size();kcnt++)
{
14
【编译原理】自顶向下语法分析报告方法的实现
re=re+input.str_input[kcnt];
}
re=re+"#";
remain.push_back(re);
re.erase();
Now_word=input.str_input[icnt];
NOW_state=stack.back();
if(NOW_state==Now_word)
{
stack.erase(stack.end()-1);
icnt++;
production.push_back("(匹配)");
}
else
{
ac=LL1_table.find_str(NOW_state,Now_word);
Biter=ac.begin();
Biter--;
Eiter=ac.end();
Eiter--;
15
【编译原理】自顶向下语法分析报告方法的实现
if(ac=="ε")
{
prod=prod+NOW_state;
prod=prod+"→";
prod=prod+"ε";
stack.erase(stack.end()-1);
production.push_back(prod);
prod.erase();
}
else if(ac!="")
{
stack.erase(stack.end()-1);
prod.empty();
prod=prod+NOW_state;
prod=prod+"→"+ac;
production.push_back(prod);
prod.erase();
for(;Eiter!=Biter;Eiter--)
{
16
【编译原理】自顶向下语法分析报告方法的实现
stack.push_back(*Eiter);
}
}
else
{
cout<<"分析失败\n";
exit(0);
}
}
}
if(stack.size()!=1||stack.back()!='#')
{
cout<<"分析失败\n";
exit(0);
}
}
void an_process::write_result()
{
17
【编译原理】自顶向下语法分析报告方法的实现
step.push_back(step.back()+1);
vector<char> a;
a.push_back('#');
stack_note.push_back(a);
remain.push_back("#");
production.push_back("接受");
gotoxy(27,1);
cout<<"输入串"<<'"'<<remain[0];
cout<<"\b"<<'"'<<"的分析过程"<<endl<<endl;
print2(step.size()+1,4);
vector<int>::const_iterator iter1=step.begin();
vector<vector<char> >::const_iterator iter2=stack_note.begin(); vector<string>::const_iterator iter3=remain.begin();
vector<string>::const_iterator iter4=production.begin(); gotoxy(8,4);
cout<<"步骤";
gotoxy(27,4);
cout<<"分析栈";
gotoxy(44,4);
cout<<"剩余输入串";
18
【编译原理】自顶向下语法分析报告方法的实现
gotoxy(63,4);
cout<<"所用产生式";
for(int xy=0;iter1!=step.end();iter1++)
{
gotoxy(9,xy+6);
cout<<(*iter1);
xy=xy+2;
}
for(xy=0;iter2!=stack_note.end();iter2++) {
gotoxy(27,xy+6);
for(int icnt=0;icnt<(*iter2).size();icnt++) {
cout<<(*iter2)[icnt];
}
xy=xy+2;
}
for(xy=0;iter3!=remain.end();iter3++)
{
gotoxy(44,xy+6);
19
正在阅读:
数学教学经验发言稿07-29
2012年高考全国英语试题语法分类汇编之介词(精校附解析)05-24
天津市人力资源和社会保障局关于女职工生育产假有关问题的通知04-29
动车组乘务员一次标准化作业设计08-15
药用微生物复习题04-04
常用西餐英语词汇09-24
第四章 固体废物的生物处理07-23
九年级应掌握的化学方程式01-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 自顶向下
- 分析报告
- 编译
- 语法
- 原理
- 实现
- 方法
- 中国电池检测柜市场分析与竞争战略研究报告(2014-2019)
- 第12课 封建制度
- 中国水利工程协会第十六批单位会员名单
- 物业服务委托合同
- Comparison of eating and food culture between China and western countries
- C语言上机考试题型例题2
- 各部位骨折急救处理
- 小学高段趣味数学100题 附答案
- 农村公路竣工资料目录(样表)
- 2015年华东师大版数学八年级下册第16章分式:分式的运算(第1课时分式的乘除法)
- 金融学简答题和论述题(呕心沥血大全)
- 技能组工作总结
- 北京羽毛球馆zt
- 辽宁省实验中学分校2015-2016学年高一政治上学期期末考试试题
- 2011年高考英语真题(天津卷)(解析版)
- 桥牌基础知识9
- 12导线内业计算
- Comment on prescription problem in light-cone gauge
- 2012高考化学创新方案习题:第四章 第三节 第二课时(新人教版必修1)
- 高压灭菌器热分布验证