• 大小: 46KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-07-12
  • 语言: 其他
  • 标签:

资源简介

词法分析、分析预测表、LL(1)文法程序和流程图

资源截图

代码片段和文件信息

#include
#include
#include

void  main(void);
int reserver(char *);

void main(void)
{
 FILE *input*output;
 char ch*token=““;
 int i=0isReserver=0;
 int count=0;
 /*打开文件*/
 if((input=fopen(“input.txt““rt“))==NULL)
 { printf(“file open in readonly modebut an error generate!\n“);
  exit(0);
 }
 if((output=fopen(“output.txt““wt“))==NULL)
 {
  printf(“file open in new_create modebut an error generate!\n“);
  exit(0);
 }
 
 fprintf(output“%4s\t\%8s\t %-16s)\t%4s\n““位置““符号类型““识别符““长度“);
 ch=fgetc(input);
 while(ch!=EOF)
 {
  i=0;
  /*去掉前导空格换行符*/
  while((ch==‘ ‘||ch==‘\n‘||ch==‘\t‘)&&ch!=EOF)
   ch=fgetc(input);
  /*字母开头*/
  if(isalpha(ch))
  {
  while(isalpha(ch)||isdigit(ch))
   {
   token[i++]=ch;
   ch=fgetc(input);
   }

  token[i]=‘\0‘;
  isReserver=reserver(token);
  if(isReserver==1)
   {count++;fprintf(output“%4d\t(标识符\t\t%-16s)\t%4d\n“counttokeni);}
  else if(isReserver==0)
   {count++;fprintf(output“%4d\t(保留字\t\t%-16s)\t%4d\n“counttokeni);}
  else if(isReserver==2)
   {count++;fprintf(output“%4d\t(算符\t\t%-16s)\t%4d\n“counttokeni);}
  continue;   
  }
  /*识别数字*/
  else if(isdigit(ch))
   {
    while(isdigit(ch))
    {
    token[i++]=ch;
    ch=fgetc(input);
    }
   /*出现非数字且为点时*/   
   if (ch==‘.‘)
    {
    token[i++]=ch; /*将点加入*/
    ch=fgetc(input);/*读入下一个字符*/
    if (isdigit(ch))
     {
      while(isdigit(ch)) /*是数字时,收入,并将加一*/
      {
      token[i++]=ch;
      ch=fgetc(input);
      }
      /*如果是数字加点再加数字再出现字母时,就是错误*/
             if(isalpha(ch))
      {
       while(isdigit(ch)||isalpha(ch)||ch==‘.‘)
       {
        token[i++]=ch;
        ch=fgetc(input);
       }
       token[i]=‘\0‘;
       count++;fprintf(output“%4d\t(标识错误\t%-16s)\t%4d\n“counttokeni);
       continue; 
      }
      /*当出现结束符时,就收入为实数内*/
      else
      {
      token[i]=‘\0‘;
      count++;fprintf(output“%4d\t(实数\t\t%-16s)\t%4d\n“counttokeni);
      continue;
      }
     }
    }
   
   /*如果是字符则判断为标识错误*/
   else if(isalpha(ch))
    {
     while(isdigit(ch)||isalpha(ch)||ch==‘.‘)      
     {
     token[i++]=ch;
     ch=fgetc(input);
     }
     token[i]=‘\0‘;
     count++;fprintf(output“%4d\t(标识错误\t%-16s)\t%4d\n“token);
     continue; 
    }
   /*如果是单词段结束符时,就判断为常数*/  
   else
    {
     token[i]=‘\0‘;
     count++;fprintf(output“%4d\t(常数\t\t%-16s)\t%4d\n“counttokeni);
     continue;
    }
   }     
  else if(ch==‘(‘)
   {
    token[i++]=ch;
    ch=fgetc(input);
    token[i]=‘\0‘;
    count++;fprintf(output“%4d\t(右括号运算符\t%-16s)\t%4d\n“counttokeni);
    continue;
   }
  else if(ch==‘)‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output“%4d\t(左括号运算符\t%-16s)\t%4d\n“counttokeni);
   continue;
   }
  else if(ch==‘[‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output“%4d\t(右中括号运算符\t%

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

     文件        828  2009-10-14 17:27  编译原理0\analysis_table.txt

     文件         56  2009-10-14 17:06  编译原理0\chanshengshi.txt

     文件     175104  2007-07-08 19:27  编译原理0\编译原理实验指导书.doc

     文件       6875  2009-09-26 13:17  编译原理0\OUTPUT.TXT

     文件       9376  2009-09-26 13:16  编译原理0\shyan1.c

     文件        458  2009-09-26 13:12  编译原理0\input.txt

     文件        225  2009-09-26 13:05  编译原理0\keyword.txt

     文件      30148  2009-10-14 17:32  编译原理0\实验2预测分析表.cpp

     文件      77312  2007-04-09 14:36  编译原理0\词法分析程序流程图.doc

     目录          0  2006-03-09 22:20  编译原理0

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

               300382                    10


评论

共有 条评论

相关资源