第二章 词法分析4 词法分析程序实现 构造词法分析器步骤 单词的形式化描述 词法分析程序的实现.

Slides:



Advertisements
Similar presentations
昆明机场. 目录  机场历史 机场历史  建设状况 建设状况  运行状况 运行状况  航线 航线.
Advertisements

第十四章 人口(二) 高中地理(一). 第一節 人口成長 第二節 人口組成 第三節 人口問題 第十四章 人口(二)
中國歷史 社會主義文化大革命 我們的報告是關於中國著名的革命 —— 文化大革命。你可會立即想到它何時發 生、怎麼會發生等等。我們將會介紹文 化大革命,希望你細心欣賞。
党课讲座 入党的条件与程序.
中國大陸教育 督導制度探究 凌林煌教授/博士 講授 國立中山大學共同科歷史學程
第四章 教育制度.
温故知新 犬 戎 公元前 770年 周平王 公元前771年 东周 洛邑 西周 镐京.
性教育教學模組設計 主題:身體自主權 台中市忠明國小 巫偉鈴.
让我们走进秋天.
整体销售方案 中山市美好物业代理有限公司
我征服了黃山 林達的黃山之旅 2006春.
第一章 教育与教育学 讲授提纲 教育与教育学 思考题目 主讲: 白彦茹(教授) 阅读文献 教学目的与要求 教学重点与难点 退出.
我国政府受人民的监督 权力的行使:需要监督.
鹽酥蝦 蝦子先處理好 蝦頭剪至眼睛處,鬚及蝦頭的小腳也都剪乾淨 2 再用廚房用剪刀開背去腸泥
臺中市頭家國小 生理衛生講座 青春期的奧秘 ‧說到青春期,你會想到? ‧班級表現最好的,有獎徵答有優先權。 葉孟娟老師、黃文玲老師.
第四节 K线图研判技巧.
校园信息管理系统 河北科技大学网络中心 2000/4/10.
何谓学龄期 学龄期是指6~7岁入小学起至12~14岁进入青春期为止的一个年龄段。期小儿体格生长仍稳步增长,除生殖系统外其他器官的发育到本期末已接近成人水平。 这个时期发病率较前为低,但要注意预防近视眼和龋齿,矫治慢性病灶,端正坐、立、行姿势,安排有规律的生活、学习和锻炼,保证充足的营养和休息,注意情绪和行为变化,避免思想过度紧张。
旅游资源赏析.
第一章信託法 第一節 信託契約 第二節 信託財產 第三節 受益人 第四節 受託人 第五節 信託關係之消滅.
道路交通事故處理.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
1. 民主社會裡,公民的參與有其重要性,而透過政治參與無法達成下列哪一項目的?
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
全球暖化 想知道全球暖化的嚴重性嗎? 那就繼續看下去吧!! 組員:陳儀君60524 蘇鈺祺60526 于玉琳60528 林宥嫻60521.
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
高中地理(一) 第十六章 產業(二)林、漁、礦業.
班級:2年2班 座號:33 姓名:羅子惠 指導老師:黃源弘 資料來源:
第七章 人 口 第一節 種族的分布與現況 第二節 人口結構與成長 第三節 人口問題 總目錄.
权力的行使:需要监督 北京市京源学校 冯 悦.
第三章 文学作为活动.
宗教故事 Back >> 【被逐出樂園】米開朗基羅1508~12年.壁畫
2.4 民主监督—— 守望公共家园.
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
编译原理与技术 课程总结.
立體圖形、圖形變換、空間 第十一組 廖芳苓 葉玟孝 林佩君.
視野死角與內輪差 埔心國小交通安全團隊.
程式設計實作.
2.2 语法分析器生成器YACC 分析器的构造步骤: 产生式→识别活前缀的DFA→分析表(+驱动器) YACC概述
上次课主要内容 正规式的简化形式与辅助定义; 记号的识别:有限自动机 NFA的定义:M =(S,∑,move,s0,F)
编译原理与技术 词法分析(1) 2018/11/28 《编译原理与技术》讲义.
编译原理课程设计.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
7.4 布尔表达式和控制流语句 布尔表达式有两个基本目的 计算逻辑值 c = (a > b) && a > 1
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
計數式重複敘述 for 迴圈 P
編譯程式設計 期末專題說明 V1.1 May 2004.
编译原理实践 11.语义分析与代码生成.
班級:財金一A 姓名:吳佩玲 學號:4990S024 指導老師:蔡享翰 老師
程式結構&語法.
第十讲 刘少奇与中国革命和建设.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
第六章 语法制导的翻译 本章内容 介绍一种语义描述方法:语法制导的翻译,介绍语法制导的翻译的实现方法。
for 迴圈 while迴圈 do-while迴圈 break 與 continue goto 與 標籤 程式觀摩
第2章 算法与C语言程序 程序 (1)数据的描述:数据的类型和组织形式(数据结构) (2)操作的描述:操作步骤(算法) 沃思指出:
考前总结 背景 必要性 作用 新旧版交替面临一些问题 从教学目标和要求说起 知识梳理 可能有助于提高考试成绩 或者让知识掌握得更好.
微信商城系统操作说明 色卡会智能门店.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
编译原理课程设计 2017年4月.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
手机淘宝“变形”产品—微淘 操作流程指南 (内测版).
厉害了,我的国! 15会计2班团支部 2018年4月20日.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
编译原理实践 7.PL/0的词法分析程序构造.
景文科技大學學生校外實習訪視暨差旅費核銷說明
Presentation transcript:

