一、实验任务二、实验介绍1、实验目的2、词法分析器的设计...课件.pptxVIP

  • 3
  • 0
  • 约2.81千字
  • 约 32页
  • 2023-08-16 发布于江苏
  • 举报

一、实验任务二、实验介绍1、实验目的2、词法分析器的设计...课件.pptx

一、实验任务 二、实验介绍 1、实验目的 2、词法分析器的设计 3、语法分析器的设计 4、程序设计举例;一、实验任务;2、任务分配;二、实验介绍;2、词法分析器的设计;1)构造TINY语言的保留字表(共有8个) a、数据结构: define maxReservered=8/*保留字的数*/ static struct{ char *str; tokentype tok; } reservedWords[maxReservered]={{“if”,IF},{“then THEN},{“else”,ELSE},{“repeat”,REPEAT},{“unti l”,UNTIL},{“read”,READ},{“write”,WRITE},{“ end”,END};;b、T I N Y对保留字的识别是通过首先将它们看作是标识符,之后再在保留字表中查找它们是否是保留字。;2)构造标记集合;3)构造DFA状态集合、实现取词操作;根据DFA可以构造出DFA状态集合,主要用来在程序中实现状态的转换 typedef enum;4)构造TOKEN的数据结构;5)词法分析的扫描过程的实现; 扫描程序还需总地计算出每个记号的特性(如果有的话),在 T I N Y扫描程序中,所要计算的唯一特性是词法或是被识别的记号的串值,它位于全局变量t o k e n S t r i n g之中。这个变量在g e t T o k e n函数中就得到,一同被返回,它们的定义是extern char tokenstring[maxtokenlen+1],maxtokeknlen 是TOKEN的最大度。 由g e t T o k e n过程还要完成的额外的工作如下:由子过程r e s e r v e d L o o k u p完成位于由g e t T o k e n识别的标识符之后的保留字的查找, c u r r e n t T o k e n的值也随之改变,如果是保留字则赋予保留字标记,否则赋予标识符标记。。 (currenttoken是当前标记的TOKEN值);3、语法分析器的设计;2)分析过程;3)TINY编译器的语法树结构;a、现在需要将语法树结构的描述用图形表示出来在的子树由点线和三角形表示)。则该图如下:;b、从TINY语言的文法可以看出T I N Y有两种基本的结构类 型:语句和表达式。语句共有5类(i f语句、r e p e a t语句、a s s i n语句、r e a d语句和w r i t e语句),表达式共有3类(算符表达式、常量表达式和标识符表达式)。因此,语法树节点首先按照它是语 句还是表达式来分类,接着根据语句或表达式的种类进行再次分类。树节点最大可有3个孩子的结构(仅在带有e l s e部分的i f语句中才需要它们)。必须将树节点中的属性保留如下(除了前面所提到过 的域之外):每一??表达式节点都需要一个特殊的属性。常数节点 需要它所代表的整型常数的域;标识符节点应包括了标识符名称的 域;而算符节点则需要包括了算符名称的域。语句节点通常不需要 属性(除了它们的节点类型之外)。但为了简便起见,在a s s i g n语句和r e a d语句中,却要保留在语句节点本身中。还要记录l i n e n o,它允许在转换的以后步骤中出现错误时能够打印源代码行数。;C、一个T I N Y语法树节点的C声明 typedef enum {StmtK,ExpK}NodeKind;/*语法树结点是语句还是表达式;*/ typedef enum {IfK,RepeatK,AssignK,ReadK,WriteK}Stmtkind;语句共有5类:i f语句、r e p e a t语句、a s s i g n语句、r e a d语句和w r i t e语句*/ typedef enum {OpK,ConstK,IdK} ExpKind; /*表达式共有3类 (算符表达式、常量表达式和标识符表达式)*/ #define MAXCHILEREN 3 ;/* 树节点最大可有3个孩子的结构 (仅在带有e l s e部分的i f语句中才需要它们)*/;typedef struct treeNode{ struct treeNode * child[MAXCHILDREN];//孩子结点; struct treeNode * sibling;//兄弟结点; int lineno;//为了错误的处理,显示错误的行号 NodeKind nodekind;//结点的类型 union { StmtKind stmt; Expkind exp};//结点的类型; union {TokenType OP; /*算符节点需要包括了算符名称的域*/ int val;/* 常数节点需要它所代

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档