logo资料库

SAMPLE语言的词法分析器.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
#include #include #include char *word[36]={"","and","array","begin","bool","call","case", "char","constant","dim","do","else","end","false","for","if","input", "integer","not","of","or","output", "procedure","program","read", "real","repeat","set","stop","then","to","true","until","var","while","write"}; int a[10000],b[10000]; char copy[1000][1000]; char achar[1000000]; int line=1,biaoji1=1,num=1,abnum=1,charnum=1; void scan(); void zifuchuan(); void number(); void zhuxi(); void fuhao(); void zifuchangliang(); void inputfile(); void output(); bool wrong=false; void fuhao() { if(achar[num]=='.'&&achar[num+1]=='.') { a[abnum]=47; b[abnum]=0; abnum++; num+=2; } else if(achar[num]==':'&&achar[num+1]=='=') { a[abnum]=51; b[abnum]=0; abnum++; num+=2; } else if(achar[num]=='<'&&achar[num+1]=='=') { a[abnum]=54; b[abnum]=0;
abnum++; num+=2; } else if(achar[num]=='<'&&achar[num+1]=='>') { a[abnum]=55; b[abnum]=0; abnum++; num+=2; } else if(achar[num]=='>'&&achar[num+1]=='=') { a[abnum]=58; b[abnum]=0; abnum++; num+=2; } else if(achar[num]=='(') { a[abnum]=39; b[abnum]=0; abnum++; num++; } else if(achar[num]==')') { a[abnum]=40; b[abnum]=0; abnum++; num++; } else if(achar[num]=='*') { a[abnum]=41; b[abnum]=0; abnum++; num++; } else if(achar[num]=='+') { a[abnum]=43; b[abnum]=0; abnum++; num++;
} else if(achar[num]==',') { a[abnum]=44; b[abnum]=0; abnum++; num++; } else if(achar[num]=='-') { a[abnum]=45; b[abnum]=0; abnum++; num++; } else if(achar[num]=='.') { a[abnum]=46; b[abnum]=0; abnum++; num++; } else if(achar[num]=='/') { a[abnum]=48; b[abnum]=0; abnum++; num++; } else if(achar[num]==':') { a[abnum]=50; b[abnum]=0; abnum++; num++; } else if(achar[num]==';') { a[abnum]=52; b[abnum]=0; abnum++; num++; } else if(achar[num]=='<')
{ a[abnum]=53; b[abnum]=0; abnum++; num++; } else if(achar[num]=='=') { a[abnum]=56; b[abnum]=0; abnum++; num++; } else if(achar[num]=='>') { a[abnum]=57; b[abnum]=0; abnum++; num++; } else if(achar[num]=='[') { a[abnum]=59; b[abnum]=0; abnum++; num++; } else if(achar[num]==']') { a[abnum]=60; b[abnum]=0; abnum++; num++; } else { wrong=true; cout<<"Line "<
void inputfile() { char n[300],ch; cin>>n; ifstream infile(n); while(infile.get(ch)) achar[charnum++]=ch; } void number() { char store[1000]; store[0]=achar[num]; num++; int i=0; bool isnumber=true; while((achar[num]>='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z')||(achar [num]>='0'&&achar[num]<='9')) { store[++i]=achar[num]; if(achar[num]<'0'||achar[num]>'9') isnumber=false; num++; } int l1=i+1; if(isnumber) a[abnum]=37; else { wrong=true; cout<<"Line "<
if(i==biaoji1) { b[abnum]=biaoji1; strcpy(copy[biaoji1],store); biaoji1++; abnum++; } if(num='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z')) zifuchuan(); else if(achar[num]>='0'&&achar[num]<='9') number();
else if(achar[num]=='/') { if(achar[num+1]=='*') num+=2,zhuxi(); else fuhao(); } else if(achar[num]=='\n') line++,num++; else if(achar[num]==' ') num++; else if(achar[num]=='\'') zifuchangliang(); else fuhao(); } } void zhuxi() { while(achar[num]!='*'||achar[num+1]!='/') { if(achar[num]=='\n'||num>=charnum) { wrong=true; cout<<"Line "<='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z')||(achar
[num]>='0'&&achar[num]<='9')) store[i++]=achar[num++]; int l1=i; store[l1]='\0'; for(i=1;i<=35;i++) { if(strcmp(word[i],store)==0) { a[abnum]=i; b[abnum]=0; abnum++; break; } } if(i==36) { for(i=1;i
分享到:
收藏