资源简介

递归下降语法分析程序的范例代码...实验内容及操作示范详见实验指导书...

资源截图

代码片段和文件信息

#include “stdio.h“
#include “string.h“
#include “stdlib.h“
#include “conio.h“
/*关键字表每个关键字的种别码为其下标值+1*/
char *keywords[33]=
{“and““array““begin““bool““call““case““char““constant““do““else““end““false“
“for““if““input““integer““not““of““or““output““procedure““program““read“
“real“ “repeat““set““then““to““true““until““var““while““write“  };
/*运算符与界符表,每个符号的种别码为其下标值+38*/
char *opts[]=
{“‘““(““)““*““+““““-““/““:““:=““;““<““<=““<>““=““>““>=““[““]“};
/*标识符种别码*/
#define identsys 34  
/*整型常量种别码*/
#define intcontsys 35
/*实型常量种别码*/
#define realcontsys 36
/*字符常量种别码*/
#define charconsys 37
typedef struct
{ char name[20];
   int  kind;
   int  type;
} idtype; /*标识符表的元素类型*/
typedef struct
{ idtype idwords[200];
  int len;
} idTtype;/*标识符表类型*/
idTtype idtable; /*定义标识符表*/
typedef struct
{ int intcons[200];
  int len;
} intconTtype; /*整型常量表类型*/
intconTtype intcontable; /*定义整型常量表*/
/*实型常量表略*/
typedef struct
{char charcons[200];
 int len;
} charconTtype; /*字符常量表类型*/
charconTtype charcontable; /*定义字符常量表*/
typedef struct
{  int kind;
   int entry;
}tokentype; /*Token字类型*/
tokentype tokens[100];/*Token字表*/

void wordcat(char *wordchar ch) /*单词连接函数,将字符ch连接在word之后*/
{ char *s=word;
   while(*s) s++;
   *s=ch;*(++s)=‘\0‘;
}
void clearword(char *word) /*将word清空*/
{ *word=‘\0‘;}
int iskeyword(char *word) /*判断单词word是否为保留字,若是返回其种别码,否则返回0*/
{  int i;
   for(i=0;i<=30;i++)
      if (strcmp(wordkeywords[i])==0) return i+1;
   return 0;
}
int operater(char *word) /*判断单词word是否为操作符,若是返回其种别码,否则返回0*/
{ int i;
   for(i=0; i<21; i++)
   if(strcmp(wordopts[i])==0) return i+38;
   return 0;
}
int lookupid(char *word)  /*查填标识符表*/
{  int i;
   for(i=0;i   if(strcmp(wordidtable.idwords[i].name)==0) return i;
   strcpy(idtable.idwords[idtable.len].nameword);
   return (idtable.len)++;
}
void scanner(FILE *fp1)
{ int len=0;  /*Token字表初始为空*/
int kindentry;
  char word[30]=““chch1;
  idtable.len=0;
  intcontable.len=0;
  charcontable.len=0;
  ch=fgetc(fp1);
  while(ch!=EOF)
  {   while(ch==‘ ‘||ch==‘\n‘) ch=fgetc(fp1);/*滤除空格或回车符*/
      if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘) /*处理标识符与保留字*/
      {  wordcat(wordch); ch=fgetc(fp1);
     while(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘||ch>=‘0‘&&ch<=‘9‘)
     {  wordcat(wordch); ch=fgetc(fp1);  }
     kind=iskeyword(word); 
     if(kind) /*为保留字*/
       { tokens[len].kind=kind; tokens[len].entry=0;len++;}
     else{ entry=lookupid(word); tokens[len].kind=identsys;
tokens[len].entry=entry;len++;}
     clearword(word);
        }
       else if(ch==‘:‘) /*处理界限符“:“与操作符“:=“*/
       {  wordcat(wordch);
          ch=fgetc(fp1); 
          if(ch!=‘=‘) 
{ kind=operater(word); tokens[len].kind=kind;
tokens[len].entry=0;  len++; }
          else { wordcat(wordch); kind=operater(word); tokens[len].kind=kind;
len++;tokens[len].entry=0; ch=fgetc(fp1); }
          clearword(word);
 

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

     文件     168010  2001-01-08 02:26  Recursive descent parser\Debug\text2.exe

     文件     206916  2001-01-08 02:26  Recursive descent parser\Debug\text2.ilk

     文件      34003  2001-01-08 02:26  Recursive descent parser\Debug\text2.obj

     文件     224512  2001-01-08 02:26  Recursive descent parser\Debug\text2.pch

     文件     459776  2001-01-08 02:26  Recursive descent parser\Debug\text2.pdb

     文件      33792  2001-01-08 02:26  Recursive descent parser\Debug\vc60.idb

     文件      53248  2001-01-08 02:26  Recursive descent parser\Debug\vc60.pdb

     文件        243  2001-01-08 02:21  Recursive descent parser\pro2.txt

     文件       9997  2001-01-08 02:22  Recursive descent parser\text2.cpp

     文件       3389  2001-01-08 02:26  Recursive descent parser\text2.dsp

     文件        535  2001-01-08 02:38  Recursive descent parser\text2.dsw

     文件      41984  2001-01-08 02:38  Recursive descent parser\text2.ncb

     文件      48640  2001-01-08 02:38  Recursive descent parser\text2.opt

     文件       1123  2001-01-08 02:26  Recursive descent parser\text2.plg

     文件       9997  2001-01-08 02:19  Recursive descent parser\text2.txt

     目录          0  2001-01-08 02:13  Recursive descent parser\Debug

     目录          0  2001-01-08 02:13  Recursive descent parser

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

              1296165                    17


评论

共有 条评论