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


    





    编译原理课程实验报告


    题 目: 词法分析器实验
    专 业: 计算机科学技术
    班 级: 1班
    学 号: * * * *****
    姓 名: * * *

















    实验目
    通实验编程实践学生解词法分析务掌握词法分析程序设计原理构造方法学生编译基概念原理方法完整清楚理解正确熟练运
    二实验容求
    VC++VBJAVA语言实现C语言子集源程序进行词法分析通输入源程序左右字符串进行扫描分解次输出单词部编码单词符号身值遇错误显示Error然跳错误部分继续显示 时进行标识符登记符号表理
    实现词法分析设计工作:
    (1)源程序文件中读入字符
    (2)统计行数列数错误单词定位
    (3)删空格类字符包括回车制表符空格
    (4)拼写单词(码属性)二元式表示(属性值——token机表示)
    (5)果发现错误报告出错
    (6)根需否填写标识符表供阶段
    单词基分类:
    u 关键字:程序语言定义具固定意义标识符称保留字例 if forwhileprintf 单词种码1
    u 标识符:表示种名字变量名数组名函数名
    u 常数: 数值常数 125 10531416
    u 运算符:+*
    u 关系运算符: << >><>
    u 分界符: ()[]
    三实验程序设计说明
    1.实验方案设计
    1程序设计考虑:
    u 程序说明部分种表格变量安排空间
    具体实现时类单词设计成结构长度均相形式较短关键字面补空
    k数组关键字表数组元素存放关键字(事先构造关键字表)
    s 数组存放分界符表(事先构造分界符表)简单起见分界符算术运算符关系运算符放s表中(编程时应建立算术运算符表关系运算符表类号)合成类
    id ci 数组分存放标识符常数
    instring 数组输入源程序单词缓存
    outtoken 记录输出部表示缓存
    造表填表设置变量
    u 程序开始先工方式输入关键字造k表输入分界符等造 p 表
    u 程序工作部分设计成便调试循环结构循环处理单词接收键盘送单词调词法分析程输出单词部码
    例单词设计成形式 (typepointer)
    中type指明单词种类例:Pointer指单词存放处开始位置
    造表填表设置变量
    u 程序开始先工方式输入关键字造k表输入分界符等造 p 表
    u 程序工作部分设计成便调试循环结构循环处理单词接收键盘送单词调词法分析程输出单词部码
    例单词设计成形式 (typepointer)
    中type指明单词种类例:Pointer指单词存放处开始位置



    词法分析设计流程图
    2词法分析程考虑
    u 根输入单词第字符(时需读第二字符)
    判断单词类产生类号:字符k表示关键字id表示标识符
    ci表示常数s 表示分界符
    u 标识符常数需分标识符表常数表中已登记元素相较表中已该元素记录表中位置未出现标识符序填入数组 id 中常数变二进制形式存入数组中 ci 中记录表中位置
    lexical 程中嵌两程:名 getchar功 instring 中序取出字符指针 pint 加 1 名 error出现错误时调程输出错误编号
    u 求:识出单词两字节等长表示称部码第字节 t 第二字节 i t 单词种类关键字 t1分界符 t2算术运算符 t3关系运算符 t4符号数 t5标识符 t6i 该单词表中指针部码值表 1 关键字表表 2 分界符表表 3 算术运算符 i 值表 4 关系运算符 i 值

















    取字符统计字符行列位置子程序

    2.程序源代码
    #include
    #include
    #include
    #include
    using namespace std
    #define MAX 50
    char ch ' '
    string keyword[50]{boolbreakcaseincludecharconst
    continue default dodoubleelsefalse
    floatforifintlong namespacenewreturn
    shortsignedstructswitchtrueusingvoidwhile then }
    int gjz(string c){
    int i
    for(i0i if(keyword[i]compare(c)0) return 1
    }
    return 0
    }

    int zm(char c) {
    if(((c<'z')&&(c>'a'))||((c<'Z')&&(c>'A'))) return 1
    else return 0
    }

    int num(char c){
    if(c>'0'&&c<'9') return 1
    else return 0
    }

    void caculate(FILE *fpin){
    ofstream out(mytesttxtiosout)
    string arr
    while((chfgetc(fpin))EOF) {
    arr
    if(ch' '||ch'\t'||ch'\n'){}
    else if(zm(ch)){
    while(zm(ch)||num(ch)) {
    arrarr+ch
    chfgetc(fpin)
    }
    fseek(fpin1LSEEK_CUR)
    if (gjz(arr)){out< else out< }


    else if(num(ch)){
    while(num(ch)||ch''&&num(fgetc(fpin))||fgetc(fpin)'e'||ch'e')
    {
    if(ch'') fseek(fpin1LSEEK_CUR)
    arrarr+ch
    if(ch'e')
    {
    chfgetc(fpin)

    if( ch'+') arr+'+'
    else {arr+'' fseek(fpin1LSEEK_CUR)}
    }
    chfgetc(fpin)
    }
    fseek(fpin3LSEEK_CUR)
    out< }
    else switch(ch){
    case'+'
    case''
    case'*'
    case''
    case'' out< case'('
    case')'
    case'['
    case']'
    case''
    case'#'
    case''
    case''
    case'{'
    case'}' out<
    case ''{
    string string1
    do
    {
    string1+ch
    chfgetc(fpin)
    } while (ch'')
    string1+ch
    out< }break

    case'' {chfgetc(fpin)
    if(ch'') out<<<< \t4<<\t运算符<
    else {out<<<< \t4<<\t运算符<
    fseek(fpin1LSEEK_CUR)}
    }break

    case'<' {chfgetc(fpin)
    if(ch'')out<<<<< \t4<<\t运算符< if(((ch<'z')&&(ch>'a'))||((ch<'Z')&&(ch>'A'))) { fseek(fpin1LSEEK_CUR)
    out<<<<< \t5<<\t界限符< else if(ch'<')out<<<<<< \t7<<\t控制符< else if(ch'>') out<<<><< \t4<<\t运算符< else{out<<<<< \t4<<\t运算符< fseek(fpin1LSEEK_CUR)}
    }break

    case'>' {chfgetc(fpin)
    if(ch'') out<<><< \t4<<\t运算符< if(ch'>')out<<>><< \t7<<\t控制符< if(ch'\n'){fseek(fpin1LSEEK_CUR)
    out<<><< \t5<<\t界限符< else {out<<><< \t4<<\t运算符< fseek(fpin1LSEEK_CUR)}
    }break
    default out< }
    }
    }
    void read(){

    ifstream in(mytesttxtiosout)
    string x

    while(in)
    {in>>xcout<>x coutwidth(20)cout<>x coutwidth(20)cout<}
    void main(){
    char in_fn[30]
    FILE * fpin
    cout<<请输入源文件名(包括路径缀名)
    for(){
    cin>>in_fn
    if((fpinfopen(in_fnr))NULL) break
    else cout<<文件路径错误请输入源文件名(包括路径缀名)
    }
    cout<<\n********************词法分析工作*********************< caculate(fpin)
    fclose(fpin)
    cout< read()
    cout<<\n********************参目录mytesttxt*********************< system(pause)
    }
    3.程序执行结果


    图 1 程序输入文件容


    图 2 输出结果
    4.实验程序优点特色
    程序特色: 出错处理力强非法字符输入会报错:31fd 字符串定错误输出警告*出现时必*收尾时*全部错误处理警告
    四实验中出现问题解决方法
    *注释符*发生死循环检查修改错误*连续*12*3456*时出现面3处次读取判断情况修改改正
    五体会意见建议
    C语言学学难时解词法分析程序设计方法编译程序编译时第步做容方法
    华dong交理工学院

    文档香网(httpswwwxiangdangnet)户传

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

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

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

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

    下载文档

    相关文档

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

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

    2年前   
    912    0

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

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

    5年前   
    1844    0

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

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

    2年前   
    1022    0

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

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

    1年前   
    382    0

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

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

    1年前   
    378    0

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

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

    3年前   
    754    0

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

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

    2年前   
    289    0

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

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

    11年前   
    615    0

    编译原理实验指导书

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

    3年前   
    573    0

    编译原理课后习题答案

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

    1年前   
    570    0

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

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

    2年前   
    714    0

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

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

    3年前   
    577    0

    编译原理期末试题附答案

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

    1年前   
    351    0

    编译原理课程设计LR(0)分析器自动构造程序

    XX学院工科课程设计 -《编译原理》课程设计报告 题 目: LR(0)分析器自动构造程序的实现 学 号: ...

    2年前   
    382    0

    《数值分析》课程实验报告

    《数值分析》课程实验报告姓 名: 学 号: 学 院: 机 电 学 院 日 期: 2015 年 X 月X...

    3年前   
    2057    0

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

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

    5年前   
    4407    0

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

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

    1年前   
    460    0

    计算机组成原理实验报告

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

    1年前   
    415    0

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

    郑州航空工业管理学院计算机科学与应用系实验报告课 程 名: 计算机组成原理 学 号: 姓 名: ...

    1年前   
    324    0

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

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

    1年前   
    306    0

    文档贡献者

    文***享

    贡献于2021-05-27

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

    该用户的其他文档