河北工业大学编译原理讲稿.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验报告 实验一 词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 表I 语言中的各类单词符号及其分类码表 := 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); if(isalpha(ch)) //是否为字母 { TOKEN[0]=ch; i=1; ch=fgetc(fp); while(isalnum(ch)) //是否为字母或数字 { TOKEN[i]=ch; i++; c

文档评论(0)

4477769 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档