第二章词法1-正则表达式解析.pptVIP

  • 177
  • 0
  • 约4.45千字
  • 约 28页
  • 2017-02-15 发布于湖北
  • 举报
第二章 词法分析1 Lexical Analysis 词法分析程序的功能; 单词分类及内部表示; 单词的描述技术—正则表达式和自动机 词法分析程序的设计与实现步骤. 2.1 词法分析程序的功能 词法分析器读取源程序的字符序列,逐个拼出单词并构造相应的内部表示。同时检查源程序中的词法错误。 一类是仅作为语法分析的子程序: 字符序列 2.2 单词及单词内部表示 单词: 是指语言中具有独立含义的最小的语义单位。 例如3.14*initial就可以划分成3.14, *,initial这三个单词。 但是3.14不可以继续划分成3,.,14 单词的内部表示 TOKEN结构图 单词类别:又称词法信息,用来区分单词的不同种类,通常可以用整数编码来表示. 语义信息:应该是唯一确定单词本身的内容. 单词的分类 例: 单词的描述工具 正则表达式 y|z *x y|z *x * y|z * 自动机 2.2单词的形式描述工具 正则表达式 正则表达式,又称正规表示法、常规表示法(Regular Expression,代码中常简写为regex、regexp或RE)。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 2.2.1 符号和符号串基本概念 2.符号串 由字母表中的符号组成的任何有穷序列称为字母表上的符号串。符号串还可以称为“字符串”、“字”或“句子”,一般用?,?,….,x,y,z表示。 ?表示空串。对任一字母表∑,都有?是∑上的符号串。 空串集 ? 不同于空集? 。 6. 子字符串 一个非空字符串 x ,同时删去它的一个前缀和一个后缀后所得到的字符串称为 x 的子字符串,简称子串。 如果删去的前缀和后缀不同时为ε,则称该子串为真子串。 例如: 设 x abc , 其子串为: abc , ab , a , ? , bc , c , b 。 真子串为: ab, a , ? , bc , b , c 。 8.符号串集的乘积 设A、B 是两个符号串集合,AB表示A与B的乘积,具体定义为: AB xy | x∈A ∧ y∈B 特别有:1、?A A? ? ,其中?表示空集。 2、 ε A A ε A 例2.3 设 A a, bc , B de, f ,则: AB ade, af, bcde, bcf 2.2.2 正则表达式 (一)正则表达式的递归定义 归纳基础: 1 ?和? 是∑上的正则表达式,L ε ε 该语言只包含空串, L ? 该语言为空. 2 对任何a∈∑,那么a 是∑上的一个正则表达式,L a a ,它所表示该语言仅包含一个长度为1的字符a; 归纳步骤: 由小的正则表达式构造较大的正则表达式的步骤有以下四种方法。假定A和B是正则表达式,分别表示语言L A 和L B ,那么: 1) A 是一个正则表达式,表示语言L A L A 2) A|B是一个正则表达式,表示语言L A ∪ L B 3) A ? B是一个正则表达式,表示语言L A L B 4) A*是一个正则表达式,表示语言 L A * 有限次使用上述规则构成的表达式称为∑上的正则表达式,表示的集合称为∑上的正规集。 (二)正则表达式示运算符优先级:先闭包运算*,次连接运算 ? ,最后或运算 | 例(1) ? a,b . 正则表达式示例(2) ? a,b . 正则表达式示例(3) 设字母表? 0,1 ,求二进制数字集合且为2的倍数。 所有?上定义的串的正则表达式为(1|0)* 则二进制数表示为1 1|0 *|0 其中能被二整除的表示为1(1|0)*0|0 (三)正则表达式的性质 作业: 设字母表? x,y,z , 所有?上定义的串。 不包含y的所有符号串集合。 包含偶数个x的所有符号串。 不包含连续两个y的所有符号串集合。 (四)扩充的正则表达式 一次或多次重复: R+ 任何符号: “·”匹配在字母表中任何符号. 符号范围: “-” ,如[0-9] 、 [a-z]、 [A-Z]. 排除型字符集合: “[^xyz]”匹配未列出的任意字符 . 如: %[^a-zA-Z]% 匹配含有两个百分号里面有一个非字母的字符串 . 0或1次 可选 : “?”. r? ? |r 如:colou?r (五)词法分析中的单词描述 保留字 如 Begin=begin 标识符 letter [a-zA-Z] digit [0-9] identifier letter letter|digit * 数字 整

文档评论(0)

1亿VIP精品文档

相关文档