收藏 分享(赏)

编译实验词法分析.doc

上传人:hyngb9260 文档编号:7833999 上传时间:2019-05-27 格式:DOC 页数:12 大小:280KB
下载 相关 举报
编译实验词法分析.doc_第1页
第1页 / 共12页
编译实验词法分析.doc_第2页
第2页 / 共12页
编译实验词法分析.doc_第3页
第3页 / 共12页
编译实验词法分析.doc_第4页
第4页 / 共12页
编译实验词法分析.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、词法分析器实验报告院 系: 专 业: 小组成员: 学 号: 日 期: 一、实验的目的与任务词法分析的目的是将输入的源程序进行划分,给出基本符号(token)的序列,并掠过注解和空格等分隔符号。基本符号是与输入的语言定义的词法所规定的终结符。本实验要求学生编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 (遇到错误时可显示“Error” ,然后跳过错误部分继续进行) 。二、实验所要识别的单词分类1关键字。*key53= “auto“, “bool“, “break“, “case“

2、, “catch“, “char“, “class“, “const“, “continue“, “default“, “delete“, “do“, “double“, “else“, “enum“, “extern“, “false“, “float“, “for“, “friend“, “goto“, “if“, “inline“, “int“, “long“, “namespace“, “new“, “operator“, “private“,“protected“, “public“, “register“, “return“, “short“, “signed“, “sizeof“

3、, “static“, “struct“, “switch“,“template“, “this“, “throw“, “true“, “try“, “typedef“, “typename“, “union“, “unsigned“, “using“, “virtual“, “void“, “volatile“, “while“;2标识符。符合文法标识符,由字符和数字组成,首字符必须为下划线或字母。(hjw, wyp2319,_zhg)3.数字。整型,浮点型,科学计数。4.运算符。*arithmetic6=“+“ , “-“ , “*“ , “/“ , “+“ , “-“; 5.关系运算符。

4、*relation7=“ , “=“ , “=“ ,“!=“;6.分界符。*border7= “,“ , “;“ , “ , “ , “(“ , “)“ ,“/“; 三、输出格式1)若为关键字,则输出格式为;例:关键字 float,输出为2)若为一般标识符,则输出格式为;例:标识符 fzu,输出为3)若为数字,则输出格式为;例:数字 2325,输出为4)若为算术运算符,则输出格式为;例:+,输出为5)若为关系运算符,则输出格式为;例:!=,输出为6)若出错,则输出格式为;例:错误输入为 26.,则输出为四、正则表达式:标识符 id-letter_(letter_|digit)*无符号数 num

5、ber-digit optitionalfraction optionalexponent 空白符 ws-(blank|tab|newline)+关系运算符 relop- |=|=|!=运算符 operator-+|-|*|/|+|-五、DFA 状态转换图start =1 23other=*return(relop, NE)return(relop, LT)return(relop, EQ)return(relop, GE)return(relop, GT)start letter9 other 1110letter/dig*1912 1413 1615 1817start otherdigi

6、t . digit E + | - digitdigitdigitdigitEdigit*start+25 +other*-26 2728293332other3031-*/六、流程图开始结束读入 i n . t x t字母 数字算术运算符关系运算符分界符N N N NY Y Y YYY符合转化符合转化 符合转化 符合转化 符合转化E R R O RNNNYYYYNNN关键字 ? 标识符七、实验结果实验环境:Microsoft Windows 7 下的 Microsoft Visual Studio 2010输入输出输入输出输入输出八、结果分析用格式为.txt 的文件输入,一个个字符去识别,根

7、据 DFA 的状态图实现跳转,把未进入接受状态的单元存放进一个数组,到达接受状态,将识别出来的词和属性一起输出。其中识别得到的 id 与 keyword 转换过程相同,故最后得到的结果还要再判断是标识符还是关键字。由于关键词有限,可以建个表存放关键字,通过查表实现判断关键字。运算符和分隔符是有限的,所以把它们罗列去判断,只要是符合条件就接收。 九、实验总结实验是理论的实践,但是通过实验加深了我们对理论课知识的理解和运用,词法分析器更是如此。对输入的程序进行分析,将关键字,保留字与系统标识符分开,并对属性进行说明。更通俗的来说,也就是编写一个程序,可以实现这个功能。通过这个实验,现在我们知道了,

8、如何用正则表达式去识别我们想要识别的单词。但如何用程序去实现整个识别过程,又该如何去一步步执行识别呢?最简单的方法,一个字符一个字符的读入,每读入一个字符,识别过程进入一个特定的状态,按照一定的次序在一系列状态间转换后,字符全部读入,状态也走入了终态。那么好了,一个单词识别完毕,这就给我们启示,从一个状态转换图可以较容易的实现程序化的识别工作。这样我们就知道如何从一个状态图去写程序了。十、实验代码#include “stdafx.h“#include #include #include #include #include using namespace std;ifstream fp(“in.

9、txt“,ios:in);char cbuffer;char *key53= “auto“, “bool“, “break“, “case“, “catch“, “char“, “class“, “const“, “continue“, “default“,“delete“, “do“, “double“, “else“, “enum“, “extern“, “false“, “float“, “for“, “friend“, “goto“, “if“, “inline“, “int“, “long“, “namespace“, “new“, “operator“, “private“,“pr

10、otected“, “public“, “register“, “return“, “short“, “signed“, “sizeof“, “static“, “struct“, “switch“,“template“,“this“, “throw“, “true“, “try“, “typedef“, “typename“, “union“, “unsigned“, “using“,“virtual“,“void“,“volatile“,“while“; /关键字char *border7= “,“ , “;“ , “ , “ , “(“ , “)“ ,“/“; /分界符char *ari

11、thmetic6=“+“ , “-“ , “*“ , “/“ , “+“ , “-“; /算术运算符char *relation7=“ , “=“ , “=“ ,“!=“; /关系运算符 int search(char searchchar,int wordtype)/search 函数查表匹配 int i=0,t=0;switch (wordtype)case 1: for (i=0;i“endl;buffer=fp.get();out: return(buffer);void main()if (!fp)cout“文件打开错误!“endl;else fp.get (cbuffer);while (!fp.eof()if (isalpha(cbuffer)|cbuffer=_)/isalpha 函数判断输入是否为字母cbuffer=alphaprocess(cbuffer);/字符处理(判断标示符和关键字)else if (isdigit(cbuffer)/isdigit 函数判断输入是否为数字cbuffer=digitprocess(cbuffer);/数字处理 else cbuffer=otherprocess(cbuffer);/其他符号处理(各种运算符)cout“完成n“;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报