如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验报告姓名:张静学号:13031121【实验名称】一种绘图语言的词法分析器实验名称】【实验目的】采用c语言完成词法分析器,练习使用。实验目的】【实验内容】实验内容】一、问题描述设计一种简单的函数绘图语言的词法分析器,该绘图语言可以提供一条循环绘图语句,图形变换语句,注释语句,他的词法分析器部分是读取源程序――字符序列,并根据构词规则将其转换为记号流。它可以完成三个任务:(1)滤掉源程蛑械淖⑹秃臀抻玫某煞郑ㄈ缈?格,TAB等)(2)输出记号,供语法分析器使用;;(3)识别非法输入,并将非法输入作为出错记号提供给语法分析器,以便进行出错处理。二、问题分析词法分析器的构造步骤:正规式――NFA――DFA――最小DFA――编写程序――测试。1、记号的设计记号一般有两部分组成:极好的类别,记号的属性。根据函数绘图语言的特点,可以将记号设计为如下的数据结构:StructToken{Token_Typetype;----------类别char*lexeme;--------------属性,原是输入的字符串doublevalue;----------属性,若记号是常数则是常数的值double(*FuncPtr)(double);--属性,若记号是函数则是函数指针};函数绘图语言的记号类别划分如下:EnumToken_Type{ORGIN,SCALE,ROT,IS,------------保留字TO,STEP,DRAW,FOR,FROM,---------保留字T,--------------------------------参数SEMICO,L_BRACKET,R_BRACKET,COMMA--分隔符PLUS,MINUS,MUL,DIV,POWER,------运算符FUNC,--------------------------函数CONST_ID,-------------------常数NONTOKEN,-----------------空记号ERRTOKEN-------------------出错记号};2、模式的正规式表示函数绘图语言的此法可用下是正规式集合表示,其中的letter和digit是辅助定义描述词法的正规式Letter=[a-zA-Z]Digit=[0-9]COMMENTWHITE_SPACESEMICOL_BRACKETR_BRACKETCOMMAPLUSMINUSMULDIVPOWERCONST_IDID=“//”|“--”=(“”|\t|\n)+=“;”=“(”=“)”=“,”=“+”=“-”=“*”=“/”=“**”=digit+(“.”digit*)?=letter+(letter|digit)*用于我们是手工构造词法分析器,而正规越少越便于程序的编写,因此设计上采用相同模式的记号公用一个正规式的方法。常数的字面值部分设计为CONST_ID,而常量名则合并到ID中。但这却带来一个问题,函数绘图语言中的保留字、常量名、参数名,以及函数名均被识别为ID,当时别出ID时,如何再仔细分它们?为解决上述问题,我们可以设计一个预定义的符号表3、区分记号的符号表将所有符合ID模式的保留字、常量名、参数名和函数名等均放进符号表中,具体内容如下:staticTokenTokenTab[]={{CONST_ID,"PI",{CONST_ID,"E",{T,{FUNC,{FUNC,{FUNC,{FUNC,{FUNC,{FUNC,{ORIGIN,{SCALE,{ROT,{IS,{FOR,{FROM,{TO,{STEP,"T","SIN","COS","TAN","LN","EXP","SQRT","ORIGIN","SCALE","ROT","IS","FOR","FROM","TO","STEP",3.1415926,2.71828,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,NULL},NULL},NULL},sin},cos},tan},log},exp},sqrt},NULL},NULL},NULL},NULL},NULL},NULL},NULL},NULL},//符号表内容{DRAW,};"DRAW",0.0,NULL},当词法分析