计算机科学与技术专业编译原理之词法分析代码
来源:互联网 发布:c语言杨辉三角不用数组 编辑:程序博客网 时间:2024/06/09 17:31
#include<stdio.h>
#include<string.h>
char prog[80],token[10];
char ch;
int count=0, ni=0;
int syn,p,j=0,n,m,sum=0; //*p是缓冲区prog的指针,m是token的指针
char *rwtab[10]={"begin","if","then","while","do","end","else","char","int"};
void main()
{
void scaner();
p=0;
printf("\n please input string:");
do
{
scanf("%c",&ch);
prog[p++]=ch;
}while (ch!='\n');
prog[p]='\0';
p=0;
printf("\n 各种单词符号对应的种别码 : (种别码,单词符号)\n\n");
do
{
scaner();
switch(syn)
{
case 12:printf(" (%d,%d) ",syn,sum ); break;
case -1: printf(" (错误符号,%s) ",token);break;
default:
printf(" (%d,%s) ",syn,token);
}
ni++;
if(ni%2==0)printf("\n");
}while(syn!=0);
printf("\n");
}
void scaner()
{
int j=0;
for(n=0;n<8;n++)
token[n]=NULL;
ch=prog[p++];
while(ch==' ')
ch=prog[p++];
if(ch>='a'&&ch<='z')
{
count=0;
while((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'))
{
token[j++]=ch;
ch=prog[p++];
}
token[j++]='\0';
ch=prog[--p];
syn=10;
for(n=0;n<9;n++)
if(strcmp(token,rwtab[n])==0)
{
count=1;
switch(n)
{
case 0: syn=1;break;
case 1: syn=2;break;
case 2: syn=3;break;
case 3: syn=4;break;
case 4: syn=5;break;
case 5: syn=6;break;
case 6: syn=7;break;
case 7: syn=8;break;
case 8: syn=9;break;
case 9:syn=10;break;
}
}
}
else
if(ch>='0'&&ch<='9')
{
count=1;
sum=0;
while((ch-'0')>=0&&(ch-'0')<=9)
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
ch=prog[--p];
syn=11;
}
else
{
count=1;
switch(ch)
{
case '<':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='>')
{
syn=21;
token[m++]=ch;
}
else if(ch=='=')
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;ch=prog[--p];}
break;
case '>': m=0;token[m++]=ch;ch=prog[p++];
if(ch=='=')
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
ch=prog[--p];}
break;
case ':': m=0;token[m++]=ch;ch=prog[p++];
if(ch=='=')
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;
ch=prog[--p];}
break;
case'+': syn=13;token[0]=ch;break;
case'-': syn=14;token[0]=ch;break;
case'*': syn=15;token[0]=ch;break;
case'/': syn=16;token[0]=ch;break;
case'=': syn=25;token[0]=ch;break;
case';': syn=26;token[0]=ch;break;
case'(': syn=27;token[0]=ch;break;
case')': syn=28;token[0]=ch;break;
case'\n': syn=0;strcpy(token,"\\n");break;
default:syn=-1;token[0]=ch;
}
}
}
int Irparser()
{ int kk=0;
if(syn=1)
{ scaner();
yucu();
if(syn=6)
{ scaner();
if(syn=0 && (kk==0))
输出("success");
}
else{if(kk!=1)输出'缺end'错误;kk=1;}
else{输出'begin'错误;kk=1;}
}
int yucu()
{ statement();
whlie(syn=26)
{ scaner();
statement();
}
return;
}
int statement()
{ if(syn=10)
{ scaner();
if(syn=18)
{ scaner();
expression();
}
else{printf;kk=1;}
}
else{printf(语句错误;kk=1);}
}
int expression()
{ term();
whlie(syn=13or14)
{ scaner();
term();
}
return;
}
int term()
{ factor;
whlie(syn=15 or 16)
{ scaner();
factor();
}
return;
}
int factor()
{ if(syn=10 or 11)
scaner();
else if(syn=27)
{ scaner();
expression();
if(syn=28)
scaner();
else{printf(')'错误;kk=1);}
}
else{printf (kk=1);}
}
#include<string.h>
char prog[80],token[10];
char ch;
int count=0, ni=0;
int syn,p,j=0,n,m,sum=0; //*p是缓冲区prog的指针,m是token的指针
char *rwtab[10]={"begin","if","then","while","do","end","else","char","int"};
void main()
{
void scaner();
p=0;
printf("\n please input string:");
do
{
scanf("%c",&ch);
prog[p++]=ch;
}while (ch!='\n');
prog[p]='\0';
p=0;
printf("\n 各种单词符号对应的种别码 : (种别码,单词符号)\n\n");
do
{
scaner();
switch(syn)
{
case 12:printf(" (%d,%d) ",syn,sum ); break;
case -1: printf(" (错误符号,%s) ",token);break;
default:
printf(" (%d,%s) ",syn,token);
}
ni++;
if(ni%2==0)printf("\n");
}while(syn!=0);
printf("\n");
}
void scaner()
{
int j=0;
for(n=0;n<8;n++)
token[n]=NULL;
ch=prog[p++];
while(ch==' ')
ch=prog[p++];
if(ch>='a'&&ch<='z')
{
count=0;
while((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'))
{
token[j++]=ch;
ch=prog[p++];
}
token[j++]='\0';
ch=prog[--p];
syn=10;
for(n=0;n<9;n++)
if(strcmp(token,rwtab[n])==0)
{
count=1;
switch(n)
{
case 0: syn=1;break;
case 1: syn=2;break;
case 2: syn=3;break;
case 3: syn=4;break;
case 4: syn=5;break;
case 5: syn=6;break;
case 6: syn=7;break;
case 7: syn=8;break;
case 8: syn=9;break;
case 9:syn=10;break;
}
}
}
else
if(ch>='0'&&ch<='9')
{
count=1;
sum=0;
while((ch-'0')>=0&&(ch-'0')<=9)
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
ch=prog[--p];
syn=11;
}
else
{
count=1;
switch(ch)
{
case '<':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='>')
{
syn=21;
token[m++]=ch;
}
else if(ch=='=')
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;ch=prog[--p];}
break;
case '>': m=0;token[m++]=ch;ch=prog[p++];
if(ch=='=')
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
ch=prog[--p];}
break;
case ':': m=0;token[m++]=ch;ch=prog[p++];
if(ch=='=')
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;
ch=prog[--p];}
break;
case'+': syn=13;token[0]=ch;break;
case'-': syn=14;token[0]=ch;break;
case'*': syn=15;token[0]=ch;break;
case'/': syn=16;token[0]=ch;break;
case'=': syn=25;token[0]=ch;break;
case';': syn=26;token[0]=ch;break;
case'(': syn=27;token[0]=ch;break;
case')': syn=28;token[0]=ch;break;
case'\n': syn=0;strcpy(token,"\\n");break;
default:syn=-1;token[0]=ch;
}
}
}
int Irparser()
{ int kk=0;
if(syn=1)
{ scaner();
yucu();
if(syn=6)
{ scaner();
if(syn=0 && (kk==0))
输出("success");
}
else{if(kk!=1)输出'缺end'错误;kk=1;}
else{输出'begin'错误;kk=1;}
}
int yucu()
{ statement();
whlie(syn=26)
{ scaner();
statement();
}
return;
}
int statement()
{ if(syn=10)
{ scaner();
if(syn=18)
{ scaner();
expression();
}
else{printf;kk=1;}
}
else{printf(语句错误;kk=1);}
}
int expression()
{ term();
whlie(syn=13or14)
{ scaner();
term();
}
return;
}
int term()
{ factor;
whlie(syn=15 or 16)
{ scaner();
factor();
}
return;
}
int factor()
{ if(syn=10 or 11)
scaner();
else if(syn=27)
{ scaner();
expression();
if(syn=28)
scaner();
else{printf(')'错误;kk=1);}
}
else{printf (kk=1);}
}
- 计算机科学与技术专业编译原理之词法分析代码
- 编译原理 之 词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- 编译原理词法分析之NFA与自动机的最小化
- 漫谈计算机科学与技术专业
- 编译原理实验 之 词法分析
- 编译原理之词法分析xml
- 编译原理之词法分析和语法分析
- 编译原理实验之词法分析
- 编译原理学习笔记之词法分析
- 编译原理之词法分析和语法分析
- 编译原理之语法,语义,词法分析
- 编译原理 词法分析
- 外观,代理与中介者模式
- Sign in as Different User and SharePoint 2013
- linux内核中的likely和unlikely
- 关于Freeswitch 视频采用proxy_media 时, 错误设置payload type 为0的解决
- for的基本用法 99乘法表
- 计算机科学与技术专业编译原理之词法分析代码
- CMD Telnet 命令行自动发送邮件脚本
- 分布式搜索Elasticsearch源码分析之二------索引过程源码概要分析
- 成功的条件:高人指点、贵人相助、小人监督、个人奋斗
- 编译原理之 语法分析c代码
- GDI+在Vistual C++ 2010中的配置
- 数组排序
- 2013年小型企业必须了解的七大科技趋势
- Custom Outcome Options of Task Form in SharePoint Designer on SharePoint 2013 Workflow