编译原理 - 语法分析

来源:互联网 发布:mac uvz文件 编辑:程序博客网 时间:2024/04/30 08:57

一、实验目的

加深对语法分析过程的理解。

二、实验平台

Windows + CodeBlocks

三、基础内容

递归下降分析

  • 对该文法进行 LL(1)判别,若不是 LL(1)文法,则进行等价变换。
  • 构造预测分析表。
  • ## ##构造递归下降分析程序。

四、文法

E->TE’E’->+TE’ | εT->FT’T’->*F T’| εF->(E) | i

五、源代码

#include<stdio.h>#include<string.h>char str[10];int index=0;void E();           //E->TX;void X();           //X->+TX | evoid T();           //T->FYvoid Y();           //Y->*FY | evoid F();           //F->(E) | iint main(){    int len;printf("请输入要识别的字符串(只能由i、+、-、*、/、(、)组成):");scanf("%s",str);    len=strlen(str);    str[len]='#';    str[len+1]='\0';    E();    printf("success!\n");    strcpy(str,"");    index=0;    return 0;}void F(){    if(str[index]=='i')    {        index++;    }    else if (str[index]=='(')    {        index++;        E();        if(str[index]==')')        {            index++;        }        else        {            printf("error!\n");            exit (0);        }    }    else    {        printf("error!\n");        exit(0);    }}void E(){    T();    X();}void X(){    if(str[index]=='+')    {        index++;        T();        X();    }}void T(){    F();    Y();}void Y(){    if(str[index]=='*')    {        index++;        F();        Y();    }}

六、运行

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

0 0