Monday, March 14, 2011

Лабораторийн ажил - 1 бодолт

#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define MAXVAR  50
FILE *in,*out;
char ch,name[20];
int lineno=1,count=0,varcode[50];
char systable[20][20]={"begin","end","scanf","printf"},
     codetable[20][10]={"{","}","in","out"},
     varname[50][20];
void open(char *s,char *s1);
void close();
void digit(char ch);
void skipspace();
void search(char ch);
void readfile();
void main(int argc,char *argv[])
    {
     open(argv[1],argv[2]);
     readfile();
     close();
    }
void open(char *s,char *s1)
    {
     if ((in=fopen(s,"r"))==NULL)
       {    printf("Can not input file");exit(0);}
     if ((out=fopen(s1,"w"))==NULL)
       {    printf("Can not output file");exit(0);}
    }
void error(char *s)
    {printf(" Error: %s  Line number: %d",s,lineno);exit(0);}
void operat(char ch)
    {
     if(ch=='('||ch==',') fputc(' ',out);
       else  fputc(ch,out);
    }
void readfile()
    {
     ch=fgetc(in);
     while(ch!=EOF)
     {  skipspace();
        if(isalpha(ch)) search(ch);
          else
           if(isdigit(ch)) digit(ch);
        else
        if(ch=='=') operat(ch);
        ch=fgetc(in);
     }
    }
void close()
    {fclose(in);fclose(out);}
void skipspace()
    {
     while(ch==' '||ch=='\t'||ch=='\n')
        {if(ch=='\n') {lineno++;fputc('\n',out);}ch=fgetc(in); }
    }
void addvar(char *s)
    {
     strcpy(varname[++count],s);
     varcode[count]=count;
     fputs("id",out);fprintf(out,"%d",count);
    }
void varsearch(char *s)
    {
     int i=count,k=0;
     while (i>0)
       { if(strcmp(s,varname[i])==0) {k=1;break;} i--; }
     if(k==1) {fputs("id",out);fprintf(out,"%d",i);}
      else addvar(s);
    }
void ioparametr()
    {
     fputc(' ',out);
     char n[50];
     int i=0;
     ch=fgetc(in);
     while(1)
        {
         while(isalpha(ch))
            { n[i]=ch;ch=fgetc(in);i++;}
         n[i]='\0';
         if(ch==',') fputc(' ',out);
          else
          if(ch==')')
            {
             fputc(' ',out);
             if((ch=fgetc(in))==';') break;
              else error("; - not");
            }
          else error("Error");

        }
    }
void search(char ch)
    {
     int i=0,k=0;
     while(isalpha(ch))
      {name[i]=ch;ch=fgetc(in);i++;}
       name[i]='\0';
       i=0;
       while(i<4)
        { if(0==strcmp(name,systable[i]))
        {k=1;break;}i++;
        }
       if (k==1)
        { if (i<2)
          {  fputs(codetable[i],out);}
           else {fputs(codetable[i],out);
            if((ch=fgetc(in))=='(') ioparametr();
              else error("( haalt alga");
            }
        }
       else varsearch(name);
    }
void digit(char ch)
    {
     while(isdigit(ch))
        { fputc(ch,out);ch=fgetc(in);}
    }

No comments:

Post a Comment