资源简介
编译原理的课程设计,用c++完成了词法分析和语法分析的功能,附带结题报告。
代码片段和文件信息
#include “head.h“
//词法分析
void connect(char token[]char ch)//字符连接
{
int i;
for(i=0;token[i];i++);
token[i]=ch;
token[++i]=‘\0‘;//结尾加上终结符
}
int reserve(char token[])//检查是否是保留字
{
for(int i=0;i<17;i++)
if(!strcmp(tokenlist[i]))//是保留字
return WORD;//保留字
return IDENT;//标识符
}
struct Token scanner(char *buf)//扫描单词 返回二元式
{
static int i=0;//buf指针
Token t={‘\0‘“NULL“};//临时变量
char token[20]=““;//保存单词
while(buf[i]==‘ ‘)//空格
i++;
if(buf[i]>=‘a‘&&buf[i]<=‘z‘||buf[i]>=‘A‘&&buf[i]<=‘Z‘)//标识符
{
while(buf[i]>=‘a‘&&buf[i]<=‘z‘||buf[i]>=‘A‘&&buf[i]<=‘Z‘||buf[i]>=‘0‘&&buf[i]<=‘9‘)
connect(tokenbuf[i++]);//单词拼接
t.type=reserve(token);//查看是否是保留字
strcpy(t.valtoken);//赋值
return t;//返回二元式
}
if(buf[i]>=‘0‘&&buf[i]<=‘9‘)//常数
{
while(buf[i]>=‘0‘&&buf[i]<=‘9‘)
connect(tokenbuf[i++]);
t.type=CONSTNUM;//常数
strcpy(t.valtoken);
return t;
}
switch(buf[i])
{
case ‘‘:t.type=DELIMIT;t.val[0]=‘‘;t.val[1]=‘\0‘;break;//界符
case ‘.‘:t.type=DELIMIT;t.val[0]=‘.‘;t.val[1]=‘\0‘;break;
case ‘;‘:t.type=DELIMIT;t.val[0]=‘;‘;t.val[1]=‘\0‘;break;
case ‘(‘:t.type=DELIMIT;t.val[0]=‘(‘;t.val[1]=‘\0‘;break;
case ‘)‘:t.type=DELIMIT;t.val[0]=‘)‘;t.val[1]=‘\0‘;break;
case ‘+‘:t.type=OPERATOR;t.val[0]=‘+‘;t.val[1]=‘\0‘;break;//运算符
case ‘-‘:t.type=OPERATOR;t.val[0]=‘-‘;t.val[1]=‘\0‘;break;
case ‘*‘:t.type=OPERATOR;t.val[0]=‘*‘;t.val[1]=‘\0‘;break;
case ‘/‘:t.type=OPERATOR;t.val[0]=‘/‘;t.val[1]=‘\0‘;break;
case ‘=‘:t.type=OPERATOR;t.val[0]=‘=‘;t.val[1]=‘\0‘;break;
case ‘>‘:t.type=OPERATOR;strcpy(t.val“rop“);break;
case ‘<‘:t.type=OPERATOR;strcpy(t.val“rop“);break;
case ‘#‘:t.type=DELIMIT;t.val[0]=‘#‘;t.val[1]=‘\0‘;break;
default:cout<<“Error char>“< }
i++;//指向下个单词
return t;//返回当前单词的二元式
}
void sym()//词法分析
{
int i=0;
char ch1=‘\0‘;//前一个字符
char ch2;//当前字符
while(fin.read(&ch2sizeof(char)))//读取字符
{
if(ch2==‘\t‘||ch2==‘\n‘)
ch2=‘ ‘;
buf[i++]=ch2;
}
buf[i]=‘#‘;//输入串末位加上终结符
cout<<“当前输入串:“< fout<<“当前输入串:“< // Sleep(1000);
//show1();//词法说明
cout<<“词法分析开始...“< fout<<“词法分析开始...“< //Sleep(1000);
Token t;
do{
t=scanner(buf);
cout<<“(“< fout< //加入token数组
tokenarr[wordsnum++]=t;
//Sleep(500);
}while(t.val[0]!=‘#‘);
cout<<“词法分析结束\n“< fout<<“词法分析结束\n“< //Sleep(1000);
}
/*词法分析结束应该获得一组诸如此类的(单词,单词类型)二元式。
在语法分析阶段,将所有的结构体入栈,根据单词的类型来进行判别
*/
int ChangeToColumn(Token t)//查表获取该单词对应的下一个列的状态
{
int ij;
//id=+*()-;#beginendifthenorandnotroptruefalseSCABKL
if(t.type==3||t.type==4)
{
return 0;
}
else if(t.type==5||t.type==2)
{
switch(t.val[0])
{
case ‘=‘:return 1;break;
case ‘;‘:return 7;break;
case ‘(‘:return 4;break;
case ‘)‘:return 5;break;
case ‘+‘:return
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 610 2018-12-22 13:40 LessonProject\Debug\cl.command.1.tlog
文件 16412 2018-12-22 13:40 LessonProject\Debug\CL.read.1.tlog
文件 264 2018-12-22 13:40 LessonProject\Debug\CL.write.1.tlog
文件 104448 2018-12-22 13:40 LessonProject\Debug\LessonProject.exe
文件 406 2018-12-10 22:07 LessonProject\Debug\LessonProject.exe.em
文件 472 2018-12-10 22:07 LessonProject\Debug\LessonProject.exe.em
文件 381 2018-12-22 13:40 LessonProject\Debug\LessonProject.exe.intermediate.manifest
文件 1418812 2018-12-22 13:40 LessonProject\Debug\LessonProject.ilk
文件 63 2018-12-22 13:40 LessonProject\Debug\LessonProject.lastbuildstate
文件 3846 2018-12-22 13:40 LessonProject\Debug\LessonProject.log
文件 1141760 2018-12-22 13:40 LessonProject\Debug\LessonProject.pdb
文件 713 2018-12-10 22:06 LessonProject\Debug\LessonProject.vcxprojResolveAssemblyReference.cache
文件 0 2018-12-10 22:06 LessonProject\Debug\LessonProject.write.1.tlog
文件 216 2018-12-10 22:06 LessonProject\Debug\LessonProject_manifest.rc
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
文件 2 2018-12-22 13:40 LessonProject\Debug\li
............此处省略44个文件信息
- 上一篇:mfc数据库图书管理系统
- 下一篇:不用MFC写的小游戏
相关资源
- 编译原理课程设计整个项目和报告
- 编译原理LL1语法分析器C++版源代码
- LEX实现一个C语言子集的词法分析器
- 编译原理之算符优先算法-迭代法
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 无符号数的词法分析程序 C++版
- 现代编译原理-c语言描述虎书
- 合工大编译原理实验报告
- LL1文法消除左递归编译原理mfc实现完
- 南邮编译原理实验
- 编译原理及实践
- 编译原理LL(0)C语言小子集源代码
- 第四次上机作业 语法分析2
- PLO编译器的扩展编译原理课程实践
- 对于任意给定的输入串词法记号流进
- 编译原理课程设计C编写的C-编译器
- 编译原理课程设计LR(0)语法分析器
- LL1语法分析程序设计
- 西电编译原理大作业 C语言版
- 编译原理 简单函数绘图语言的解释器
- LEX与YACC实现C语言词法分析和语法分析
- 编译原理之语义分析
- 编译原理 词法分析器
- 简易C语言编译器的设计与实现
- 编译原理综合性实验 选择部分C语言的
- 编译器前两步
- 编译原理实验语法分析器
- 实验一:词法分析程序c++
- 哈工大编译原理编译器C++
评论
共有 条评论