河北工业大学编译原理.docxVIP

  • 26
  • 0
  • 约1.47万字
  • 约 34页
  • 2021-01-30 发布于山东
  • 举报
编译原理实验报告 实验一 词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描 的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析 方法。 识别表 二、实验设计 语言中具有的单词包括五个关键字 begin、end、 if 、 then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类 :构造上述语言中的各类单词符号及其分类码表。 表 I 语言中的各类单词符号及其分类码表 单词符 类别编 类别码的助记 单词值 号 码 符 begin 1 BEGIN end 2 END if 3 IF then 4 THEN else 5 ELSE 标识符 6 ID 字母打头的字母数字串 整常数 7 INT 数字串 8 LT = 9 LE = 10 EQ 11 NE 12 GT = 13 GE := 14 IS + 15 PL - 16 MI * 17 MU / 18 DI I 所列语言中的部分单词的 DFA 及相关的语义过程 将表 I 单词集中的整常数改为无符号常数, 无符号常数的单词分类码助记符: UCON 描述无符号数的正规文法和状态转换图 : 无符号数的右线性文法 G1[无符号数 ]如下: 〈无符号数〉→ d〈余留无符号数〉 〈无符号数〉→ ·〈小数部分〉 〈无符号数〉→ d 〈余留无符号数〉→ d〈余留无符号数〉 〈余留无符号数〉→ ·〈十进小数〉 〈余留无符号数〉→ E〈指数部分〉 〈余留无符号数〉→ d 〈余留无符号数〉→ · 〈十进小数〉→ E〈指数部分〉 〈十进小数〉→ d〈十进小数〉 〈十进小数〉→ d 〈小数部分〉→ d〈十进小数〉 〈小数部分〉→ d 〈指数部分〉→ d〈余留整指数〉 〈指数部分〉→ +〈整指数〉 〈指数部分〉→ -〈整指数〉 〈指数部分〉→ d 〈整指数〉→ d〈余留整指数〉 〈整指数〉→ d 〈余留整指数〉→ d〈余留整指数〉 〈余留整指数〉→ d 图所示为上述文法的状态转换图,其中编号 0、1、2、, 、 6 分别代表非终结符 号 无符号数 、余留无符号数 、十进小数 、小数部分 、指数部分 、整指数 及 余留整指数 。 文法 G1[无符号数 ]的状态转换图 包含语义处理过程的识别无符号数的状态矩阵 三、源程序 #includestdio.h #includectype.h #includestdlib.h #includestring.h #includemath.h #define BEGIN 1 #define END 2 #define IF 3 #define THEN 4 #define ELSE 5 #define ID 6 #define INT 7 #define LT 8 #define LE 9 #define EQ 10 #define NE 11 #define GT 12 #define GE 13 #define PL 14 #define MI 15 #define MU 16 #define DI 17 #define IS 18 #define TOKEN_SIZE 64 #define TAB_SIZE 5 char TOKEN[TOKEN_SIZE]; extern int lookup(char *); extern void out(int ,char*); extern void report_error(); int GetChar(void); int EXCUTE(int,int); int LEX(void); #define LETTER 0 #define DIGIT 1 #define POINT 2 #define OTHER 3 #define POWER 4 #define PLUS 5 #define MINUS 6 #define ClassNo 100 #define ClassOther 200 #define EndState -1 int w,n,p,e,d; int Class; int ICON; float FCON; static int CurrentState; char ch; //信息表保存 5 个关键字 typedef struct { int ad; char id[6]; }info_ele; info_ele Tab[TAB_SIZE]={{1,begin},{2,end},{3,if},{4,then},{5,else}}; void scanner_example(FILE *fp) //扫描器函数 { int i,c; ch=fgetc(fp)

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档