教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 行业范文 >

语法分析器源代码

来源:网络收集 时间:2026-08-29
导读: 语法分析器代码,无注释 语法分析程序的源代码 #includestdio.h #includestring.h char prog[80],token[6]; char ch; int syn,p,m,n,sum,kk=0; char * rwtab[6]={begin,if,then,while,do,end}; main() { p=0; printf(\nplease intput string:); do { ch=getch

语法分析器代码,无注释

语法分析程序的源代码

#include<stdio.h>

#include<string.h>

char prog[80],token[6];

char ch;

int syn,p,m,n,sum,kk=0;

char * rwtab[6]={"begin","if","then","while","do","end"};

main()

{

p=0;

printf("\nplease intput string:");

do

{

ch=getchar();

prog[p++]=ch;

}while(ch!='#');

p=0;

scaner();

lrparser();

getch();

}

/*词法扫描程序:*/

scaner()

{

for(n=0;n<8;n++)

token[n]=NULL;

m=0;

ch=prog[p++];

while(ch==' ')ch=prog[p++];

if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A'))

{

while((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')||(ch<='9'&&ch>='0')) {

token[m++]=ch;

ch=prog[p++];

}

token[m++]='\0';

ch=prog[--p];

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)

{

语法分析器代码,无注释

syn=n+1;

break;

}

}

else

if((ch<='9'&&ch>='0'))

{

sum=0;

while((ch<='9'&&ch>='0')) {

sum=sum*10+ch-'0';

ch=prog[p++];

}

ch=prog[--p];

syn=11;

}

else

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 '>':token[m++]=ch; ch=prog[p++]; if(ch=='=')

{

syn=24;

token[m++]=ch;

语法分析器代码,无注释

}

else

{

syn=23;

ch=prog[--p]; }

break;

case ':':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=18;token[0]=ch;break; case '<>':syn=21;token[0]=ch;break; case '<=':syn=22;token[0]=ch;break; case '>=':syn=24;token[0]=ch;break; case '=':syn=25;token[0]=ch;break; case ';':syn=26;token[0 case '(':syn=27;token[0]=ch;break; case ')':syn=28;token[0]=ch;break; case '#':syn=0;token[0]=ch;break; default:syn=-1;

}

}

lrparser()

{

if(syn==1)

{

scaner();

]=ch;break;

语法分析器代码,无注释

if(syn==6)

{

scaner();

if((syn==0)&&(kk==0))

printf("sucess");

}

else

{

if(kk!=1) printf("lost end error!"); kk=1;

}

}

else

{

printf("output of begin is error!"); kk=1;

}

return;

}

yucu()

{

statement();

while(syn==26)

{

scaner();

statement();

}

return;

}

statement()

{

if(syn==10)

{

scaner();

if(syn==18)

{

scaner();

expression();

}

语法分析器代码,无注释

{

printf("output of equal is error!"); kk=1;

}

}

else

{

printf("input of sentence is error!"); kk=1;

}

return;

}

expression()

{

term();

while(syn==13||syn==14)

{

scaner();

term();

}

return;

}

term()

{

factor();

while(syn==15||syn==16)

{

scaner();

factor();

}

return;

}

factor()

{

if(syn==10||syn==11)scaner();

else

语法分析器代码,无注释

if(syn==27)

{

scaner();

expression();

if(syn==28)scaner();

else

{

printf("output ')' is error!"); kk=1;

}

}

else

{

printf("output expression is error!"); kk=1;

}

return;

}

…… 此处隐藏:560字,全部文档内容请下载后查看。喜欢就下载吧 ……
语法分析器源代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/985560.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)