编译原理基础——习题与上机题解答课件作者刘坚第6-10章节第8章节.pptVIP

编译原理基础——习题与上机题解答课件作者刘坚第6-10章节第8章节.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
  8.1 词法分析器的构造   词法分析器的构造一般有以下几大步骤:用正规式对模式进行描述;由正规式构造NFA;将NFA转化为DFA且最小化;根据最小DFA编写程序并进行测试。 8.1.1 记号的设计   源程序实际上是一个字符序列,词法分析器读取该序列并根据构词规则将其转换为记号流。函数绘图语言的词法分析器至少需完成以下三个任务:   (1) 滤掉源程序中的注释和无用成分(空格、TAB等);   (2) 输出记号, 供语法分析器使用;   (3) 识别非法输入,并将非法输入作为出错记号提供给语法分析器,以便进行出错处理。   记号一般由两部分组成:记号的类别和记号的属性。根据函数绘图语言的特点,可以为记号设计如下的数据结构,其中记号的类别和第一个属性是每个记号都必须有的信息,而后两个属性,则分别是为常数和函数设计的。   struct Token // 记号的数据结构   { Token_Type type; // 类别    char * lexeme; // 属性,原始输入的字符串    double value; // 属性,若记号是常数则是常数的值    double (* FuncPtr)(double); // 属性,若记号是函数则是函数的指针   };   根据上节对记号的分析,可以将函数绘图语言的记号类别进行如下划分,且用枚举类型表示它们。   enum Token_Type // 记号的类别   { ORIGIN, SCALE, ROT, IS, // 保留字    TO, STEP, DRAW, FOR, FROM, // 保留字    T, // 参数    SEMICO, L_BRACKET, R_BRACKET, COMMA, // 分隔符    PLUS, MINUS, MUL, DIV, POWER, // 运算符    FUNC, // 函数    CONST_ID, // 常数    NONTOKEN, // 空记号    ERRTOKEN // 出错记号   };   对于源程序中出现的保留字、参数、分隔符和运算符等,采用“一字一码”的形式,即一个记号仅有一个实例;函数和常数的记号可以有多于一个的实例,如FUNC的实例可以是sin,也可以是cos等;空记号用于标记源程序文件的结束,即遇到文件结束符,词法分析器就返回一个空记号,以通知语法分析器所分析的源程序已经结束;出错记号用于标记非法输入,当分析到非法字符或字符串时,词法分析器就返回一个出错记号,以便语法分析器进行相应的语法错误处理。 8.1.2 模式的正规式表示   函数绘图语言的词法可用下述正规式集合表示,其中的letter和digit是辅助定义。   描述词法的正规式   ----------------------------------------------------------------------  letter = [a–zA–Z]   digit = [0–9]   COMMENT = //|--   WHITE_SPACE = ( |\t|\n)+   SEMICO = ;   L_BRACKET = (   R_BRACKET = )   COMMA = ,   PLUS = +   MINUS = –   MUL = *   DIV = /   POWER = **   CONST_ID = digit+(. digit*)?   ID = letter+(letter|digit)*   ----------------------------------------------------------------------  正规式COMMENT和WHITE_SPACE用于过滤源程序中的注释和白空(空格、Tab、回车等),由于注释和白空并不需要出现在语法分析以后的部分,因此仅在词法分析器中处理它们,没有对应的记号供语法分析器使用;从SEMICO到POWER的正规式规定了分隔符和运算符; CONST_ID描述了字面量形式的常数;而ID给出了函数绘图语言中所有的标识符的模式。   特别值得提出的是CONST_ID和ID的设计。由于我们是手工构造词法分析器,而正规式个数越少越便于程序的编写,因此设计上采用相同模式的记号共用一个正规式的方法。常数的字面量部分设计为CONST_ID,而常量名则

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档