1010コンパイル原理(新版)

23433 ワード

#include<stdio.h>
#include <string.h>
#include<iostream.h>
main(){
    char a[100];
    char ch,bh;
    int i,s,t,j,q;
    s=0;
    t=0;
    printf("     (  #  ):");
    do
    {
         scanf("%c",&ch);
         a[s++]=ch;
    }while(ch!='#');
    for(i=0;i<s;i++)
    {
        bh=a[i];
        if(bh>='a'&&ch<='z')
        {
            if(a[i]=='b'&&a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')
            {
                printf("<1,begin >
"); i=i+4; continue; } else if(a[i]=='i'&&a[i-1]=='f') { printf("<2,if >
"); i=i+1; continue; } else if(a[i]=='t'&&a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n') { printf("<3,then >
"); i=i+3; continue; } else if(a[i]=='w'&&a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e') { printf("<4,while >
"); i=i+4; continue; } else if(a[i]=='d'&&a[i+1]=='o') { printf("<5,do >
"); i=i+1; continue; } else if(a[i]=='e'&&a[i+1]=='n'&&a[i+2]=='d') { printf("<6,end >
"); i=i+2; continue; } else if(a[i]=='l'&&a[i+1]=='('&&a[i+2]=='l'&&a[i+3]=='|'&&a[i+4]=='d'&&a[i+5]==')'&&a[i+6]=='*') { printf("<10,l(l|d)* >
"); i=i+6; continue; } else if(a[i]=='d'&&a[i+1]=='d'&&a[i+2]=='*') { printf("<11,dd* >
"); i=i+2; continue; } } if(bh==':') if(a[i+1]=='='){ printf("<18,:= >
"); i=i+1; continue;} if(bh=='<') if(a[i+1]='='){ printf("<21,<= >
"); i=i+1; continue;} if(bh=='<') if(a[i+1]=='>'){ printf("<22,<> >
"); i=i+1; continue;} if(bh=='>') if(a[i+1]=='='){ printf("<24,>= >
"); i=i+1; continue;} t=i; j=i; while(a[i]>='0'&&a[i]<='9'){ if(a[t]>='0'&&a[t]<='9') { t=t+1; } else { q=t-j; printf("<11,"); for(j;j<t;j++) { printf("%c",a[j]); } printf(" >
"); i=i+q; break; } } switch(bh) { case '+': printf("<13,%c >
",bh); break; case '-': printf("<14,%c >
",bh); break; case '*': printf("<15,%c >
",bh); break; case '/': printf("<16,%c >
",bh); break; case ':': printf("<17,%c >
",bh); break; case '(': printf("<27,%c >
",bh); break; case ')': printf("<28,%c >
",bh); break; case '#': printf("<0,%c >
",bh); break; case '>': printf("<23,%c >
",bh); break; case '<': printf("<20,%c >
",bh); break; case ';': printf("<26,%c >
",bh); break; } } }