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

📄 递归下降语法分析器.txt

📁 一个递归下降的语法分析器
💻 TXT
字号:

            递归下降语法分析器 
            /************************************/
            /* 程序名称: 递归下降语法分析器 */
            /* 程序用途: 编译原理实验(二) */
            /* 编写日期: 2005年11月1日  */
            /* 实验题目: 识别下列表达式  */
            /*    E->E+T|T   */
            /*    T->T*F|F   */
            /*    F->(E)|i   */
            /* 程序版本: 1.0 Final   */
            /************************************/
            #i nclude "stdio.h"
            #i nclude "malloc.h"

            void e();
            void f();
            void t();
            void t1();
            void e1();

            struct Lchar{
             char char_ch;
             struct Lchar *next;
            }Lchar,*p,*h,*temp;
            char ch;
            int right;

            void e(void)
            {
             t();
             e1();
            }

            void t(void)
            {
             f();
             t1();
            }

            void t1(void)
            {
             if(h->char_ch=='*')
             {
              h=h->next;
              f();
              t1();
             }
             else
              if(h->char_ch!='#'&&h->char_ch!=')'&&h->char_ch!='+')
               right=0;
            }

            void e1(void)
            {
             if(h->char_ch=='+')
             {
              h=h->next;
              t();
              e1();
             }
             else
              if(h->char_ch=='#'||h->char_ch==')')
               return;
              else
               right=0;
            }

            void f()
            {
             if(h->char_ch=='i')
              h=h->next;
             else
              if(h->char_ch=='(')
              {
               h=h->next;
               e();
               if(h->char_ch==')')
                h=h->next;
               else
                right=0;
              }
              else
               right=0;
            }

            void main(void)
            {
             right=1;
             h=malloc(sizeof(Lchar));
             h->next=NULL;
             p=h;
             do{
              ch=getch();
              putch(ch);
              if(ch=='i'||ch=='+'||ch=='*'||ch=='('||ch==')'||ch=='#')
              {
               temp=malloc(sizeof(Lchar));
               temp->next=NULL;
               temp->char_ch=ch;
               h->next=temp;
               h=h->next;
              }
              else
              {
               temp=p->next;
               printf("\nInput a wrong char!Input again:\n");
               for(;;)
               {    
                if (temp!=NULL)
                 printf("%c",temp->char_ch);      
                else
                 break;
                temp=temp->next;
               }
              }
             }while(ch!='#');
             p=p->next;
             h=p;
             e();
             if(h->char_ch=='#'&&right)
              printf("\nOK!\n");
             else
              printf("\nError!\n");
             getchar();
            }
             


       


     

⌨️ 快捷键说明

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