- 1、本文档共68页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章语法分析——自顶向下
4.5 递归下降分析法和递归下降分析器 递归下降分析器( Recursive-Descent Parser ) 由一组递归过程组成,且每个过程对应文法的一个VN 的分析程序。 ? 递归下降分析器的基本构造方法 对文法的每个非终结符号,都根据其产生式的各个候选式的结构,为其编写一个对应的子程序(或函数),该子程序完成相应的非终结符对应的语法成份的识别和分析任务 CompilerPrinciples * 递归下降分析分析法 * 递归下降分析法条件 不带回溯地进行分析 文法不含左递归 每个非终结符的所有候选式集SELECT两两不相交 * 例:文法G[E]: E →E+T∣T T →T*F|F F →(E)|i 消除左递归后的文法G(E): E →TE′ E′→+TE′|ε T →FT′ T′→*FT′|ε F →(E)|i 文法G(E)的递归下降语法分析程序如下 递归下降分析分析法 4.5 递归下降分析法和递归下降分析器 E ( ) { T( ); E′( );} CompilerPrinciples * E′( ) { if (c==‘+’) {c=get char(); T( ); E′( );} } T ( ) { F( ); T′( );} F ( ) { { if ( c==‘i’ ) c=get char(); else if ( c==‘(’ ) {c=get char(); E( );} if (c==‘)’ ) c=get char(); else error; } error;} T′( ) { if (c==‘*’) {c=get char(); F( ); T′( )} } 4.5 递归下降分析法和递归下降分析器 设有 $1=i+i*i # CompilerPrinciples * stack E T E T F E T E E T 匹配i Pop E T F 匹配i E T 匹配* E T F 匹配i E T pop 匹配+ E pop i+i*i # i+i*i # i+i*i # i+i*i # i+i*i # i+i*i # i+i*i # i+i*i # i+i*i # 4.5 递归下降分析法和递归下降分析器 递归下降分析器设计工具 — 状态图(FA) 状态图构造:为文法G的每个VN (1) 建立1个初态和1个终态(函数返回态); (2) 为每个产生式 A→x1x2 …xn建立从初态到终态的路径,弧标记为x1x2 …xn; 其中:xi∈(VT∪VN) 例如,E →TE‘ E→+TE |ε * 1 T 0 2 E 2 T 0 3 E 1 + ε 4.5递归下降分析法和递归下降分析器 如何利用状态图构造递归下降分析器 (1) 开始处于G的初态,即分析器的进入点; (2) 在某状态S, 若 a∈VT 当前输入符号为a,分析器扫描指针+1,进入t状态; 若 A∈VN 分析器进入A的开始状态,扫描指针不变,到达A的终态时返回到t ; 若 直接进入t状态,扫描入指针不变; CompilerPrinciples * t a S t A S t ε S 4.5递归下降分析法和递归下降分析器 例如,E →TE‘ E→+TE |ε * 1 T 0 2 E 2 T 0 3 E 1 + ε E′的递归直接进入E′的FA的开始 1 + 0 2 T 3 ε ε 化简 1 + 0 3 ε T 4.5 递归下降分析法和递归下降分析器 E ,E′: T ,T′: F: * 1 + 0 2 T ε 4 * 3 5 F ε 7 ) 6 9 ( E 8 i E →TE′ E′→+TE′|ε T →FT′ T′→*FT′|ε F →(E)|i * 递归下降分析法缺点 必须是LL(1)文法 采用允许递归的高级语言 递归调用多、占内存多、运行速度慢 递归下降分析分析法 本节小结 CompilerPrinciples * 语法分析的任务与语法分析的基本概念。 语法分析的主要方法: 自上而下和自下而上分的概念、过程和依据。 自上而下分析的条件: G不含左递归、不含左公因子。 递归下降分析器的构造原理与实现。 LL(K)及LL(1)分析的实现思想。 LL(1)分析、LL (1)文法与LL (1)分析器的构造。 LL (1)分析表的构造及LL (1)文法的判别。 * * 在FRIST(T?)中,+, )和$在FOLLOW (T?) 中。
文档评论(0)