构造一个正则表达式r.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
构造一个正则表达式r

第三章 词法分析 例3.9 正则表达式到正则文法的转换 a(a|b)*(ε|((.|_)(a|b)(a|b)*)) = a(a|b)* |a(a|b)*.(a(a|b)*|b(a|b)*) |a(a|b)*_(a(a|b)*|b(a|b)*) =aA|aB A=aA|bA|ε B=aB|bB|.C|_C C=aA|bA 例 3.10 标识符定义的转换 引入 S S→letter (letter|digit)* 分解为 S→letter A A→(letter|digit)A|ε 执行连接对|的分配律 S→letter A A→letter A|digit A|ε 高级语言词法的简单描述 词法 单词符号的文法,用来描述高级语言中的:标识符、常数、运算符、分界符、关键字 参考教材P73-77,了解如何定义高级语言中的整数、实数……等的相应正则文法。 有穷自动机的物理模型 3.3 单词的识别 3.3.1有穷状态自动机与单词识别的关系 有穷状态自动机和正则文法等价,考虑到状态转换图的直观性,我们从状态转换图出发来考虑词法分析器的设计。 允许在状态转换图的边上标记像digit、letter这样意义明确的符号,other表示例外情况 3.3.1有穷状态自动机与单词识别的关系 考虑到在识别单词的过程中需要执行一些动作,所以将这些动作标记标在基本的状态转换图上。 如果到达终止状态,则意味着读入了一个与当前单词无关的字符,由于这个无关字符是下一个单词的开始符号,所以必须回退一个字符。状态上的*表示向前指针必须回退一个字符。 识别不同进制数的状态图 识别不同进制数的状态图 识别不同进制数的状态图 识别不同进制数的状态图 * * 数据结构与子例程 数据结构 ch 字符变量,存放当前读入的输入字符 token 字符串变量,存放构成单词的字符串 symbol 单词种别(词法分析子程序的返回值) attr 属性(全局变量) 子例程 install_id(token):将token存入符号表,返回入口指针 getchar():从输入缓冲区中读入一个字符放入ch retract():将向前指针回退一个字符,将ch置为空白符 copytoken():返回输入缓冲区中从开始指针lexeme_beginning到向前指针forward之间的字符串 isLetter() isalpha() isalnum() * * 图3.15的状态转换图的实现算法 token token_scan() { char ch; char* token; ch = getchar(); while (ch = =blank || ch = = tab || ch = = newline) { ch = getchar(); lexeme_beginning++; } if (isalpha(ch)) {ch = getchar(); while (isalnum(ch)) ch = getchar(); retract(1); token = copytoken(); return(gettoken(token), install_id(token));} * * else if (isdigit(ch)) { ch = getchar(); while (isdigit(ch)) ch = getchar(); retract(1); token = copytoken(); return(INT, install_num(token)); } else switch(ch) { case ‘*’: ch = getchar(); if(ch = = ‘*’) return(EXP, 0); else { retract(1); return(MULTI, 0); } break; * * case ‘:’: ch = getchar(); if(ch = = ‘=’) return(ASSIGN, 0); else { retract(1); return(COLON, 0); } break; case ‘’: ch = getchar(); if(ch = = ‘=’) return(LE, 0); els

文档评论(0)

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

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

1亿VIP精品文档

相关文档