第二章 词法分析4 词法分析程序实现 构造词法分析器步骤 单词的形式化描述 词法分析程序的实现

构造词法分析器步骤 确定词法分析器的接口:即确定词法分析器是作为语法分析的一个子程序还是作为独立一遍; 确定单词分类和存储结构; 单词的形式化描述:构造每一类单词的描述正则表达式并转换为DFA; 正则表达式NFADFA 4. 设计算法实现DFA。

(一)词法分析器的接口 一类是仅作为语法分析的子程序: call 附 属 字符序列 词法分析器 Token 附 属 词法分析器 语 法 分 析 call Token 字符序列 另一类是作为编译器的独立一遍处理器: 字符序列 独 立 词法分析器 Token 语 法 分 析

(二)单词的分类及内部表示 TOKEN结构图 单词类别 语义信息

1、保留字、特殊符号的TOKEN处理 可以有两种处理方法: 保留字种类编码 if ‘+’的 编码

2、标识符和常量的TOKEN结构 语义信息 语义信息 关于语义信息可以有两种处理方法: 一种是在其TOKEN的语义信息部分直接存储这些值; 标识符种类编码 语义信息 常量种类编码 语义信息 关于语义信息可以有两种处理方法: 一种是在其TOKEN的语义信息部分直接存储这些值; 另外一种是设置标识符表和常量表来存储其值,这时TOKEN的语义信息部分就是一个指向相应表项的一个指针. 第一种方法处理起来比较简单,但是TOKEN的空间大小不好确定,可能造成空间浪费.

例1:不设置标识符表和常量表 某程序片段如下: int sum, first, count; sum=first + count * 10; 单词名称 类别编码 (词法信息) 类别编码的助记符 标识符 1 $id 整型常量 2 $num , 30 $comma ; 31 $semi = 32 $assi + 33 $plus 34 $colon * 35 $mult \n 36 $return int 37 $int 生成下列TOKEN序列: 1.($int, ) 2. ($id, sum ) 3. ($comma, ) 4. ($id, first ) 5. ($comma, ) 6. ($id, count ) 7. ($semi, ) 8. ($return, ) 9. ($id, sum ) 10. ($assi, ) 11. ($id, first ) 12. ($plus, ) 13. ($id, count ) 14. ($mult, ) 15. ($num, 10 ) 16. ($semi, ) 17 . ($return, )

例2:设置标识符表和常量表 如果单词为标识符,则类型填1 如果单词为常量,则类型填2 如果类型为保留字或特殊符号,则类型填该保留字或特殊符号所对应的数字 类型 内容 (符号表地址) TOKEN结构图 标识符索引表 1 2 3 ... n 常量索引表 1 2 3 ... n 保留字、特殊符号表 3 while 4 if 5 % ... 56 } 这个方法肯定是不止一种,我们给出一种可行的,也是在实践中检验过的,绝对不是唯一的,不管怎么设计只要把需要的信息表示出来就可以 这是我们给出的一种TOKEN结构,反映了语法信息和语义信息。第一部分称作种类信息,反映的是语法信息;第二部分称作内容信息,反映的是值。 我们分析过单词可以分成那4大类。因为那些类单词的数量是有限的,我们就可以用编码把它区分开

