• 大小: 36KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-07-04
  • 语言: C/C++
  • 标签: C语言  

资源简介

通过C语言编写一个词法分析器完成输入是字符串(或源程序文本文件),输出是源程序中各单词的字符串、起止位置、词的类别。附带实验报告。

资源截图

代码片段和文件信息

#include   
#include   
  
char prog[80]token[8]ch;  
int synpmnsum;  
char *rwtab[6]={“main““if““else““int““return““void“};  
   
void scaner(void);  
  
main()  
{  
    p=0;  
    printf(“\n please input a string(end with ‘#‘):\n“);  
      
    do{  
            scanf(“%c“&ch);  
            prog[p++]=ch;  
    }while(ch!=‘#‘);  
      
    p=0;  
    do{  
            scaner();  
            switch(syn)  
            {  
                case 11:  
                    printf(“( %-10d%5d )\n“sumsyn);  
                break;  
                  
                case -1:  
                    printf(“you have input a wrong string\n“);  
                    //getch();  
                    return 0;  
                break;  
                  
                default:   
                printf(“( %-10s%5d )\n“tokensyn);  
                break;  
            }  
        }while(syn!=0);  
    //getch();  
 }  
  
void scaner(void)  
{    
    sum=0;  
      
    for(m=0;m<8;m++)  
        token[m++]= NULL;  
      
        ch=prog[p++];  
        m=0;  
          
    while((ch==‘ ‘)||(ch==‘\n‘))  
        ch=prog[p++];  
      
    if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))  
     {   
        while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))  
        {  
            token[m++]=ch;  
            ch=prog[p++];  
        }  
          
        p--;  
        syn=10;  
  
        for(n=0;n<7;n++)  
        if(strcmp(tokenrwtab[n])==0)  
        {   
            syn=n+1;  
            break;  
        }  
     }  
     else if((ch>=‘0‘)&&(ch<=‘9‘))  
     {   
        while((ch>=‘0‘)&&(ch<=‘9‘))  
        {  
            sum=sum*10+ch-‘0‘;  
            ch=prog[p++];  
        }  
        p--;  
        syn=11;  
    }  
    else   
    {  
        switch(ch)  
        {  
        case ‘<‘:  
            token[m++]=ch;  
            ch=prog[p++];  
            if(ch==‘=‘)  
            {   
                syn=20;  
                token[m++]=ch;  
            }  
            else  
            {    
                syn=18;  
                p--;  
            }  
        break;  
  
        case ‘>‘:  
            token[m++]=ch;  
            ch=prog[p++];  
            if(ch==‘=‘)  
            {  
                syn=22;  
                token[m++]=ch;  
            }  
            else  
            {   
                syn=21;  
                p--;  
            }  
        break;  
  
        case ‘+‘:  
            token[m++]=ch;  
            ch=prog[p++];  
            if(ch==‘+‘)  
            {  
                syn=34;  
                token[m++]=ch;  
            }  
            else  
            {  
                syn=14;  
                p--;  
            }  
        break;  
  
        case ‘-‘:  
            token[m++]=ch;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-17 16:11  词法分析\
     文件        5179  2017-04-17 16:10  词法分析\具体代码.c
     文件       80896  2017-04-17 16:11  词法分析\词法分析实训报告.doc

评论

共有 条评论