编译方法实验.pptx_第1页
编译方法实验.pptx_第2页
编译方法实验.pptx_第3页
编译方法实验.pptx_第4页
编译方法实验.pptx_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,编译原理实验,人民大学信息学院 陈文萍,2,内容,实验概述 PL0语言简介 词法分析器实验部分,3,实验设置,实验内容 PL/0编译器的实现 实验目的 理解编译器的工作机制 掌握编译器的构造方法 掌握词法分析器的生成工具LEX的用法 掌握语法分析器的生成工具YACC的用法,4,实验要求,独立完成 程序源代码(有注释,易读) 文档:整个编译器的设计说明(三个实验完成后提交) 按时提交 迟交影响成绩 鼓励扩展,5,实验环境与考评,成绩评定 程序 文档 实验分成三部分: 词法分析 语法分析 语义分析和代码生成 实验环境 Windows C或C,6,PL/0编译程序的实验流程,PL0源程序,词法分

2、析器,语义分析和中间代码生成,语法分析器,类汇编代码,PL/0,类汇编,C,7,PL/0 语言简介,PL/0语言是Pascal语言的子集 数据类型只有整型 标识符的有效长度是10,以字母开始的字母数字串 数最多为14位 过程无参,可嵌套(最多三层),可递归调用 变量的作用域同PASCAL,常量为全局的,8,PL/0 语言简介,语句类型: 赋值语句,if.then., while.do., read, write, call, 复合语句begin. end, 说明语句: const., var., procedure 13个保留字: if, then, while, do, read, writ

3、e, call, begin, end, const, var, procedure, odd,9,PL0语言的EBNF范式,EBNF:可说明哪些符号序列是对于某给定语言在语法上有效的程序。 EBNF范式的符号说明 :语法构造成分,为非终结符 := :该符号的左部由右部定义,读作“定义为” | :或 :括号内的语法成分可重复 :括号内成分为任选项 ( ):圆括号内成分优先,10,PL0语言的EBNF范式, := . := := CONST,; := = := := VAR,; := |,11,PL0语言的EBNF范式, := ; := PROCEDURE; := | := := := BEGI

4、N;END := |ODD := IFTHEN,12,PL0语言的EBNF范式, := +|- := := |() := +|- := *|/ := =|#|= := WHILEDO := CALL,13,PL0语言的EBNF范式, := READ(,) := WRITE(,) := a|b|.|X|Y|Z := 0|1|.|8|9,14,PL/0语言词法分析器实验,实验内容:用flex工具生成一个PL/0语言的词法分析程序,对PL/0语言的源程序进行扫描,识别出单词符号的类别,统计输出各种符号的信息 输入:PL0源程序 输出:把单词符号分为下面五类,然后统计PL0源程序中各单词符号出现的次数

5、。 K类(关键字) I类(标识符) C类(常量) P类(算符及界符) O类(其他) 实验环境: 词法分析器生成工具:flex 编程语言:C 调试环境:VC,15,PL/0语言词法分析器实验,例如,对如下的程序: var a,b; procedure test; var t; begin t := 1; end; begin call test; end.,词法分析结果输出,类别包括关键字K(keyword), 标识符I(ident), 常熟C(const),算符P (operator)及界符O(symbol), 其他 (other) K类: var:2 procedure:1 I类: a:1

6、b:1 C类: 1 :1 ,16,LEX概述,LEX是一个词法分析器的自动产生系统。 LEX源程序的核心是识别规则,它由正规式和动作组成。,LEX源程序,LEX,lex.yy.c文件,源语言程序,yylex()函数,单词符号串,17,LEX源程序的格式,% 声明可选 % 辅助定义可选 % 识别规则必须有 % 用户子程序可选,18,声明,所有嵌在“%”和“%”之间的内容将被原样拷贝到lex.yy.c文件中。 在声明中,可以引入头文件、宏定义以及全局变量的定义。 例如: % #include intnum_ident, num_keyword; %,19,辅助定义,辅助定义可以用一个名字代表一个正