(三)单词的形式化描述 构造识别单词的有限自动机的方法与步骤如下: 1. 根据构成规则对程序语言的单词按类构造出相应的状态转换图,或将各类单词的正则表达式转换成相应的有限自动机. 2. 合并各类单词的状态转换图,构成一个能识别语言所有单词的DFA.合并方法为: (1)将各类单词的状态转换图的初始状态合并为一个唯一的初始状态; (2)化简调整状态冲突和对冲突状态重新编号; (3)如果有必要,增加出错状态.

例: L | D D D + ; : = : < < = 标识符 无符号整数 界限符 、 运算符 各类单词的自动机 图 3 . 1 无符号整数 + 界限符 、 运算符 ; : = : < < = 各类单词的自动机 图 3 . 4

1 L | D 2 : = 6 5 3 + 4 ; 9 < 7 8 10 other 合并后的DFA

(四)词法分析程序的实现 实现词法分析程序应注意的问题 保留字识别 符合单词、数 控制字符、注释

1、 保留字识别 统一识别 事先构造好保留字表。分析时把保留字也当作一般标识符来识别,然后查保留字表,没有则按一般标识符来处理。 单独识别 在自动机中单独加入识别各个保留字的状态。 13

2、 符合单词、数 复合单词的识别 在程序设计语言中,有一类单词是由两个或者两个以上的符号组成的,这类单词的前缀部分也可以是一个独立的单词。在处理这类单词时要特别加以注意。 有时候需要向前看若干个字符才能判断。 数的转换 词法分析程序应该把表示数的字符串转换成数,如“123”应该转换成123。 14

3、 控制字符、注释 控制字符的处理 无用的空格符和制表符要删掉; 字符串内的空格不能删; 换行符不能直接删除,而需用于错误定位。 注释的处理 源程序中的注释没有任何语法和语义上的意义,因此在进行词法分析时可以直接将注释删除,而不必生成其TOKEN。 15

实现算法 首先给出词法分析程序中用到的一些基本操作. Append(string, char):拼单词. KeyWord(string):查保留字表,看string是否为保留字.若此函数返回0,则表示string是一个标识符,否则为保留字编码. AddTable(table, string):入表操作,检查string在table中有没有出现,若有则返回其位置指针,若没有则将其插入到table的末尾,并返回该位置的指针. BACK:源程序文件指针回退一个字符.

ReadChar(CurrentChar); case CurrentChar of PROCEDURE Scanner(); BEGIN LS0: string:=“”; ReadChar(CurrentChar); case CurrentChar of ‘A’..‘Z’ | ‘a’..‘z ’:goto LS1; ‘0’..‘9’:goto LS2; ‘+’:goto LS3; ‘;’: goto LS4; ‘:’: goto LS5; ‘<’ : goto LS8; end; 1 L | D 2 : = 6 5 3 + 4 ; 9 < 7 other 10 8

LS1: string:=Append(string, CurrentChar); ReadChar(CurrentChar); 1 L | D 2 : = 6 5 3 + 4 ; 9 < 7 other 10 8 LS1: string:=Append(string, CurrentChar); ReadChar(CurrentChar); case CurrentChar of ‘A’..‘Z’ ,‘a’..‘z’ , ‘0’..‘9’:goto LS1; other: BEGIN BACK; c:=KeyWord(string); if (c!=0) then return(c, “”); else begin pID:=AddTable(IdTable, string); return($id, pID); end; END

ReadChar(CurrentChar); case CurrentChar of ‘0’..‘9’: goto LS2; other: 1 L | D 2 : = 6 5 3 + 4 ; 9 < 7 other 10 8 LS2: string:=Append(string, CurrentChar); ReadChar(CurrentChar); case CurrentChar of ‘0’..‘9’: goto LS2; other: BEGIN BACK; pNB:=AddTable(NbTable, string); return($int, pNB); END end;

‘=’: goto LS9; other: goto LS10; LS3: return($plus, “”); LS4: return($semi, “”); LS5: ReadChar(CurrentChar); case CurrentChar of ‘=’ : goto LS6; other: goto LS7; end; LS6: return($assi, “”); LS7: BACK; return($colon, “ ”); LS8: ReadChar(CurrentChar); ‘=’: goto LS9; other: goto LS10; LS9: return($le, “ ”); LS10: BACK; return($lt, “ ”); END 1 L | D 2 : = 6 5 3 + 4 ; 9 < 7 other 10 8

词法分析总结 这一章的内容需要掌握的是以下几点: 一个核心:词法分析器的设计 两个工具:正则表达式和自动机 三个转换算法:NFA到DFA,自动机的极小化,正则表达式和自动机的互相转换