⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cifa.txt

📁 词法分析程序给那些迷茫在词法分析海洋的人们
💻 TXT
字号:
            #include "safx.h"
            #include <sio.h>
            #include <slib.h>
            #include <sing.h>
            #include <ctype.h>
            #include <malloc.h>
            #include <ctype.h>
            #include <conio.h>
            #define NULL 0
            FILE *fp;
            char ch;
            char 
            *keyword[8]={"do","begin","else","end","if","then","var","while"};
            char *operatornum[4]={" ","-","*","/"};
            char *comparison[6]={"<","<=","=",">",">=","<>"};
            char *interpunction[6]={",",";",":=",".","(",")"};
            //////////////////////////////////////////////////////////////////////////////////////////
            bool search(char searchs[],int wordtype)
            {
            int i;
            switch (wordtype)
            {
            case 1:for(i=0;i<=7;i )
            {
            if(scmp(keyword[i],searchs)==0)
            return(ue);

            }
            case 2:{
            for(i=0;i<=3;i )
            {
            if(scmp(operatornum[i],searchs)==0)
            return(ue);
            }
            break;
            }
            case 3: for(i=0;i<=5;i )
            {
            if(scmp(comparison[i],searchs)==0)
            return(ue);
            }
            case 4: for(i=0;i<=5;i )
            {
            if(scmp(interpunction[i],searchs)==0)
            return(ue);
            }


            }
            return(false);
            }

            ///////////////////////////////////////////////////////////////////////////////////////////
            char letterprocess (char ch)//字母处理函数
            {
            int i=-1;
            char letter[20];
            while (isalnum(ch)!=0)
            {
            letter[ i]=ch;
            ch=fgetc(fp);
            };
            letter[i 1]='\0';
            if (search(letter,1))
            {
            printf("<%s,->\n",letter);
            //scat(letter,"\n");
            //fputs('<' letter '>\n',outp);
            }
            else
            {
            printf("<indentifier,%s>\n",letter);
            //scat(letter,"\n");
            //fputs(letter,outp);
            }
            return(ch);
            }
            ///////////////////////////////////////////////////////////////////////////////////////////
            char numberprocess(char ch)//数字处理程序
            {
            int i=-1;
            char num[20];
            while (isdigit(ch)!=0)
            {
            num[ i]=ch;
            ch=fgetc(fp);
            }
            if(isalpha(ch)!=0)
            {
            while(isspace(ch)==0)
            {
            num[ i]=ch;
            ch=fgetc(fp);
            }
            num[i 1]='\0';
            printf("错误!非法标识符:%s\n",num);
            goto u;
            }
            num[i 1]='\0';
            printf("<num,%s>\n",num);
            //scat(num,"\n");
            //fputs(num,outp);
            u: return(ch);
            }
            //////////////////////////////////////////////////////////////////////////////////////////////
            char otherprocess(char ch)
            {
            int i=-1;
            char other[20];
            if (isspace(ch)!=0)
            {
            ch=fgetc(fp);
            goto u;
            }
            while ((isspace(ch)==0)&&(isalnum(ch)==0))
            {
            other[ i]=ch;
            ch=fgetc(fp);
            }
            other[i 1]='\0';
            if (search(other,2))
            printf("<relop,%s>\n",other);
            else
            if (search(other,3))
            printf("<%s,->\n",other);
            else
            if (search(other,4))
            printf("<%s,->\n",other);
            else 
            printf("错误!非法字符:%s\n",other);
            u: return (ch);
            }

            /////////////////////////////////////////////////////////////////////////////////////////////
            void main ()
            {
            char s,c;
            printf("**********************************词法分析器************************************\n");
            //outp=fopen("二元式表.txt","w");
            if ((fp=fopen("源程序.txt","r"))==NULL)
            printf("源程序无法打开!\n");
            else
            {
            s =fgetc(fp);
            while (s!=EOF)
            {
            if (isalpha(s)!=0)
            s=letterprocess(s);
            else
            {
            if (isdigit(s)!=0)
            s=numberprocess(s);
            else
            s=otherprocess(s);
            }

            };
            printf("词法分析结束,谢谢使用!\n");
            printf("点任意键退出!\n");
            }
            c=getch();
            }
           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -