zoukankan      html  css  js  c++  java
  • 文法

    一、        实验目的

     

          编制一个语法分析程序,实现对词法分析程序所列出的单词序列进行语法检查和分析。

     

    二、        实验内容和要求

         实验内容:做一个可以对以下语法的分析程序

                  Ssd|a

                  Hsf-|&

                  Kf+Dg|&

                  Mf|*LM

                  &(空串);

     实验要求:在上机(一)词法分析的基础上,采用递归子程序法或其他适合的语法分析方法,实现其语法分析程序。要求编译后能检查出语法错误。

     

    1. 3.      主要程序段及其解释:

    #include<stdio.h>

    #include<string.h>

    char prog[800],token[20];

    char ch;

    int syn,p,m,n,sum;

    char *rwtab[6]={"begin","if","then","while","do","end"};

    main()

    {

        p=0;

        printf(" Please input the source code: ");

        do

        {

            ch= getchar();

            prog[p++]=ch;

     

        }while(ch='#');

        p=0;

        do

        {

            scaner();

            switch(syn)

            {

                case 11: printf(" (%d,%d)",syn,sum);break;

                case -1: printf(" (%s, )",token);break;

                default: printf(" (%d,%s)",syn,token);

            }

        }while(syn!=0);

        printf("   Token Over. ");

     system("pause");

     

     p=0;

     scaner();

     E();

     if(syn==0)

        printf(" Syntax success. ");

     else printf("   Syntax fall.  ");

    }

    scaner()

    {

        for(n=0;n<20;n++)  token[n]=NULL;

        m=0;

        sum=0;

        ch=prog[p++];

        while(ch=' ')

        {

            ch=prog[p++];

            if(ch>='a'&&ch<='z')

            {

                while(ch>='a'&&ch<='z'||ch>='0'&&ch<='9')

                {

                    token[m++]=ch;

                    ch=prog[p++];

                }

                syn=10;p--;

                for(n=0;n<6;n++)

                    if(strcmp(token,rwtab[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++];

                    }syn=11;p--;

                }

                else

                    switch(ch)

                    {

                        case'<':token[m++]=ch;

                                ch=prog[p++];

                                if(ch=='>')

                                {

                                    syn=21;token[m++]=ch;

                                }

                                else if(ch='=')

                                {

                                    syn=22;token[m++]=ch;

                                }

                                else

                                {

                                    sum=20;p--;

                                }

                                break;

                        case'>':m=0;token[m++]=ch;

                                ch=prog[p++];

                                if(ch=='=')

                                {

                                    syn=24;token[m++]=ch;

                                }

                                else

                                {

                                    syn=23;p--;

                                }

                                break;

                        case':':m=0;token[m++]=ch;

                                ch=prog[p++];

                                if(ch=='=')

                                {

                                    syn=18;token[m++]=ch;

                                }

                                else

                                {

                                    syn=17;p--;

                                }

                                break;

                        case'+':syn=13;token[0]=ch;break;

                        case'-':syn=14;token[0]=ch;break;

                        case'*':syn=15;token[0]=ch;break;

                        case'/':syn=16;token[0]=ch;break;

                        case'=':syn=25;token[0]=ch;break;

                        case';':syn=26;token[0]=ch;break;

                        case'(':syn=27;token[0]=ch;break;

                        case')':syn=28;token[0]=ch;break;

                        case'#':syn=0;token[0]=ch;break;

                        default:syn=-1;token[0]=ch;

                    }

        }

        E()

        {

            printf("E ");

            T();

            E1();

        }

        E1()

        {

            printf("E1");

            if(syn==13)

            {

                scaner();

                T();

                E1();

            }

            else

            {

                if(syn!=28&&syn!=0)error();

            }

        }

        T()

        {

            printf("T");

            F();

            T1();

        }

        T1()

        {

            printf{"T1"};

            if(syn==15)

            {

                scaner();

                F();

                T1();

            }

            else

            {

                if(syn!=28&&syn!=13)error();

            }

        }

        F()

        {

            printf("F");

            if(syn==27)

            {

                scaner();

                E();

                if(syn==28)scaner();

                else error();

            }

            else if(syn==11||syn==10) scaner();

        }

        error()

        {

            printf(" (%d,%s)Syntax Error! ",syn,token);

        }

     

     

    四、        实验总结

     

    首先,要明白实验的目的,这个可以让我们了解什么是LL1语法;其次,要写出分析表然后写出实验输出的分析过程;接着写代码;最后显示实验结果。

     

  • 相关阅读:
    Vue blur事件优先级高于click事件
    常用的正则表达式
    vue-socket.io 3.0.9 的最新版本不能用
    nvm
    Webpack4:Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
    Echart 挪动滑块时,前端根据起始日期重新计算数据,造成了数据渲染错误
    Ant Design table 排序 ,点击头部只有升序和降序
    雷达图 点击事件
    修改远程仓库地址
    vue.cli发布不同的环境
  • 原文地址:https://www.cnblogs.com/qq2647409627/p/6188595.html
Copyright © 2011-2022 走看看