语法分析代码Word文件下载.docx

上传人:wj 文档编号:7028012 上传时间:2023-05-07 格式:DOCX 页数:10 大小:18.60KB
下载 相关 举报
语法分析代码Word文件下载.docx_第1页
第1页 / 共10页
语法分析代码Word文件下载.docx_第2页
第2页 / 共10页
语法分析代码Word文件下载.docx_第3页
第3页 / 共10页
语法分析代码Word文件下载.docx_第4页
第4页 / 共10页
语法分析代码Word文件下载.docx_第5页
第5页 / 共10页
语法分析代码Word文件下载.docx_第6页
第6页 / 共10页
语法分析代码Word文件下载.docx_第7页
第7页 / 共10页
语法分析代码Word文件下载.docx_第8页
第8页 / 共10页
语法分析代码Word文件下载.docx_第9页
第9页 / 共10页
语法分析代码Word文件下载.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

语法分析代码Word文件下载.docx

《语法分析代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《语法分析代码Word文件下载.docx(10页珍藏版)》请在冰点文库上搜索。

语法分析代码Word文件下载.docx

TFT'

Fid

E+TE'

……

如果输入串有错误,则在输出中要体现是跳过输入串的某些记号了,还是弹栈,弹出某个非终结符或者是终结符了,同时给出相应的出错提示信息。

比如:

idid*id对应的出错信息是:

"

输入串跳过记号id,用户多输入了一个id"

id**id对应的出错信息是:

弹栈,弹出非终结符F,用户少输入了一个id"

(id+id对应的出错信息是:

弹栈,弹出终结符),用户少输入了一个右括号(或者说,括号不匹配)"

有余力的同学可进一步考虑如下扩展:

1. 将递归下降方法和非递归预测分析方法都实现

2. 在语法分析的过程中调用前两次上机的结果,即利用词法分析器来返回一个记号给语法分析器。

3. 编写First和Follow函数,实现其求解过程。

*/

#include<

stdio.h>

dos.h>

stdlib.h>

string.h>

chara[50],b[50];

charch;

intn1,i1=0,flag=1,n=5,signal=0;

inttotal=0;

/*步骤计数器*/

intE();

intT();

intE1();

/*E'

intT1();

/*T'

intF();

voidinput();

voidinput1();

voidmain()/*递归分析*/

{

intf,j=0;

printf("

请输入字符串(长度<

50,以#号结束)\n"

);

do{

scanf("

%c"

&

ch);

a[j]=ch;

j++;

}while(ch!

='

#'

n1=j;

ch=b[0]=a[0];

步骤\t文法\t\t分析串\t\t分析字符\t剩余串\n"

f=E();

if(f==0)return;

if(ch=='

printf("

accept\n"

else

{

!

error\n"

return;

}

\n"

}

intE()

{intf,t;

%d\tE-->

TE'

\t\t"

total);

total++;

flag=1;

input();

input1();

if(i1==0)

while(ch=='

+'

||ch=='

*'

{

if(ch=='

)//+i

{

b[i1]=ch;

printf("

%d\t?

?

flag=0;

input();

input1();

printf("

串首部多输入了一个+!

ch=a[++i1];

}

)//*i

串首部多输入了一个*!

}

f=T();

if(f==0)return(0);

t=E1();

if(t==0)return(0);

elsereturn

(1);

intT()

%d\tT-->

FT'

f=F();

t=T1();

intE1()

if(ch=='

{

b[i1]=ch;

printf("

%d\tE'

-->

+TE'

\t"

flag=0;

input();

ch=a[++i1];

if(ch=='

)//i++i

{

b[i1]=ch;

flag=0;

printf("

少输入了一个i!

ch=a[++i1];

}

)//i+*i

f=T();

if(f==0)return(0);

t=E1();

if(t==0)return(0);

elsereturn

(1);

}

ε\t\t"

return

(1);

intT1()

intf,t;

){

%d\tT'

*FT'

)//i**i

)//i*+i

f=F();

t=T1();

if(t==0)return(0);

elsereturn

(1);

a[i1]=ch;

intF()

{intf;

('

{

%d\tF-->

(E)\t\t"

signal=1;

f=E();

if(ch=='

)'

b[i1]=ch;

flag=0;

ch=a[++i1];

signal=0;

}

else

{

printf("

缺少右括号!

//return(0);

//考虑容忍没有右)的情况

}

elseif(ch=='

i'

i\t\t"

&

signal)

缺少左括号!

多输入了一个i!

else

printf("

//return(0);

voidinput()

intj=0;

for(;

j<

=i1-flag;

j++)

printf("

b[j]);

/*输出分析串*/

%c\t\t"

ch);

/*输出分析字符*/

voidinput1()

intj;

for(j=i1+1-flag;

n1;

a[j]);

/*输出剩余字符*/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2