语法、词法分析结合.docVIP

  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文档。上传文档
查看更多

语法、词法分析结合

一、实验目的与要求

通过设计、编制、调试一个典型的语法分析程序〔任选有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、SLR(1)、LR(1)等,作为编制语法分析程序的依据〕,对扫描器所提供的单词序列进行语法检查和结构分析,实现并进一步掌握常用的语法分析方法。

二、实验内容

选择对各种常见高级程序设计语言都较为通用的语法结构作为分析对象,给出其文法描述〔注意应与所采用的语法分析方法比拟贴近〕,设计并实现一个完整的语法分析程序〔分析过程暂不嵌入任何的语义动作〕。

输入:由实验一输出的单词串,例如:UCON,PL,UCON······

输出:对于输入的符号串,假设是给定文法定义的合法句子,那么输出“RIGHT”,并且给出每一步分析过程;假设不是句子,即输入串有错误,那么输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。

三、一般实现方法说明

例如,以如下文法G2所定义的算术表达式的赋值语句作为分析对象,编写并调试一个语法分析程序。

G2[复合语句]:

复合语句→begin语句表end

语句表→语句|语句;语句表

语句→赋值语句

赋值语句→变量:=算术表达式

算术表达式→项|算术表达式+项|算术表达式-项

项→因式|项*因式|项/因式

因式→变量|常数|(算术表达式)

变量→标识符

标识符→标识符字母|标识符数字|字母

常数→整数|浮点数

整数→数字|数字整数

浮点数→?整数|整数?整数

字母→A|B|C|…|X|Y|Z|a|b|c|…|x|y|z

数字→0|1|2|…|9

说明:1〕可将以上文法G2[复合语句]中的语法范畴常数替换为实验一中的文法G1[无符号数],并将单词类型——无符号常数进一步细分成整数和浮点数两类单词。2〕注意修改实验一中的词法分析程序,将它编写为子程序的形式,以便供语法分析程序调用,从而在对源程序的一遍扫描过程中,同时完成词法和语法分析任务。3〕应加强错误检查,对输入符号串中的词法、语法错误,给出必要的说明信息,尽可能多地、确切地指出错误的位置、原因和性质。例如,在词法分析阶段,对当前正在处理的字符ch,可进一步定义一些与该字符相关的信息row和col,分别表示该字符所在的行和列,这些内容在出错处理时用来提供和源程序位置相关的信息。即定义:

charch;/*Thecurrentcharacter*/

introw;/*Thelinenumberpositionofthecurrentcharacter*/

intcol;/*Thecolumnnumberpositionofthecurrentcharacter*/

四、根本实验题目

题目:对算术表达式的一个简化子集,根据如下其语法结构的BNF定义G3[算术表达式],任选学过的一种语法分析方法,针对运算对象为无符号数的四那么运算,编制一个语法分析程序。

G3[算术表达式]:

算术表达式→项|算术表达式+项|算术表达式-项

项→因式|项*因式|项/因式

因式→运算对象|(算术表达式)

假设将非终结符号算术表达式、项、因式和运算对象分别用E、T、F和i代表,那么G3可写成:

E→T|E+T|E-TT→F|T*F|T/FF→i|(E)

本局部用SLR(1)分析器的开发。

可以根据文法G3[算术表达式]构造识别其全部活前缀的DFA,再据此构造SLR(1)分析表,然后编程实现SLR(1)分析表的驱动程序,即LR分析器的总控程序,完成对算术表达式的识别。主要是用三维字符数组构造一个slr〔1〕的状态转移表,然后主控程序控制查询三维数组,调用一次词法分析再调用一次语法分析。

源程序

说明:因为后面两个程序都是在第一个根底上改良的,所以工程的名字始终是“词法分析”

**********************

#includestdio.h

#includectype.h

#includestring.h

#includemath.h

#includestdlib.h

#defineLB0//左括号

#defineRB1//右括号

#definePL2

#defineMI3

#defineMU4

#defineDI5

#defineUCON6//Supposetheclassnumberofunsignedconstantis7

#defineOVER7

//#defineINT7

#defi

文档评论(0)

147****4268 + 关注
实名认证
文档贡献者

认真 负责 是我的态度

1亿VIP精品文档

相关文档