实验三、 递归下降分析程序实验

实验 递归下降分析程序实验

专业 软件工程   姓名 麦振澎 学号 201506110162

一、        实验目的

 

        通过设计,编制,调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构的分析。

二、        实验内容和要求

输入:源程序字符串

输出:正确或者错误

三、        实验方法、步骤及结果测试

     

      1.      源程序名: 递归下降语法分析程序.c

      2.      原理分析及流程图

       这里的存储结构主要是用数组来存储字符串。

       采用递归子程序方法进行语法分析,对文法中的每个非终结符号按其产生式结构产生相应的语法分析子程序,完成相应的识别任务。本程序是以算术表达式的识别为例。鉴定语法是否合法。

代码如下:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
char s[10];
int x=0;
void A();
void B();
void C();
void D();
void E();

int main()
{
    int len;
    printf("请输入算术表达式:(以#为结束)\n");
    scanf("%s",s);
    len=strlen(s);
    s[len]=‘#‘;
    s[len+1]=‘\0‘;
    A();
    printf("True!\n");
    strcpy(s,"");
    x=0;
    return 0;
}

void A()
{
    C();
    B();
}

void B()
{
    if(s[x]==‘+‘||s[x]==‘-‘)
    {
        x++;
        C();
        B();
    }
}

void C()
{
    E();
    D();
}

void D()
{
    if(s[x]==‘*‘||s[x]==‘/‘)
    {
        x++;
        E();
        D();
    }
}

void E()
{
    if(s[x]>=‘a‘&&s[x]<=‘z‘)
    {
        x++;
    }
    else if(s[x]>=0&&s[x]<=9)
    {
        x++;
    }
    else if (s[x]==‘(‘)
    {
        x++;
        A();
        if(s[x]==‘)‘)
        {
            x++;
        }
        else
        {
            printf("Error!\n");
            exit(0);
        }
    }
    else
    {
        printf("Error!\n");
        exit(0);
    }
}

运行截图:

时间: 2024-10-02 20:47:00

实验三、 递归下降分析程序实验的相关文章

实验三 递归下降分析程序实验

一.        实验目的      编制一个递归下降分析程序. 二.        实验内容和要求 输入:正规式 输出:判断该正规式是否正确. 三.        实验方法.步骤及结果测试    1.    源程序名:递归下降分析程序.c 可执行程序名:递归下降分析程序.exe   2. 3.主要程序段及其解释: #include<stdio.h> #include<string> char str[50]; int index=0; void E(); //E->TX;

实验三 递归下降分析法

实验三递归下降分析程序实验 专业 商软2班   姓名 蓝海鹏  学号 201506110171 一.        实验目的      编制一个使用递归下降分析法实现的语法分析程序. 二.        实验内容和要求 输入:正规式 输出:判断该正规式是否正确. 三.        实验方法.步骤及结果测试 1.      源程序名:171-蓝海鹏.c 可执行程序名:171蓝海鹏.exe 2.      原理分析及流程图 3.      主要程序段: 1 #include<stdio.h> 2

实验三、 递归下降分析程序实验

一.        实验目的     练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解:提高语法分析方法的实践能力 二.        实验内容和要求 对于给定的文法G[E]               E->TE'              E'->+TE' | ε             T->FT'             T'->*F T'| ε             F->(E) | i 采用递归下降语法分析法编写语法分析程序,该

软件构造实验三-递归下降分析分析法

[实验目的] (1)掌握自上而下语法分析的要求与特点. (2)掌握递归下降语法分析的基本原理和方法. (3)掌握相应数据结构的设计方法. [实验内容] 用递归下降法编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子. [实验要求] 对下列文法,用递归下降分析法对任意输入的符号串进行分析: E->TG    G->+TG|-TG   G->ε T->FS    S->*FS|/FS    S->ε F->(E)

递归下降分析程序报告

实验一.递归下降分析程序实验 专业 商业软件工程   姓名 姓名 学号 201506110148 一.        实验目的   编译递归下降分析程序识别c语言文法 二.        实验内容和要求 简单写出c语言文法 分析c语言文法是否为LL1文法,若不是,修改成LL1文法. 编写程序实现对c语言LL1文法判断是否有语法错误 三.        实验方法.步骤及结果测试  1.      源程序名:递归下降分析程序 源程序名递归下降分析程序.c 可执行程序名:递归下降分析程序.exe 2.

递归下降分析程序

一.      实验目的 编制一个递归下降分析程序 LL(1)文法: E->TE1 E1->+TE1|-TE1|∑ T->FT1; T1->*FT1|/FT1|∑ F->(E)|i|1 二.      实验内容和要求 输入:LL(1)文法 判断:每遇到一个终结符,则判断当前读入的单词符号是否与该终结符相匹配,若匹配,则继续读取下一个单词符号,若不匹配,则进行错误处理. 每遇到一个非终结符,则调用相应的分析子程序 一.      实验方法.步骤及结果测试   1.   源程序名

LL(1)文法的判断,递归下降分析程序

1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不是 LL(1)文法? 答: FIRST集: FIRST(Da) = {b, a } FIRST(?) = { ? } FIRST(aADC) = { a } FIRST(b) = { b } FOLLOW集: FOLLOW(A) = { c,b,a , # } FOLLOW(B) FOLLOW(D),FIRS

编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

一. 语法分析介绍 语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备.执行语法分析任务的程序叫语法分析程序或语法分析器. 二. 所实现的语义分析和代码生成程序能处理什么语句 (1)简单变量的声明语句 (2)表达式语句 (3)if语句. (4)while语句 (5)for语句 (6)write语句 (7)read语句 (8)do语句. (9)处理过程调用和返回 三.实验过程 ①用VC

构造递归下降分析程序

词法分析程序scaner( ),sym:error( ) 每个函数名是相应的非终结符,函数体是根据右部符号串的结构编写. 当遇到终结符时,则编写语句if(当前读入的符号==a)则读入下一个单词当遇到非终结符A时,则编写语句调用A( )当遇到规则A→ε时,则编写语句调用if(当前读入的符号? FOLLOW(A))error( ) 对于给定的文法G[E] : E→E+T|E-T|TT→T*F| T/F|FF→(E)|i 消除左递归后的文法是:E→TE' E'→+TE'|-TE'|∑ T→FT' T'