7、规式。 辅助定义的语法是:辅助定义名 正规式 注意:辅助定义必须从第一列写起。 后面的辅助定义可以引用前面的辅助定义。 在正规式中,用“辅助定义名”可以引用相应的正规式。 例如: NEW_LINE(n) INTEGER(0-9+) EXPONENT(Ee+- INTEGER),20,识别规则,识别规则由两部分组成:正规式和相应的动作。 正规式用于描述输入串的词法结构。 动作用于描述识别出某一个词形时要完成的操作。 例如: % void return T_Void;,21,识别规则之正规式,正规式由正文字符和正规式运算符组成。 正文字符为计算机的字符集。几个特殊的字符为:“ ”、“t”、“n”。

8、 正规式运算符包括:.,-,*,+,?, ,“,(,),|,/,$,。,22,正规式的写法(1),x匹配字符x. 匹配除换行外的所有字符 xyz 字符集合,匹配字符x、y或 zA-Z 字符集合,匹配除大写字母外的所有字符r* 正规式r出现零次或多次r+ 正规式r出现一次或多次r? 正规式r出现零次或一次r2,5 正规式r重复2至5次r2, 正规式r重复2次以上(含2次)r4 正规式r重复4次name 辅助定义“name”的展开“” 字符” 字符”,23,正规式的写法(2),0 空字符(ASCII 码为 0) 123 ASCII 码为八进制数123的字符 x2a ASCII码为十六进制数 2a的

9、字符 (r)匹配正规式r rs 正规式r后面紧跟正规式s,串联 r|s 匹配正规式r或s r/s当正规式r后面紧跟s时,匹配r r 当正规式r位于行首时,匹配r r$ 当正规式r位于行尾时,匹配r,相当于r/n r 在开始条件s下匹配正规式r r在开始条件s1,s2或s3下匹配正规式r r在任何开始条件下都匹配正规式r 遇到文件结束符时 在开始条件s下遇到文件结束符时,24,书写正规式的注意事项,每条规则的正规式必须从第一列写起。 为避免与运算符混淆,建议对所有的非字母数字字符都使用转义符“或 。 在集合中,字符之间不要留空格,否则空白符“ ”将被包含在集合中。 辅助定义可以使正规式更加简洁清

10、晰。,25,正规式举例,a-zA-Z0-9 表示所有的字母和数字组成的集合; tn 表示除空格、tab和换行外的所有字符组成的集合; (”n*) 表示以双引号开头,后跟除双引号和换行外的若干字符组成的字符串,例如:“here is a string a1,5 表示a重复1至5次形成的串的集合,即a, aa, aaa, aaaa, aaaaa A-Za-zA-Za-z0-9* 表示以字母开头,后跟若干字母和数字的串 (Ee-+0-9+) 表示科学计数法的指数部分,26,识别规则之动作,识别规则的动作是一段C语言程序,将被原样照抄到lex.yy.c文件中。 缺省规则:输入串中不与任何正规式匹配的字

11、符串将被原样照抄到输出文件中。 在词法分析器实验中,基本的动作就是记录单词符号的类别,27,动作必须从正规式所在行写起。 当某条规则的动作超过一条语句时,必须用大括号括起来。 如果希望在输出中滤去某些字符,相应的动作为空 例如: tn 如果不希望照抄输出,就要为每一个可能出现的词形提供规则。,书写动作的注意事项,28,动作中用到的全局变量,yytext:char *类型,指向当前正被某规则匹配的字符串。 yyleng:整型,存储yytext中字符串的长度。被匹配的串在yytext0yytextyyleng-1中。,29,用户子程序,子程序用C语言书写,将被原样照抄到lex.yy.c文件中。 例

12、如填加main函数,读入pl0源文件 int main(int argc, char *argv) FILE * fIn;/PL0文件的指针 switch(argc) case 1: /打开缺省文件 fIn=fopen(“test.frag”,“r”); if(fIn=NULL) printf(default file is not foundn); exit(1); elseyyin = fIn; break; case 2: /打开指定文件 if (fIn = fopen(argv1,r) = NULL) printf(File %s is not found.n,argv1); exit(1); elseyyin=fIn; break; default: printf(useage:flex filenamen); exit(1); yylex(); fclose(fIn); return 0; ,30,LEX源程序举例,% int num_lines = 0, num_chars = 0; % % n +num_lines; +num_chars; . +num_chars; % main() yylex(); printf(# of lines = %d, # of chars = %dn, num_lines, num_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论