资源简介

编译原理实验-词法分析<br>用C语言写的

资源截图

代码片段和文件信息

#include “stdio.h“
#include“string.h“
#include “stdlib.h“

FILE *fp;

char filename[20];
char token[100];
int m=0;


char getch()
{
     char ch;
ch=fgetc(fp);
return ch;
}


char getbc(char ch)
{
while(ch==‘ ‘) ch=getch(); 
     return ch;
}


 void concat(char ch)
{
  token[m]=ch;
}


int letter(char ch)
{ if (ch>=‘A‘&&ch<=‘Z‘) return 1;
else if(ch>=‘a‘&&ch<=‘z‘) return 1;

else return 0;
}


int digit(char ch)
{
    if(ch>=‘0‘&&ch<=‘9‘) return 1;
else return 0;
}

int reserve()

{   int g;
    if(  strcmp(token“begin“)==0)  g=1;
else if(  strcmp(token“end“)==0)   g=2;
    else if(  strcmp(token“if“)==0)   g=3;
    else if(  strcmp(token“then“)==0)   g=4;
    else if(  strcmp(token“else“)==0)   g=5;
    else if(  strcmp(token“while“)==0)   g=6;
    else if(  strcmp(token“do“)==0)   g=7;
else g=10;
return g;
}

void dtb()//十进制转换函数
{
int ij=0n=0a=0b[100];
n=0;
for(i=0;token[i]!=‘\0‘;i++)
{
a=a*10+((int)token[i]-48);
}

while(a!=0)
{
n=a%2;
b[j]=n;

j++;
a=a/2;

}

for(i=j-1;i>=0;i--)
printf(“%d“b[i]);

}



void scaner(char ch)
{ int c;
  if(ch!=EOF)
  { ch=getbc(ch);
if(letter(ch))
{
while(letter(ch)||digit(ch))
{
concat(ch);
m++;
ch=getch();
}
c=reserve();
if(c!=10) printf(“%d      %s\n“ctoken);
else printf(“10     %s\n“token);
}
else if(digit(ch))
{
while(digit(ch))
{
            concat(ch);
m++;
ch=getch();
}
printf(“11     “);
dtb();
printf(“\n“);
}
else
switch(ch)
{
case‘+‘: printf(“13     +\n“);break;
        case‘-‘: printf(“14     -\n“);break;
        case‘*‘:printf(“15     *\n“);break;
        case‘/‘:printf(“16     /\n“);break;
case‘<‘:ch=getch();
if(ch==‘=‘)  printf(“17     <=\n“);
else if (ch==‘>‘) printf(“18     <>\n“);
else printf(“19     <\n“);
break;
case‘:‘:ch=getch();
            if(ch==‘=‘)  printf(“22     :=\n“);         
            else printf(“21     :\n“);
            break;
case‘;‘: printf(“23     ;\n“); break;
default: printf(“error  %c\n“ch);
break;
}
  }
}

 void main()
{char ch;int l;
printf(“input filename:“);
scanf(“%s“filename);
fp=fopen(filename“r+“);
  do

for(l=m;l>=0;l--)
{
token[l]=‘\0‘;
}
m=0;
      ch=fgetc(fp);
   scaner(ch);
}while(ch!=EOF);
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         64  2008-04-15 15:30  编译原理\a.txt

     文件       2431  2008-04-15 15:28  编译原理\词法分析.cpp

     目录          0  2008-04-15 22:36  编译原理

----------- ---------  ---------- -----  ----

                 2495                    3


评论

共有 条评论