• 大小: 55KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-26
  • 语言: C/C++
  • 标签: 语法分析  

资源简介

实验2. 语法分析实验报告 一、 实验目的 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。 二、 实验内容 利用C语言编制递归下降分析程序,并对简单语言进行语法分析。 1、 待分析的简单语言的语法 用扩充的BNF表示如下: (1)::=beginend (2)::={;} (3)::= (4)::=ID:= (5)::={+|-} (6)::={*|/} (7)::=ID| NUM|() 2、实验要求说明 输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。

资源截图

代码片段和文件信息

#include
#include
#include

char prog[80]token[8];
char ch;
int synpm=0nsum=0kk; //p是缓冲区prog的指针,m是token的指针
char *rwtab[6]={“begin““if““then““while““do““end“};

void scaner();
void factor();
void term();
void expression();
void statement();


void scaner()
{
    for(n=0;n<8;n++) token[n]=NULL;
    ch=prog[p++];

    while(ch==‘ ‘)
        ch=prog[p++];

    if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))
    {
        m=0;
        while((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘))
        {
            token[m++]=ch;
            ch=prog[p++];
        }

        token[m++]=‘\0‘;
        p--;
        syn=10;

        for(n=0;n<6;n++)
            if(strcmp(tokenrwtab[n])==0)
            {
                syn=n+1;
                break;
            }
    }
    else
    if((ch>=‘0‘&&ch<=‘9‘))
    {
        sum=0;
        while((ch>=‘0‘&&ch<=‘9‘))
        {
            sum=sum*10+ch-‘0‘;
            ch=prog[p++];
        }

        p--;
        syn=11;

        if(sum>32767)
            syn=-1;

    }
    else
    switch(ch)
    {
        case‘<‘:m=0;
                token[m++]=ch;
                ch=prog[p++];

                if(ch==‘>‘)
                {
                    syn=21;
                    token[m++]=ch;
                }
                else if(ch==‘=‘)
                {
                    syn=22;
                    token[m++]=ch;
                }
                else
                {
                    syn=23; p--;
                }

            break;

        case‘>‘:m=0;
                token[m++]=ch;
                ch=prog[p++];

                if(ch==‘=‘)
                {
                    syn=24;
                    token[m++]=ch;
                }
                else
                {
                    syn=20;
                    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;

        case‘\n‘:syn=-2;break;

        default: syn=-1;break;
    }
}

void factor()  //factor()函数
{
    if(syn==10||syn==11)
        scaner(); //为标识符或整常数时,读下一个单词符号
    else if(syn==27)
    {
        scaner();
        expression();
  

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

     文件       4809  2009-06-02 13:27  实验2.语法分析\yufa.c

     文件      13732  2009-06-02 13:26  实验2.语法分析\YUFA.EXE

     文件        734  2009-11-10 18:49  实验2.语法分析\yufa.plg

     文件      72704  2009-11-13 16:19  实验2.语法分析\实验2.语法分析实验报告.doc

     文件     657270  2009-05-26 17:44  实验2.语法分析\语法分析结果验证1.JPG

     文件      19332  2009-05-26 17:48  实验2.语法分析\语法分析结果验证2.JPG

     文件     657270  2009-05-26 17:50  实验2.语法分析\语法分析结果验证3.JPG

     目录          0  2009-11-13 16:19  实验2.语法分析

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

              1425851                    8


评论

共有 条评论