工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx

上传人:b****1 文档编号:14327075 上传时间:2022-10-22 格式:DOCX 页数:44 大小:22.68KB
下载 相关 举报
工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx_第1页
第1页 / 共44页
工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx_第2页
第2页 / 共44页
工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx_第3页
第3页 / 共44页
工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx_第4页
第4页 / 共44页
工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx

《工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx(44页珍藏版)》请在冰豆网上搜索。

工学编译原理词法分析语法分析语义分析C语言Word文档下载推荐.docx

boolis_letter(charc){

returnc>

='

a'

&

&

c<

z'

||c>

A'

Z'

;

}

boolis_digtial(charc){

0'

9'

}

boolis_dot(charc)

{

returnc=='

'

||c=='

'

voididentifier()//标示符的判断

m=0;

while(ch>

ch<

||ch>

token[m++]=ch;

ch=s[++p];

token[m]='

\0'

ch=s[--p];

syn=10;

for(n=0;

n<

6;

n++)

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

syn=n+1;

break;

voiddigit(boolpositive)//数字的判断

len=sum=0;

ch=s[p];

sum=sum*10+ch-'

if(ch=='

.'

dsum=sum;

pos=0.1;

dsum=dsum+(ch-'

)*pos;

pos=pos*0.1;

e'

index[len++]=ch;

-'

||ch=='

+'

if(!

(ch>

))

syn=-1;

else

if(syn==-1||(ch>

)||ch=='

//对数字开头的标识符进行判错。

)ch=s[++p];

//找到下一次要判断的开头

syn=12;

positive)dsum*=-1.0;

if(ch>

syn=11;

positive)sum*=-1;

boolcheck_behind_digit()

inti=p+1;

while(s[i]!

if(s[i]>

s[i]<

)returntrue;

elseif(s[i]!

'

s[i]!

\t'

\n'

)returnfalse;

i++;

returnfalse;

boolcheck_pre_prog()

inti=p-1;

while(i>

=0)

if(s[i]!

||s[i]>

elsereturntrue;

i--;

returntrue;

voidpot()

while

(1)

row++;

(ch=='

voidscaner()

memset(token,0,sizeof(token));

pot();

//cout<

<

p<

ch<

endl;

if(is_letter(ch))

identifier();

elseif(is_digtial(ch))

digit(true);

len=0,token[len++]=ch;

if(s[p+1]=='

syn=22;

token[len++]=s[p+1];

p++;

elsesyn=20;

elseif(ch=='

>

syn=24;

elsesyn=23;

syn=25;

elsesyn=18;

!

elsesyn=-1;

if(check_behind_digit()&

check_pre_prog())

++p;

syn=13;

token[0]=ch;

digit(false);

*'

)syn=15,strcpy(token,"

*"

);

/'

)syn=16,strcpy(token,"

/"

)syn=26,strcpy(token,"

"

('

)syn=27,strcpy(token,"

("

)'

)syn=28,strcpy(token,"

)"

#'

)syn=0,strcpy(token,"

#"

token<

sum<

syn<

intmain()

inti,j;

p=0;

row=1;

cout<

请选择输入方式,按0表示键盘输入,按1表示文件输入"

scanf("

%d"

&

i);

if(i)freopen("

1.txt"

r"

stdin);

elseprintf("

\nPleaseinputthestring:

\n"

do{

%c"

ch);

s[++p]=ch;

}while(ch!

s[0]='

s<

printf("

种别码单词符号\n"

scaner();

switch(syn)

case11:

(%-3d,%d)\n"

syn,sum);

case12:

\n(%d,%lf"

syn,dsum);

if(len)

for(i=0;

i<

len;

i++)printf("

index[i]);

len=0;

)\n"

//实数输出

case-1:

(第%d行,error!

row);

default:

(%-3d,%s)\n"

syn,token);

}while(syn!

=0);

//printf("

词法分析成功~请按任意键结束\n"

return0;

/*

function

a=9;

x=2*4;

b=a+x;

endfunc

#

x=a+b*c;

a=(a+b)/c;

x=(x+y)*(a+b)+c+d*(a+c)+(a+f)+(d-g);

b=(a*c+4)*9;

*/

语法分析

#include<

cmath>

intsyn,p,sum,kk,m,n,row,error;

doubledsum,pos;

charindex[800],len;

chartok

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

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1