Pages

Showing posts with label Pengantar teknik Kompilasi. Show all posts
Showing posts with label Pengantar teknik Kompilasi. Show all posts

Wednesday, 24 April 2013

contoh Program analisis leksikal menggunakan turbo c++:




Input : 
#include
#include
#include
#include
#include
void keyword(char str[10])
{ if(strcmp("for",str)==0||strcmp("while",str)==0||strcmp("do",str)==0||
    strcmp("int",str)==0||strcmp("float",str)==0||strcmp("char",str)==0||
    strcmp("double",str)==0||strcmp("static",str)==0||strcmp("switch",str)==0||
    strcmp("case",str)==0)
    printf("\n%s adalah keyword",str);
    else
    printf("\n%s adalah identifier",str);
}
main()
                {
    FILE *f1,*f2,*f3;
    char c,str[10],st1[10];
    int num[100],lineno=0,tokenvalue=0,i=0,j=0,k=0;
    printf("\nEnter the c program\n");/*gets(st1);*/
    f1=fopen("input","w");
    while((c=getchar())!=EOF)
    putc(c,f1);
    fclose(f1);
    f1=fopen("input","r");
    f2=fopen("identifier","w");
    f3=fopen("specialchar","w");
    while((c=getc(f1))!=EOF)
    {
        if(isdigit(c))
        {
            tokenvalue=c-'0';
            c=getc(f1);
            while(isdigit(c))
            {
                tokenvalue*=10+c-'0';
                c=getc(f1);
            }
            num[i++]=tokenvalue;
            ungetc(c,f1);
        } else if(isalpha(c))
        {
            putc(c,f2);
            c=getc(f1);
            while(isdigit(c)||isalpha(c)||c=='_'||c=='$')
            {
                putc(c,f2);
                c=getc(f1);
            }
            putc(' ',f2);
            ungetc(c,f1);
        } else if(c==' '||c=='\t')
        printf(" ");
        else if(c=='\n')
        lineno++;
        else
        putc(c,f3);
    }
    fclose(f2);
    fclose(f3);
    fclose(f1);
    printf("\n Number dalam program : ");
    for(j=0;j
    printf("%d",num[j]);
    printf("\n");
    f2=fopen("identifier","r");
    k=0;
    printf("Identifier : ");
    while((c=getc(f2))!=EOF)
    {
        if(c!=' ')
        str[k++]=c;
        else
        {
            str[k]='\0';
            keyword(str);
            k=0;
        }
    }
    fclose(f2);
    f3=fopen("specialchar","r");
    printf("\n  Simbol dalam program : ");
    while((c=getc(f3))!=EOF)
    printf("%c",c);
    printf("\n");
    fclose(f3);
    printf("Baris dalam program : %d",lineno);
    getch();
    }
Output :
Description: D:\budi\sm6\kompilasi\1.png#include
#include
#include
#include
#include
void keyword(char str[10])
{ if(strcmp("for",str)==0||strcmp("while",str)==0||strcmp("do",str)==0||
    strcmp("int",str)==0||strcmp("float",str)==0||strcmp("char",str)==0||
    strcmp("double",str)==0||strcmp("static",str)==0||strcmp("switch",str)==0||
    strcmp("case",str)==0)
    printf("\n%s adalah keyword",str);
    else
    printf("\n%s adalah identifier",str);
}
main()
                {
    FILE *f1,*f2,*f3;
    char c,str[10],st1[10];
    int num[100],lineno=0,tokenvalue=0,i=0,j=0,k=0;
    printf("\nEnter the c program\n");/*gets(st1);*/
    f1=fopen("input","w");
    while((c=getchar())!=EOF)
    putc(c,f1);
    fclose(f1);
    f1=fopen("input","r");
    f2=fopen("identifier","w");
    f3=fopen("specialchar","w");
    while((c=getc(f1))!=EOF)
    {
        if(isdigit(c))
        {
            tokenvalue=c-'0';
            c=getc(f1);
            while(isdigit(c))
            {
                tokenvalue*=10+c-'0';
                c=getc(f1);
            }
            num[i++]=tokenvalue;
            ungetc(c,f1);
        } else if(isalpha(c))
        {
            putc(c,f2);
            c=getc(f1);
            while(isdigit(c)||isalpha(c)||c=='_'||c=='$')
            {
                putc(c,f2);
                c=getc(f1);
            }
            putc(' ',f2);
            ungetc(c,f1);
        } else if(c==' '||c=='\t')
        printf(" ");
        else if(c=='\n')
        lineno++;
        else
        putc(c,f3);
    }
    fclose(f2);
    fclose(f3);
    fclose(f1);
    printf("\n Number dalam program : ");
    for(j=0;j
    printf("%d",num[j]);
    printf("\n");
    f2=fopen("identifier","r");
    k=0;
    printf("Identifier : ");
    while((c=getc(f2))!=EOF)
    {
        if(c!=' ')
        str[k++]=c;
        else
        {
            str[k]='\0';
            keyword(str);
            k=0;
        }
    }
    fclose(f2);
    f3=fopen("specialchar","r");
    printf("\n  Simbol dalam program : ");
    while((c=getc(f3))!=EOF)
    printf("%c",c);
    printf("\n");
    fclose(f3);
    printf("Baris dalam program : %d",lineno);
    getch();
    }
Output :