2第二章 词法分析2(更新版).pdfVIP

  • 3
  • 0
  • 约9.75千字
  • 约 38页
  • 2018-10-19 发布于山东
  • 举报
主要内容 扫描处理 正则表达式 有穷自动机 从正则表达式到DFA TINY扫描程序的实现 利用Lex 自动生成扫描程序 • 有穷自动机 (有穷状态的机器)是描述(或“机 器” )特定类型算法的数学方法。有穷自动机可描 述在输入串中识别模式的过程,用作构造扫描程 序。有穷自动机与正则表达式有着很密切的关 系。 例: identifier = letter ( letter | d i g i t) * 代表以一个字母开头且其后为任意字母或数字 序列的串。识别该串的过程可表示为图2 – 1,标 明数字1和2 的圆圈表示的是状态 (state ),表示 记录已被发现的模式的数量在识别过程中的位 置。 • 带有箭头的线代表记录由一个状态向另一个状态 的转换(transition ),依赖于所标字符的匹配。 状态1是初始状态(start state )或识别过程开始 的状态。初始状态表示为一个“不来自任何地方” 且指向它的未作标识的箭头线。状态2代表单个字 母被匹配的点(表示为从状态1到状态2 的转换且 其上标有letter )。在状态2 中,任何数量的字母 或数字的匹配又回到状态2 。代表识别过程结束的 状态称作接受状态(accepting state ),在图中它 表示为在状态的边界画出双线,可能不止一个。 状态2就是一个接受状态,表示在看到一个字母之 后,随后的任何字母和数字序列(也包括根本没 有)都表示一个正规的标识符。 将真实字符串识别为标识符的过程可通过列出在 识别过程中所用到的状态和转换的序列来表示。 例如,将x t e m p识别为标识符的过程。 • 2.3.1 确定性有穷自动机的定义 • 确定性(deterministic )有穷自动机即下一个状态 由当前状态和当前输入字符唯一给出的自动机。 • 定义:DFA (确定性有穷自动机)M 由字母表、 状态集合S 、转换函数T:S ×→S 、初始状态 s ∈S 以及接受状态的集合A S 组成。由M接受的 0 且写作L(M) 被定义为字符c1c2 . . . cn 串的集合,其 中每个c ∈,存在状态s = T (s , c ), s = T (s , i 1 0 1 2 1 c ), . . . , s = T(s , c ) ,其中s (一个接受状态) 2 n n-1 n n 是A 的一个元素。 注意:S ×指的是S和的笛卡尔积或叉积:集合 对(s, c ),其中s ∈S且c ∈。如果有一个标为c的 由状态s到状态s‘ 的转换,则转换记录为T (s, c) = s 。与M相应的示图如下: • 当状态序列s = T (s ,c ), s = T (s ,c ), . . . , s = T 1 0 1 2 1 2 n (s ,c )存在,且s 是一个接受状态时,表示为: n-1 n n • 两图一样? • DFA定义和标识符示例图示之间的区别: 1:标识符图中的状态使用数字,而定义并未用数 字对状态集合作出限制。实际可为状态使用任何 标识系统包括名字。初始状态为start,接受状态 为in_id (发现了一个字母并识别其后的任何字母 和数字后面的标识符)。状态集合变成了 {start ,in_id},而不是{1 , 2} 。 2 :转换不是用字符标出而是表示为字符集合的名 字。例如名字letter表示根据正则定义的字母表中 的任意字母。 3 :定义将转换表示为一个函数T:S ×→S 。这 意味着T (s,c )必须使

文档评论(0)

1亿VIP精品文档

相关文档