• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-16
  • 语言: 其他
  • 标签: token字  词法分析  

资源简介

一个简单的词法分析器,从文件中读入源程序,分析后的结果存入文件token.txt中。不完善的地方敬请指正。。谢谢

资源截图

代码片段和文件信息

#include
#include
#include
#define MAX_CODE 1000
#define MAX_SYMBOL 32
int ijksignnumberflag;/*把类号内码等定义成全局变量*/

char ch;
int line;           
char words[MAX_SYMBOL]={“ “};/*定义一个符号表*/
char program[MAX_CODE]; //用于保存源程序的字符数组   
int scan(char program[])       /*扫描器*/
{                      /*定义程序可以处理的关键字*/
    char*keywords[]={“auto““break““case““char““const““continue“
“default““do““double““else“ “enum““extern““float““for“
“goto“ “if““int““long““register““return““short““signed“
“sizeof““static““struct““switch““typedef““union““unsigned“
“void“ “volatile““while“
};
    number=0; flag=0; j=0; ch=program[i++]; 
/*处理空格与制表符回车*/
    while((ch==‘ ‘)||(ch==‘\n‘)||(ch== ‘\t‘)||(ch==‘\r‘))
{
if(ch==‘\n‘)
line++;
ch=program[i++];
}
/*处理字母*/
    if((ch>=‘a‘)&&(ch<=‘z‘)||(ch>=‘A‘)&&(ch<=‘Z‘)||ch==‘_‘)
{
        while(((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘A‘)&&(ch<=‘Z‘))||((ch>=‘0‘)&&(ch<=‘9‘))||ch==‘_‘)
{
words[j++]=ch;
ch=program[i++];
}
words[j++]=‘\0‘;
for(k=0;k<32;k++)
if(strcmp(wordskeywords[k])==0)
switch(k)                        //处理相应的字母并生成相应的类号或内码并加到符号表中
{
                    case 0:
sign=1;flag=1;break;     //设置类号与内码的值在下面的程序中用
case 1:
sign=2;flag=1;break;
case 2:
sign=3;flag=1;break;
case 3:
sign=4;flag=1;break;
case 4:
sign=5;flag=1;break;
case 5:
sign=6;flag=1;break;
case 6:
sign=7;flag=1;break;
case 7:
sign=8;flag=1;break;
case 8:
sign=9;flag=1;break;
case 9:
sign=10;flag=1;break;
case 10:
sign=11;flag=1;break;
case 11:
sign=12;flag=1;break;
case 12:
sign=13;flag=1;break;
case 13:
sign=14;flag=1;break;
case 14:
sign=15;flag=1;break;
case 15:
sign=16;flag=1;break;
case 16:
sign=17;flag=1;break;
case 17:
sign=18;flag=1;break;
case 18:
sign=19;flag=1;break;
case 19:
sign=20;flag=1;break;
case 20:
sign=21;flag=1;break;
case 21:
sign=22;flag=1;break;
case 22:
sign=23;flag=1;break;
case 23:
sign=24;flag=1;break;
case 24:
sign=25;flag=1;break;
case 25:
sign=26;flag=1;break;
case 26:
sign=27;flag=1;break;
case 28:
sign=29;flag=1;break;
case 29:
sign=30;flag=1;break;
case 30:
sign=31;flag=1;break;
case 31:
sign=32;flag=1;break;
}
if (flag==0)
{
i--;sign=100;
}
}
/*处理常数*/
else if((ch>=‘0‘)&&(ch<=‘9‘))
{
number=0;
sign = -1;
while((ch>=‘0‘)&&(ch<=‘9‘))
{
number=number*10+(ch-‘0‘);
ch=program[i++];        //把识别出的常数并加到符号表中
}
if(((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘A‘)&&(ch<=‘Z‘))||ch==‘_‘)
{
sign=-1;
do{                                   //酌情处理
ch=program[i++];        

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

     文件       9186  2008-03-12 21:46  词法分析器.cpp

     文件       1571  2008-03-13 13:19  token.txt

     文件        150  2008-03-12 21:01  a.txt

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

                10907                    3


评论

共有 条评论