资源简介
内容:
一共有实验一和实验二两个实验,每个实验有4次课8个学时;
实验一完成词法分析;
实验二完成语法、语义分析及中间代码生成。
两个实验完成后最终效果:
实现一个简单的集成开发环境(IDE),可以编辑源代码、有“编译”、“运行”等功能;
需要显示所有的错误信息、扫描结果、语法分析结果、中间代码和汇编代码
(做实验一时可以使用命令行界面)
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
int Test(char[200]);
int AddIdentifier(char[20]);
int FindIdentifier(char[20]);
bool Isnum(char[20]); //判断是否合法标识符
void Load(char[30]);
void WordSplit(char[30]);
void Display(char[200] int[10000] int&);
void Errors(int[10000] int&);
char Identifiers[1000][50];
int Counts; //记录存储字符常量个数
int huanhang=0; //记录每一行输出多少个了
bool isStr=false;//用于判断转义字符串是ID还是STR,因为STR的单引号没有放到word数组里
int main(){
char filepath[30];
cout<<“请输入要分析的程序文件名称:“;
while(cin>>filepath){
Load(filepath); //对指定文件进行词法分析
cout<<‘\n‘<<‘\n‘;
cout<<“请输入要分析的程序文件名称:“;
}
return 0;
}
int Test(char word[200]){
char Keys[36][20]={““ “true“ “false“ “or“ “and“ “not“ “int“ “bool“ “string“ “while“ “do“ “if“ “then“ “else“ “end“ “repeat“ “until“ “read“ “write“ “>“ “<=“ “>=“ ““ “‘“ “{“ “}“ “;“ “:=“ “+“ “-“ “*“ “/“ “(“ “)“ “<“ “=“};
if(word[0]>=‘0‘&&word[0]<=‘9‘){
if (word[0] == ‘0‘ && (word[1] == ‘x‘ || word[1] == ‘X‘))
{
for (int i = 2; i < strlen(word)-1; i++)
if (!(word[i]>=‘a‘&&word[i]<=‘f‘||word[i]>=‘A‘&&word[i]<=‘F‘||word[i]>=‘0‘&&word[i]<=‘9‘))
return -6;//错误的十六进制数
return 37;
}
else if(!Isnum(word))
return -6; //非法标示符,以数字开头,返回-2
else return 37; //识别为NUM
}
for(int j=1; j<36; j++){ //识别为KEY
if(strcmp(Keys[j] word)==0)
return j;
}
if (word[0] == ‘\\‘&& isStr==true)//识别STR出现“\”,也认为是STR
return 38;
if (word[0] == ‘\\‘&& isStr==false)//识别转义字符
return 40;
if(!(word[0]>=‘a‘&&word[0]<=‘z‘||word[0]>=‘A‘&&word[0]<=‘Z‘||word[0]>=‘0‘&&word[0]<=‘9‘||word[0]==‘\‘‘))
return -1;
if (word[0] != ‘\‘‘ && word[strlen(word)-1] == ‘\‘‘)//缺少左单引号
return -2;
if (word[0] == ‘\‘‘ && word[strlen(word)-1] != ‘\‘‘)//缺少右单引号
return -3;
if (word[0] != ‘{‘ && word[strlen(word)-1] == ‘}‘)//缺少左大括号
return -4;
if (word[0] == ‘{‘ && word[strlen(word)-1] != ‘}‘)//缺少右大括号
return -5;
if(isStr==false&&((word[0]>=‘a‘&&word[0]<=‘z‘||word[0]>=‘A‘&&word[0]<=‘Z‘)))//识别为ID
return 36;
if (isStr==true)//识别为STR
return 38;
if (word[0] == ‘{‘ && word[strlen(word)-1] == ‘}‘)//识别为注释
return 39;
return 50;//未识别符号
}
bool Isnum(char word[20]){
for(int i=1; word[i]!=‘\0‘; i++){
if(word[i]<‘0‘||word[i]>‘9‘)
return false;
}
return true;
}
void Load(char FilePath[30]){
Counts=0; //清空之前字符常量记录
WordSplit(FilePath);
}
void WordSplit(char fpath[30])
{
ifstream inf(fpath ios::in);//打开文件
int row[10000]={0}; //记录每一行是否有错
int r=1; //记录行数
char ch;
ch=inf.get();
int c=0; //记录输出个数
while(ch!=EOF) //文件尾
{
isStr=false;
while(ch==‘ ‘||ch==‘\t‘)
ch=inf.get(); //过滤空格
while(ch==‘\n‘)
{
r++; //换行
ch=inf.get();
}
int i=0;
char word[200]={‘ ‘};
if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘)
{
//##############首位为字母时###
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-03-04 19:38 编译原理实验\
目录 0 2013-03-04 19:38 编译原理实验\实验测试数据\
文件 314 2012-09-12 11:42 编译原理实验\实验测试数据\experiment1_test1_in.txt
文件 408 2012-09-12 11:42 编译原理实验\实验测试数据\experiment1_test1_out.txt
文件 113 2012-09-12 11:42 编译原理实验\实验测试数据\experiment1_test2_in.txt
文件 334 2012-09-12 11:42 编译原理实验\实验测试数据\experiment1_test2_out.txt
文件 124 2012-09-12 11:42 编译原理实验\实验测试数据\experiment2_test1_in.txt
文件 336 2012-09-12 11:42 编译原理实验\实验测试数据\experiment2_test1_out.txt
文件 148 2012-09-12 11:42 编译原理实验\实验测试数据\experiment2_test2_in.txt
文件 322 2012-09-12 11:42 编译原理实验\实验测试数据\experiment2_test2_out.txt
文件 294 2012-09-12 11:42 编译原理实验\实验测试数据\说明.txt
目录 0 2013-03-04 19:38 编译原理实验\实验资料\
文件 36352 2012-09-12 11:42 编译原理实验\实验资料\TINY+ EBNF文法.doc
文件 46080 2012-09-12 11:42 编译原理实验\实验资料\TINY+.doc
文件 59392 2012-09-12 11:42 编译原理实验\实验资料\实验.doc
文件 121344 2012-11-14 10:42 编译原理实验\实验资料\实验1 指南.ppt
文件 159744 2012-11-13 18:15 编译原理实验\实验资料\实验2 指南.ppt
文件 126464 2012-09-12 11:42 编译原理实验\实验资料\编译原理实验报告模板.doc
文件 114176 2012-09-12 11:42 编译原理实验\实验资料\编译原理实验报告要求.doc
目录 0 2013-03-04 19:38 编译原理实验\词法分析\
目录 0 2013-03-04 19:38 编译原理实验\词法分析\Debug\
文件 51200 2012-11-26 21:00 编译原理实验\词法分析\Debug\词法分析.exe
文件 412316 2012-11-26 21:00 编译原理实验\词法分析\Debug\词法分析.ilk
文件 650240 2012-11-26 21:00 编译原理实验\词法分析\Debug\词法分析.pdb
目录 0 2013-03-04 19:38 编译原理实验\词法分析\词法分析\
目录 0 2013-03-04 19:38 编译原理实验\词法分析\词法分析\Debug\
文件 6740 2012-11-26 21:00 编译原理实验\词法分析\词法分析\Debug\BuildLog.htm
文件 76189 2012-11-26 21:00 编译原理实验\词法分析\词法分析\Debug\WordsAnalyser.obj
文件 65 2012-11-26 21:00 编译原理实验\词法分析\词法分析\Debug\mt.dep
文件 314368 2012-11-26 21:00 编译原理实验\词法分析\词法分析\Debug\vc90.idb
文件 225280 2012-11-26 21:00 编译原理实验\词法分析\词法分析\Debug\vc90.pdb
............此处省略63个文件信息
相关资源
- 操作系统的课程设计实验
- Packet Tracer实验集中文版
- 红色飓风E45开发板实验手册与用户手
- 云计算应用实验报告
- 武大实验室摄影测量与遥感研究生招
- 编译原理课件及实验源代码实验报告
- 华中科技大学 微机接口实验 4个实验
- 《计算机制图》实验指导书
- 函数发生器实验函数发生器实验
- STM32的RTC闹钟实验
- Intel Xscale PXA270教学平台实验指导手册
- 离散数学实验TSP旅行商问题的代码实
- 图形学实验--多边形的扫描转换
- 华为认证HCNP实验指导书HCNP-IERS v2.0.
- 东南大学编译原理实验 lex&&yacc
- 多媒体实验二.docx
- 51单片机替换专业触摸IC电容式触摸开
- 讲师使用思科官方packetTracer中文实验
- 山东大学算法导论实验
- 山东大学计算机组成原理课设实验报
- 山东大学操作系统实验报告
- 数字图像处理实验——滤波,皮肤毛
- ccna ipdata 标准 实验包 pkt 25 个实验(
- 北方工业大学编译原理话语法分析实
- DB2数据库程序开发试验
- H3C经典实验案例
- 天津大学操作系统原理实验
- HCNA-HNTD进阶实验指导书V2.2.pdf
- HCNA-HNTD入门实验指导书V2.2.pdf
- FPGA设计初级班提高班培训实验指导手
评论
共有 条评论