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


    编译原理语法分析实验报告
    软工班
    实验容
    二 实验目
    三 实验求
    四 程序流程图
    l 函数
    l scanner()
    l irparser()函数
    l yucu() *语句串分析*
    l statement()*语句分析函数*
    l expression()*表达式分析函数*
    l term()*项分析函数*
    l factor()*子分析函数*
    五 程序代码
    六 测试例
    七 输出结果
    八 实验心






    实验容:
    编写文关文法构造递降语法分析程序输入串进行语法分析检查程序求输入串进行递降语法分析判程序否符合已知语法规果符合(编译出错)输出错误信息

    二实验目:
    构造文法语法分析程序求采递降语法分析方法输入字符串进行语法分析实现词法分析程序提供单词序列语法检查结构分析进步掌握递降语法分析方法

    三实验求:
    利C语言编制递降分析程序Training语言进行语法分析
    1. 分析Training语言语法
    扩充表示:
    <程序>>function<语句串>endfunc
    <语句串>><语句>{<语句>}
    <语句>à<赋值语句>
    <赋值语句>àIDà<表达式>
    <表达式>à<项>{+<项>|<项>}
    <项>à<子>{*<子>|<子>}
    <子>àID|NUM|(<表达式>)

    备注:实验中 程序进行扩展增加程序识if条件判断语句while循环语句功
    2. 实验求说明
    输入单词串#结束果文法正确句子输出成功信息印success否输出error

    四程序流程图
    函数:

    Scanner()函数:

    irparser()函数

    yucu() *语句串分析*

    statement()*语句分析函数*

    expression()*表达式分析函数*

    term()*项分析函数*

    factor()*子分析函数*


    五程序代码:
    递降分析文法
    <程序>>function< 语句串 >endfunc
    <语句串>><语句>{ <语句> }
    <语句>à<赋值语句> | |
    <赋值语句>à <表达式>
    <表达式>à<项>{ +<项> | <项> }
    <项>à<子>{*<子>|<子>}
    <子>àID | NUM | (<表达式>)
    à(<表达式>)| (ID) |(NUM)à<语句>
    à(<表达式>)| (ID) |(NUM)à<语句>

    备注:红色字体部分代码实现功修改扩展部分
    *语法分析源代码*
    #include
    #include
    char prog[80]token[8]
    char ch
    int synpm0nsumkk0
    char *rwtab[6]{functionifthenwhiledoendfunc}
    void yucu()
    void expression()
    void statement()
    void factor()
    void term()
    void irparser()
    void scaner()
    { for (n0n<8n++)
    token[n]NULL
    while(ch' ' || ch'\n')
    chprog[p++]
    m0
    if((ch<'z' && ch>'a') || (ch<'Z' && ch>'A'))
    {while((ch<'z' && ch>'a') || (ch<'Z' && ch>'A') || (ch<'9' && ch>'0'))
    {token[m++]ch
    chprog[p++]
    }
    syn10
    for(n0n<6n++)
    if(strcmp(tokenrwtab[n])0)
    { synn+1
    break
    }
    token[m++]'\0'}
    else
    if(ch<'9' && ch>'0')
    { sum0
    while(ch<'9' && ch>'0')
    { sumsum*10+ch'0'
    chprog[p++]
    }
    syn11
    }
    else
    { switch(ch)
    { case'<'m0token[m++]ch
    chprog[p++]
    if(ch'')
    {syn22
    token[m+1]ch}
    else
    {syn20chprog[p]}
    break
    case'>'m0token[m++]ch
    chprog[p++]
    if(ch'')
    { syn24
    token[m++]ch
    }
    else
    {syn23p
    }
    break
    case'' m 0token[m ++ ]ch
    chprog[p++]
    if(ch'')
    { syn 25
    token[m++] ch
    }
    else
    {syn18
    chprog[p]
    }
    break
    case''m0 token[m++] ch
    chprog[++p]
    if(ch'')
    { syn22
    token[m++] ch
    }
    else
    syn1
    break
    case'+'syn13 token[0]chbreak
    case''syn14 token[0]chbreak
    case'*'syn15 token[0]chbreak
    case''syn16 token[0]chbreak
    case''syn26 token[0]chbreak
    case'('syn27 token[0]chbreak
    case')'syn28 token[0]chbreak
    case'#'syn0 token[0]chbreak
    defaultsyn1break
    }
    chprog[p++]
    } }
    void irparser()
    { if(syn1)
    { scaner()
    yucu()*语句串分析*
    if(syn6) *读endfunc*
    { scaner()
    if(syn0&&kk0)*程序分析识完*
    printf(success)
    }
    else
    { if(kk1) *没endfunc结束*
    { printf(errorneed 'endfunc')
    kk1
    }
    }
    }
    else
    { printf(errorneed'function')
    kk1
    }
    }
    void yucu() *语句串分析*
    { statement()*调语句分析函数*
    while(syn26)*语句识结束继续识*
    { scaner()
    statement()
    }
    return
    }
    void statement()*语句分析函数*
    { if(syn10)
    { scaner()
    if(syn18) 果赋值语句
    { scaner()
    expression()
    } 程实现语法分析判断语句
    else
    { printf(errorevaluate tag error)
    kk1
    }
    }
    else
    if(syn6)
    return
    else
    if(syn2) 果条件判断语句 判断条件表达式语法
    { scaner()
    if(syn27) 判断括号匹配
    {do
    {scaner() 进入括号部进行表达式分析
    expression()
    }while(syn28)
    }
    else { printf(error need another')')
    kk1
    } ()判断完成
    scaner() 然进行语句块分析
    statement()
    } 里实现判断if语句语法分析
    类似里添加 循环语句
    else
    if(syn4) 果循环语句 判断条件表达式语法
    { scaner()chprog[p++]
    if(syn27)
    { do
    {scaner()
    expression()
    }while(syn28)
    }
    else {
    printf(error need another')')
    kk1 } ()判断完成
    scaner() 然进行语句块分析
    statement()
    } 里实现判断while语句语法分析
    else
    { printf(errorthe statement error)
    kk1
    }
    }
    void expression()*表达式分析函数*
    { term()
    while(syn13||syn14)
    { scaner()
    term() }
    return
    }
    void term()*项分析函数*
    { factor()
    while(syn15||syn16)
    { scaner()
    factor()}
    return
    }
    void factor()*子分析函数*
    { if(syn10||syn11)
    { scaner() }
    else*否表达式*
    { expression()
    if(syn27)
    { scaner()
    expression()
    if(syn28)
    { scaner()}
    else
    { printf(error need another')')
    kk1
    }
    }
    else
    { printf(error expression error)
    }
    }
    }
    void main()
    { p0
    printf(\n please input the string\n)
    do
    { chgetchar()
    prog[p++]ch
    } while(ch'#')
    p0
    chprog[p++]
    scaner()
    irparser()
    }
    六测试例
    测试例1
    输出结果

    测试例2
    输出结果

    测试例3
    输出结果
    function
    a1
    b2
    ca+b
    endfunc
    #
    success
    function
    if(3>1)
    a1
    endfunc
    #

    success
    function
    if(a>b)
    a1
    while(a>1)
    b1
    endfunc
    #

    success
    测试例4

    a1
    endfunc
    #
    输出结果
    errorneed'function'Press any key to continue

    七输出结果
    测试例1

    测试例2

    测试例4

    测试例3

    八实验心
    通编译原理实验二语法分析实验语法分析流程更深刻解语法分析递思想更加具体化然源代码非设计调试程序程中逐步理解程序递降思想思路断理清仅理解程序分析赋值语句算法时基础程序做功扩展增加语法分析条件判断语句while条件循环语句程序中红色字体部分调试算法功扩展程中理清语法分析程序思路开始程序陌生逐步解程序流程耐心步步理解程序思想次次更改测试例遍遍调试终终预期答案次实验理语法分析递降理解更加具体清晰受益匪浅









    文档香网(httpswwwxiangdangnet)户传

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

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

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

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

    下载文档

    相关文档

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

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

    3年前   
    625    0

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

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

    2年前   
    1043    0

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

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

    1年前   
    398    0

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

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

    1年前   
    409    0

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

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

    3年前   
    766    0

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

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

    2年前   
    298    0

    编译原理实验指导书

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

    3年前   
    579    0

    编译原理课后习题答案

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

    1年前   
    597    0

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

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

    2年前   
    724    0

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

    计算机硬件实验室实验报告姓名学号班 级成 绩 设备名称及软件环境递归下降分析一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的...

    3年前   
    595    0

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

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

    5年前   
    1876    0

    编译原理期末试题附答案

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

    1年前   
    406    0

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

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

    1年前   
    315    0

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

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

    11年前   
    630    0

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

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

    2年前   
    501    0

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

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

    2年前   
    309    0

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

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

    5年前   
    1758    0

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

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

    5年前   
    4469    0

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

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

    1年前   
    474    0

    计算机组成原理实验报告

    计算机组织与体系结构实 验 报 告评 语:成绩教 师: 年 月 日班 级: ________学 号: __________...

    1年前   
    433    0

    文档贡献者

    文***享

    贡献于2022-07-19

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

    该用户的其他文档