资源简介

编译原理的课程设计,用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.embed.manifest

     文件        472  2018-12-10 22:07  LessonProject\Debug\LessonProject.exe.embed.manifest.res

     文件        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\link-cvtres.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link-cvtres.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.11288-cvtres.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.11288-cvtres.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.11288.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.11288.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.2928-cvtres.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.2928-cvtres.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.2928.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.2928.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.3668-cvtres.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.3668-cvtres.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.3668.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.3668.write.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.5888-cvtres.read.1.tlog

     文件          2  2018-12-22 13:40  LessonProject\Debug\link.5888-cvtres.write.1.tlog

............此处省略44个文件信息

评论

共有 条评论