自动机正则文法正则表达式的相互转化.pptVIP

自动机正则文法正则表达式的相互转化.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文档。上传文档
查看更多
例2:为下列表达式文法G[E]编写递归下降识别程序。 E→ E+T | T T→ T*F | F F→ (E) | i 解: 步骤1:消除左递归: E→ TE E→ +TE | ? T→ FT T→ *FT | ? F→ (E) | i 步骤2:编写递归下降识别子程序,这里使用C语言形式。见下页图。 步骤3:编写递归下降识别主程序 main( ) { lookahead=getsymbol( ); E( ); if lookahead ==‘$’ exit; else error( ); } 使用该识别程序识别输入串:i * i + i,首先读入符号i,然后调用子程序E,在E中调用子程序T,在T中调用子程序F,匹配i,读入下一符号*,子程序F调用完毕,回到T。在T中继续调用子程序T‘,匹配*,读入下一符号i。在T’中继续调用子程序F,匹配i,读入下一符号+,回到子程序T‘。在T’中递归调用子程序T‘,不执行任何操作返回T’,进而返回T,进而返回E。在E中继续调用子程序E‘,匹配+,读入下一符号i,调用子程序T。在T中调用子程序F,匹配i,读入下一符号,为输入串结束符$,返回E’。在E‘中递归调用E’,不执行任何操作返回E‘,进而返回E。至此子程序E调用完毕,回到主程序,检查到达输入串末尾,从而识别成功。 由于有些信息需要保留,通常在入口处需保留某些信息,出口时需要恢复。由于递归过程是遵循先进后出 规律,所以通常需要开辟先进后出栈来处理。 巴科斯范式(BNF)    巴科斯范式的左部是一个非终结符,用尖括号括起来;右部是由非终结符号和终结符号组成的任意符号串。具有相同左部的产生规则可以共用一个左部,各右部之间以竖直线分开。例如定义标识符的一组BNF 公式为: 标识符-字母|标识符字母|标识符数字 字母-a|b|c|…..|x|y|z 数字-0|1|2|….|8|9 扩展的巴科斯范式(EBNF) 用EBNF描述语言,直观易懂,便于表示左递归的消除和因子的提取,构造递归下降器时可采用这种定义描述系统语言。 EBNF是在BNF基础上扩展如下三组符号: — 用花括号{α}表示闭包运算α*。 — 用{α} n 0表示α可任意重复0到n次, 特别地,{α}n0=α0= ε。 — 用方括号[α]表示{α}10, 即表示α可以出现也可以不出现,等价于α | ε。 例3 用EBNF改写文法     E→ E+T | T T→ T*F | F F→ (E) | i   可以得到如下:   E→ T{+T } T→ F{*F} F→ (E) | i 与每个非终结符相对应的递归子程序的伪代码如下: 上面描述标识符的BNF可以表示成如下的EBNF 标识符-字母{字母|数字} 字母-a|b|c|…..|x|y|z 数字-0|1|2|….|8|9 设有文法G[E]: E?E+T|E-T|T T?T*F|T/F|F F?P?F|P P?(E)|i 用EBNF表示消除左递归得到文法G?[E]: E?T{(+|-)T} T?F{(*|/)F}   F?P{?P} P?(E)|i  T - FT’  T’ - *FT’ | /FT’ | ε 使用该识别程序识别输入串:i * i + i。首先读入符号i,然后调用子程序E,在E中调用T,在T中调用F,匹配i,读入下一符号*,返回T。在T中匹配*,读入下一符号i;调用F,匹配i,读入下一符号+,返回T,返回E。在E中匹配+,读入下一符号i,调用T。在T中调用F,匹配i,读入下一符号,为输入串结束符$,返回T,返回E,返回主程序。检查到达输入串末尾,从而识别成功。 显然,使用EBNF编写的递归子程序数量较少,分析过程也比较简单。但是需

文档评论(0)

技术支持工程师 + 关注
实名认证
文档贡献者

仪器公司技术支持工程师

1亿VIP精品文档

相关文档