第02篇 一个微型编译器.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第02章 一个微小的编译器 主要内容: 小语言ToyL的定义 ToyL程序的编译过程 表达式的处理 2.1 基础知识 单词分类:标识符、保留字、常数、运算符、界限符、编辑符; 单词编码:如,标识符、常数、begin、end、+、*、;的编码分别为:0-6; 语义信息:由两部分组成,其一是单词编码,其二是语义值,分别用Token.class和Token.seman来表示。 2.2 ToyL语言 特点:1)由begin和end括起来; 2)一种类型:integer,不用声明; 3)两种运算符:+、* ; 4)三种语句:赋值、输入、输出; 如下所示: begin x := 5 ; read(y) ; y := x * y+3 ; write(y); end. 小语言ToyL的定义 P ? begin SL end. SL ? S | S ; SL S ? id:= E | write(E) | read(id) E ? U | U + E | U * E |(E) U ? id | num ToyL程序结构语法图 2.3 ToyL的词法分析器 单词的种类 Token定义 词法分析过程 1)ToyL语言中单词的分类: 标识符:字母开头的字母/数字串 整常数:数字开头的数字串 保留字:begin end read write 符号词:+ * := ( ) ; . 控制词:? (换行符) 2)TOKEN定义: 用C语言定义ToyL语言的单词编码和宏名: Define BEGIN 1 Define WRITE 8 Define NUMB 2 Define SEMI 9 Define IDEN 3 Define OPEN 10 Define PLUS 4 Define CLOSE 11 Define MULT 5 Define END 12 Define ASS 6 Define EOF 13 Define READ 7 ToyL语言的单词的Token值定义: Begin :Tolen.class=BEGIN ,Token.seman=“begin” Num :Tolen.class=NUMB ,Token.seman=digits Id :Tolen.class=IDEN ,Token.seman=“标识符” + :Tolen.class=PLUS ,Token.seman=“+” * :Tolen.class=MULT ,Token.seman=“*” := :Tolen.class=ASS ,Token.seman=“:=” Read :Tolen.class=READ ,Token.seman=“read” Write :Tolen.class=WRITE ,Token.seman=“write” ; :Tolen.class=SEMI ,Token.seman=“;” ( :Tolen.class=OPEN ,Token.seman=“(” ToyL语言的单词的Token值定义: ) :Tolen.class=CLOSE ,Token.seman=“)” end :Tolen.class=END ,Token.seman=“end” eof :Tolen.class=EOF ,Token.seman=“\0” Token例子:begin x:=10;read(y);x:=x+y end [1] (BEGIN ,“begin”) [7] (OPEN ,“(” ) [2] (IDEN ,“x” ) [8] (IDEN ,“y” ) [3] (ASS ,“:=”) [9] (CLOSE ,“)” ) [4] (NUMB ,10) [10] (SEMI , “;” ) [5] (SEMI ,“;” ) [11] (IDEN , “x” ) [6] (READ ,“read” ) [12] (ASS ,“:=” ) Token例子:begin x:=10;read(y);x:=x+y end [13] (IDEN , “x” ) [15] (IDEN, “y”

文档评论(0)

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

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

1亿VIP精品文档

相关文档