编译原理-实验报告2-递归下降分析法


    计算机硬件实验室实验报告
    姓名

    学号

    班 级

    成 绩

    设备名称软件环境
    递降分析
    实验目:
    根某文法编制调试递降分析程序便意输入符号串进行分析次实验目加深递降分析法理解
    二实验求:
    列文法递降分析法意输入符号串进行分析:
    (1)E>TG
    (2)G>+TG|—TG
    (3)G>ε
    (4)T>FS
    (5)S>*FS|FS
    (6)S>ε
    (7)F>(E)
    (8)F>i
    输出格式:
    (1)递降分析程序编制:姓名学号班级
    (2)输入#结束符号串(包括+—*()i#):位置输入符号串例:i+i*i#
    (3)输出结果:i+i*i#合法符号串
    备注:输入符号串i+i*#求输出非法符号串
    注意:
    1表达式中允许运算符(+*)分割符(括号)字符i结束符#
    2果遇错误表达式应输出错误提示信息(该信息越详细越)
    三实验程:
    程序设计:
    1模块设计:程序分成合理模块(函数)模块做具体事情
    2写出(画出)设计方案:模块关系简图流程图全局变量函数接口等
    程序编写:
    1定义部分:定义常量变量数结构
    2初始化:文件输入符号串输入字符缓区中
    3利递降分析法非终结符编写函数函数中调文法开始符号函数
    四实验结果
    (1)程序流程图
    (2)运行结果
    示例程序:
    #include
    #include
    #include
    #include

    char a[50] b[50]d[500]e[10]
    char ch
    int n1i10flag1n5
    int E()
    int E1()
    int T()
    int G()
    int S()
    int F()
    void input()
    void input1()
    void output()
    void main() *递分析*
    {
    int fpj0
    char x
    d[0]'E'
    d[1]''
    d[2]'>'
    d[3]'T'
    d[4]'G'
    d[5]'#'
    printf(递降分析程序编制:武普泉20号1020562班\n)
    printf(输入#结束符号串(包括+ * ( ) i #长度50):)
    do{
    scanf(c&ch)
    a[j]ch
    j++
    }while(ch'#')
    n1j
    chb[0]a[0]
    printf(文法\t分析串\t\t\t分析字符\t\t剩余串\n)
    fE1()
    if(f0) return
    if (ch'#')
    { printf(accept\n)
    p0
    xd[p]
    {
    printf(cx)pp+1xd[p] *输出推导式*
    }
    while(a[p]'#')
    printf(ca[p++])
    printf(合法字符\n)
    }
    else {
    printf(error\n)
    j0
    while(a[j]'#')
    printf(ca[j++])
    printf(非法字符\n)
    printf(回车返回\n)
    getchar()getchar()
    return
    }
    printf(\n)
    printf(回车返回\n)
    getchar()
    getchar()
    }
    int E1()
    { int ft
    printf(E>TG\t)
    flag1
    input()
    input1()
    fT()
    if (f0) return(0)
    tG()
    if (t0) return(0)
    else return(1)
    }

    int E()
    { int ft
    printf(E>TG\t)
    e[0]'E'e[1]''e[2]'>'e[3]'T'e[4]'G'e[5]'#'
    output()
    flag1
    input()
    input1()
    fT()
    if (f0)
    return(0)
    tG()
    if (t0) return(0)
    else return(1)
    }
    int T()
    { int ft
    printf(T>FS\t)
    e[0]'T'e[1]''e[2]'>'e[3]'F'e[4]'S'e[5]'#'
    output()
    flag1
    input()
    input1()
    fF()
    if (f0)
    return(0)
    tS()
    if (t0) return(0)
    else return(1)
    }
    int G()
    {
    int f
    if(ch'+')
    {
    b[i1]ch
    printf(G>+TG\t)
    e[0]'G'e[1]''e[2]'>'e[3]'+'e[4]'T'e[5]'G'e[6]'#'
    output()
    flag0
    input()input1()
    cha[++i1]
    fT()
    if (f0)
    return(0)
    fG()
    if(f0)
    return 0
    else return 1
    }
    else if(ch'')
    {
    b[i1]ch
    printf(G>TG\t)
    e[0]'G'e[1]''e[2]'>'e[3]''e[4]'T'e[5]'G'e[6]'#'
    output()
    flag0
    input()input1()
    cha[++i1]
    fT()
    if (f0)
    {
    printf(Gd\nf)
    return(0)
    }
    fG()
    if(f0)
    return 0
    else return 1
    }
    else
    {
    printf(G>^\t)
    e[0]'G'e[1]''e[2]'>'e[3]'^'e[4]'#'
    output()
    flag1
    input()input1()
    return(1)
    }
    }

    int S()
    {
    int ft
    if(ch'*')
    {
    b[i1]ch
    printf(S>*FS\t)

    e[0]'S'e[1]''e[2]'>'e[3]'*'e[4]'F'e[5]'S'e[6]'#'
    output()
    flag0
    input()input1()
    cha[++i1]
    fF()
    if (f0)
    return(0)
    tS()
    if (t0)
    return(0)
    else return(1)}
    else if(ch'')
    {
    b[i1]ch
    printf(S>FS\t)

    e[0]'S'e[1]''e[2]'>'e[3]''e[4]'F'e[5]'S'e[6]'#'
    output()
    flag0
    input()input1()
    cha[++i1]
    fF()
    if (f0)
    return(0)
    tS()
    if (t0)
    return(0)
    else return(1)}
    else
    {
    printf(S>^\t)
    e[0]'S'e[1]''e[2]'>'e[3]'^'e[4]'#'
    output()
    flag1
    a[i1]ch
    input()input1()
    return(1)
    }
    }
    int F()
    { int fint j
    if(ch'(')
    {
    b[i1]ch
    printf(F>(E)\t)
    e[0]'F'e[1]''e[2]'>'e[3]'('e[4]'E'e[5]')'e[6]'#'
    output()
    flag0
    input()input1()
    cha[++i1]
    fE()
    if (f0) return(0)
    if(ch')')
    {
    b[i1]ch
    printf(F>(E)\t)

    flag0input()input1()
    cha[++i1]
    }
    else
    {
    printf(error\n)
    j0
    while(a[j]'#')
    printf(ca[j++])
    printf(非法字符\n)
    return(0)
    }
    }
    else if(ch'i')
    {
    b[i1]ch
    printf(F>i\t)
    e[0]'F'e[1]''e[2]'>'e[3]'i'e[4]'#'
    output()
    flag0input()input1()
    cha[++i1]
    }
    else {
    printf(error\n)
    j0
    while(a[j]'#')
    printf(ca[j++])
    printf(非法字符\n)
    return(0)
    }
    return(1)
    }
    void input()
    {
    int j0
    for (j printf(cb[j]) *输出分析串*
    printf(\t\t\t)
    printf(c\t\t\tch) *输出分析字符*
    }

    void input1()
    {
    int j
    for (ji1+1flagj printf(ca[j]) *输出剩余字符*
    printf(\n)
    }
    void output(){ *推导式计算*
    int mkjq
    int i0
    m0k0q0
    in
    d[n]''d[n+1]'>'d[n+2]'#'nn+2in
    ii2
    while(d[i]'>'&&i0) ii1
    ii+1
    while(d[i]e[0]) ii+1
    qi
    mqkq
    while(d[m]'>') mm1
    mm+1
    while(mq) {
    d[n]d[m]mm+1nn+1
    }
    d[n]'#'
    for(j3e[j]'#'j++){
    d[n]e[j]
    nn+1
    }
    kk+1
    while(d[k]'') {
    d[n]d[k]nn+1kk+1
    }
    d[n]'#'
    }


    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    编译原理实验报告LR(1)分析法

    河南工业大学实验报告课 程 编译原理 实验名称 实验四 LR(1)分析法 一. 实验目的 1.掌握LR(1)分析法的基本原理; 2.掌握LR(1)分析表的构...

    2年前   
    1044    0

    编译原理实验报告LL(1)分析法

    课 程 编译原理 实验名称 实验二 LL(1)分析法 实验目的 1.掌握LL(1)分析法的基本原理; 2.掌握LL(1)分析表的构造方法; 3.掌握LL(1...

    1年前   
    399    0

    《编译原理》课程实验报告

    《编译原理》课程实验报告题 目: 词法分析器实验 专 业: 计算机科学与技术 班 级: 1班 学 号: ...

    3年前   
    627    0

    编译原理语法分析实验报告

    编译原理语法分析实验报告软工班一、 实验内容二、 实验目的三、 实验要求四、 程序流程图l 主函数;l scanner();l irparser()函数l yucu() /*语句串分析*/l...

    2年前   
    940    0

    实验2.正规式的定义与应用 编译原理实验报告

    实验2. 正规式的定义与应用一、 实验目的1. 熟悉正规式的构造方法;2. 熟悉从字符串中识别特定字符串的方法;3. 复习对文件的操作。二、 实验内容和要求已知一段C语言程序:#include...

    1年前   
    410    0

    编译原理实验报告(一)词法分析程序

     编译原理实验报告(一) ----词法分析程序【目的要求】 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的...

    3年前   
    767    0

    编译原理实验报告3-LL(1)文法构造

    实验3 LL(1)文法构造一、实验目的熟悉LL(1)文法的分析条件,了解LL(1)文法的构造方法。 二、实验内容1、编制一个能够将一个非LL(1)文法转换为LL(1)文法;2、消除左递归;3...

    2年前   
    299    0

    编译原理实验指导书

    目 录相关问题说明 1实验题 2实验1 词法分析(2课时) 3实验2 语法分析(2课时) 5实验3 语义分析(2课时) 7实验4 代码生成(2课时) 9参考书目 11相关问题说明本课程共有4个...

    3年前   
    581    0

    编译原理课后习题答案

    编译原理课后习题答案Chapter 11.解答:程序设计语言:程序设计语言是遵守一定规范的、描述“计算”(Computing)过程的形式语言。一般可以划分为低级语言和高级语言两大类。低级语言是...

    1年前   
    597    0

    《编译原理》期末试题(五)

    1.语言是A.句子的集合 B.产生式的集合 C.符号串的集合 D.句型的集合2.编译程序前三个阶段完成的工作是A.词法分析...

    2年前   
    724    0

    编译原理课程设计报告 简单编译器的设计与实现

     编译原理课程设计 ——简单编译器的设计与实现 班 级: 组长: 组员: 指导教师: 设计时间: ...

    5年前   
    1876    0

    编译原理期末试题附答案

    《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。(× )2.一个有限状态自动机中,有且仅有一个唯一的终态...

    1年前   
    407    0

    最速下降法原理及其算法实现课程论文

     本科毕业论文(设计)模板 课程论文论文题目:最速下降法原理及其算法实现 课程名称: 现代信号处理新方法 学 院: ...

    3年前   
    791    0

    编译原理实验3-4预测分析表方法

    实验3-4 预测分析表方法班级:_ _ 学号:_ _ 姓名:_ _ 得分:_ _一、实验目的理解预测分析表方法的实现原理。二、实验内容: ...

    1年前   
    316    0

    编译原理课程设计心得体会

    编译原理课程设计心得体会  经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。  一、对实验原理有更深的理解  通过该课程设计,掌握了什么是...

    11年前   
    631    0

    编译原理课后习题第三版答案

    第二章P36-6(1)是0~9组成的数字串(2)最左推导:最右推导:P36-7G(S)P36-8文法:最左推导:最右推导:语法树:/******************************...

    2年前   
    503    0

    西电编译原理上机报告DBMS的设计与实现

    编译原理上机报告《DBMS的设计与实现》学号: 姓名: 手机: 邮箱: 完成时间:2013 年X月X日目 录1. 项目概...

    2年前   
    309    0

    广东海洋大学编译原理期末复习资料

    广东海洋大学《编译原理》期末试题(一) 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) 1.编译程序是对高级语言程序的解释执行。(× ) 2.一个有限状态自动机中...

    5年前   
    1759    0

    《数据库原理及应用》实验报告

     数据库原理及应用 实验报告 实验课程: 学 号: 学生姓名: ...

    5年前   
    4471    0

    计算机组成原理实验报告 (2)

    计 算 机 组 成 原 理 实 验 报 告Computer Organization Lab Reports__________________________________________...

    1年前   
    474    0

    文档贡献者

    文***品

    贡献于2021-06-21

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档