Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Sample lex code for imaginary language
- *-accepts only 5 keywords namely int,float,char .
- *4-arith operators +,-,/,*
- *logical operators &-AND,!-NOT,|-OR
- */
- Author : Santhosh Pai :)
- #include<stdio.h>
- void scan();
- void iden(char);
- void digit(char);
- void arithop();
- void logicop();
- void delimiter();
- int iskey(char str[]); //funtion to check a keyword
- FILE *fp;
- int arith=0,logic=0,del=0;
- int main()
- {
- fp=fopen("input.txt","r+");
- scan();
- }
- void scan()
- {
- char ch;
- while(1)
- {
- ch=fgetc(fp);
- if((ch>=65 && ch<=90)||(ch>=97 && ch<=122))
- {
- iden(ch);
- }
- else if(ch>=48 && ch<=57)
- {
- digit(ch);
- }
- else if(ch=='*'||ch=='+'||ch=='-'||ch=='/')
- {
- arithop();
- }
- else if(ch=='&'||ch=='|'||ch=='!')
- {
- logicop();
- }
- else if(ch==' '||ch==','||ch==';')
- {
- delimiter();
- }
- else if(ch==EOF)
- break;
- }
- printf("\n The number of occurences of arithmetic operators +,*,/,-= %d ",arith);
- printf("\n The number of occurences of logical operators &,!,| = %d",logic);
- printf("\n The number of occurences of delimiter (SPACE),';' = %d",del);
- }
- void iden(char ch)
- {
- char ident[10];
- int i=0;
- do
- {
- ident[i]=ch;
- ++i;
- ch=fgetc(fp);
- }while((ch>=65 && ch<=90)||(ch>=97 & ch<=122)||(ch>=48 & ch<=57)); //keep scanning
- //++i;
- ident[i]='\0';
- if(iskey(ident))
- {
- printf("\n %s is an keyword ",ident);
- }
- else
- {
- printf("\n %s is an identifier ",ident);
- }
- fseek(fp,-1,SEEK_CUR);//Move filepointer one step backwards
- }
- void digit(char ch)
- {
- char dig[10];
- int i=0;
- dig[i]=ch;
- do
- {
- ch=fgetc(fp);
- if((ch>=48 && ch<=57)||ch=='.')
- {
- ++i;
- dig[i]=ch;
- }
- else if(ch=='*'||ch=='+'||ch=='-'||ch=='/')
- {
- arithop();
- break;
- }
- else if(ch=='&'||ch=='|'||ch=='!')
- {
- logicop();
- break;
- }
- else if(ch==' '||ch==','||ch==';')
- {
- delimiter();
- break;
- }
- }while(1);
- ++i;
- dig[i]='\0';
- printf(" \n %s is an number ",dig);
- }
- void arithop()
- {
- arith++;
- }
- void logicop()
- {
- logic++;
- }
- void delimiter()
- {
- del++;
- }
- int iskey(char str[10])
- {
- char ch;
- int i=0;
- while(1)
- {
- ch=str[i];
- if(ch=='i')
- {
- ++i;
- ch=str[i];
- if(ch=='n')
- {
- ++i;
- ch=str[i];
- if(ch=='t')
- {
- return 1;
- }
- }
- else if(ch=='f')
- {
- return 1;
- }
- }
- else if(ch=='c')
- {
- ++i;
- ch=str[i];
- if(ch=='h')
- {
- ++i;
- ch=str[i];
- if(ch=='a')
- {
- ++i;
- ch=str[i];
- if(ch=='r')
- {
- return 1;
- }
- }
- }
- }
- else if(ch=='f')
- {
- ++i;
- ch=str[i];
- if(ch=='l')
- {
- ++i;
- ch=str[i];
- if(ch=='o')
- {
- ++i;
- ch=str[i];
- if(ch=='a')
- {
- ++i;
- ch=str[i];
- if(ch=='t')
- {
- return 1;
- }
- }
- }
- }
- }
- else if(ch=='e')
- {
- ++i;
- ch=str[i];
- if(ch=='l')
- {
- ++i;
- ch=str[i];
- if(ch=='s')
- {
- ++i;
- ch=str[i];
- if(ch=='e')
- {
- return 1;
- }
- }
- }
- else if(ch=='n')
- {
- ++i;
- ch=str[i];
- if(ch=='d')
- {
- return 1;
- }
- }
- }
- else if(ch=='b')
- {
- ++i;
- ch=str[i];
- if(ch=='e')
- {
- ++i;
- ch=str[i];
- if(ch=='g')
- {
- ++i;
- ch=str[i];
- if(ch=='i')
- {
- ++i;
- ch=str[i];
- if(ch=='n')
- {
- return 1;
- }
- }
- }
- }
- }
- break;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement