清华大学:《编译原理》课程教学资源(PPT课件)第五章 LL(1)文法及其分析程序

第五章LL(1)文法及其分析程序 5.1预测分析程序 5.2LL(1)文法 ● FIRST和FOLLOW集定义和计 算 LL(1) 文法定义 ● LL(1)分析程序的生成 5.3 非LL(1)文法的改造
1 第五章 LL(1)文法及其分析程序 5.1 预测分析程序 5.2 LL(1)文法 • FIRST和FOLLOW集定义和计 算 • LL(1) 文法定义 • LL(1)分析程序的生成 5.3 非LL(1)文法的改造

自上而下分析算法 要点: S->AB A->aA|ε .由根向下构造语法树 B->b|bB .构造最左推导 aaab. 推导出的终结符是否与 S 当前输入符匹配 →AB S->AB →aAB A->aA aaab →aaAB A->aA →aaaAB A->aA →aaa s B A->8 →aaab B->b 2
2 自上而下分析算法 要点: .由根向下构造语法树 .构造最左推导 .推导出的终结符是否与 当前输入符匹配 S aaab A B a A S –> AB A –> aA | B –> b | bB aaab. S AB S –> AB aAB A –> aA aaAB A –> aA aaaAB A –> aA aaa B A –> aaab B –> b

带回溯的自上而下分析 S->AB aaabb. A->aAε S B->bbB (1)→A. S->AB aa ab b. S (2)→aA. A->aA (1)→A. S->AB (3)→aaA.. A->aA (2)→aA. A->aA (4)→aaaA.. A->aA (3)→aaA.. A->aA (5)→aaaεB A->8 (4)→aaaA.A->aA (6)→aaa bB B->bB (5)→aaaεB.A->e (7)→aaabb B->b (6)→aaab B->b 3
3 带回溯的自上而下分析 S –> AB A –> aA | B –> b | bB a a a b b. S (1) A... S –> AB (2) aA... A –> aA (3) aaA... A –> aA (4) aaaA... A –> aA (5) aaa B... A –> (6) aaab B –> b aaabb. S (1) A... S –> AB (2) aA... A –> aA (3) aaA... A –> aA (4) aaaA... A –> aA (5) aaa B A –> (6’) aaa b B B –> bB (7) aaabb B –> b

预测分析程序Predictive parser 无回溯的自顶向下分析程序 特征一一根据下一个输入符号为当前要处理 的非终结符选择产生式 要求一一文法是L(1)的 第一个L从左到右扫描输入串 第二个L生成的是最左推导 1向前看一个输入符号(lookahead) 预测分析程序的实现技术 1递归下降子程序 2表驱动分析程序 4
4 预测分析程序Predictive parser 无回溯的自顶向下分析程序 特征——根据下一个输入符号为当前要处理 的非终结符选择产生式 要求——文法是LL(1)的 第一个L 从左到右扫描输入串 第二个L 生成的是最左推导 1 向前看一个输入符号(lookahead) 预测分析程序的实现技术 1 递归下降子程序 2 表驱动分析程序

PL/O语言的EBNF 冬〈程序〉:=〈分程序〉 冬〈分程序〉::=[〈常量说明部分〉][(变量说明部 分〉][过程说明部分〉]〈语句〉 〈常量说明部分〉:=C0NST〈常量定义部分〉{,〈常 量定义〉}; 〈变量说明部分):=VAR〈标识符){,〈标识符〉}; 〈过程说明部分〉:=PROCEDURE 〈标识符〉 (分程序) 〈过程说明部分〉}; 冬〈语句〉= 〈标识符》:=〈表达式)IF〈条件) then〈语句〉|CALL..READ..BEGIN〈语句〉{;〈语 句〉}END WHILE... 5
5 PL/0语言的EBNF ❖〈程序〉∷=〈分程序〉. ❖〈分程序〉∷=[〈常量说明部分〉][〈变量说明部 分〉][〈过程说明部分〉]〈语句〉 ❖〈常量说明部分〉∷=CONST〈常量定义部分〉{,〈常 量 定义〉}; ❖〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉}; ❖〈过程说明部分〉∷= PROCEDURE 〈标识符〉〈分程序〉 {;〈过程说明部分〉}; ❖〈语句〉∷= 〈标识符〉:=〈表达式〉 |IF 〈条件〉 then〈语句〉|CALL…|READ…|BEGIN 〈语句〉{;〈语 句〉} END|WHILE…|…

begin (*statement*) begin if sym=ident getsym; then (*parsing ass.st.* if sym<>lparen begin then error(34) getsym; else if sym=becomes repeat then getsym getsym; else error(13); if sym comma; then if sym<>rparen (parsing read st.*) then error (33); end 6
6 begin(*statement*) if sym=ident then (*parsing ass.st.*) begin getsym; if sym=becomes then getsym else error(13); expression(fsys); end else if sym=readsym then (* parsing read st.*) begin getsym; if sym<>lparen then error(34) else repeat getsym; if sym <> ident then error(35) else getsym until sym<>comma; if sym<>rparen then error(33); end

递归下降子程序 program -function_list function list -functionfunction list s function->FUNC identifier parameter_list statement void ParseFunction ( { MatchToken (T FUNC); ParseIdentifier(); MatchToken (T LPAREN); ParseParameterList () MatchToken (T RPAREN); Parsestatement ()
7 递归下降子程序 program –> function_list function_list –> function function_list | function –> FUNC identifier ( parameter_list ) statement void ParseFunction() { MatchToken(T_FUNC); ParseIdentifier(); MatchToken(T_LPAREN); ParseParameterList(); MatchToken(T_RPAREN); ParseStatement(); }

void MatchToken (int expected) { if (lookahead !expected){ printf("syntax error \n"); exit(0); else /if match,consume token and move on lookahead yylex(); } 8
8 void MatchToken(int expected) { if (lookahead != expected) { printf("syntax error \n"); exit(0); } else // if match, consume token and move on lookahead = yylex(); }

例:递归子程序实现 表达式的语法分析 表达式的EBNF (表达式〉:=[+-]〈项〉{(+-)〈项〉} (项〉:=〈因子〉{(*/)〈因子〉} 〈因子〉:=ident number(’〈表达式》 )’ 9
9 例:递归子程序实现 表达式的语法分析 表达式的EBNF 〈表达式〉∷=[+|-]〈项〉{(+|-)〈项〉} 〈项〉∷=〈因子〉{(*|/)〈因子〉} 〈因子〉∷=ident|number|‘(’〈表达式〉 ‘)’

procedure expr; begin if sym in plus,minus then begin getsym;term; end else term; while sym in [plus,minus]do begin getsym;term; end end; 10
10 procedure expr; begin if sym in [ plus, minus ] then begin getsym; term; end else term; while sym in [plus, minus] do begin getsym; term; end end;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学:《编译原理》课程教学资源(PPT课件)第二章 PL/0编译程序.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第九章 符号表.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第三章 词法分析.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第一章 概述.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第六章 LR分析程序及其自动构造.ppt
- 兰州大学:《编译原理》课程电子(PPT教学课件)第一讲 引论 CompilerPrinciples.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)编译原理课程设计指南.ppt
- 计算机科学丛书:《编译原理》书籍PDF电子版(美)Alfred V.Aho Monica s.Lam Ravi Sethi Jeffrey D.Ullman,机械工业出版社,中文第二版,共12章.pdf
- 《编译原理》课程教学资源(书籍文献)Lex和Yacc从入门到精通.pdf
- 中国科学技术大学:《编译原理》课程教学资源(教程)编译原理实验教程(草稿).pdf
- 石河子大学:《编译原理》课程教学资源(PPT课件)第十章 运行时空间组织.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第十一章 代码优化.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第六、七章 语法分析——自下而上分析.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第八章 语法制导翻译和中间代码生成.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第九章 符号表.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第四章 词法分析.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第五章 语法分析——自上而下分析.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第三章 文法和语言.ppt
- 石河子大学:《编译原理》课程教学资源(PPT课件)第一章 引论(负责人:张丽、郑瑶).ppt
- 清华大学出版社:《编译原理习题与解析》课程教学资源(辅导书电子版,编著:伍春香,第2版,共13章).pdf
- 清华大学:《编译原理》课程教学资源(PPT课件)第八章 语法制导翻译和中间代码生成.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第十一章 代码优化.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第十二章 代码生成.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)RUN-Time Organization.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第十章 目标程序运行时的组织.ppt
- 清华大学:《编译原理》课程教学资源(PPT课件)第四章 文法和语言.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)编译原理知识点回顾(主讲:林奕).ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)语法分析程序的自动生成工具YACC简介.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第1章 绪论(主讲:康慕宁).ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第2章 前后文无关文法和语言(2.1-2.2).ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第2章 前后文无关文法和语言(2.3-2.5).ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第3章 词法分析及词法分析程序(3.1)设计扫描器时应考虑的问题.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第3章 词法分析及词法分析程序(3.2)正规文法和状态转换图.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第3章 词法分析及词法分析程序(3.3.1-3.3.4).ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第3章 词法分析及词法分析程序(3.3.5)具有ε动作的NFA的确定化.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第3章 词法分析及词法分析程序(3.4)正规表达式与正规集.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第4章 语法分析和语法分析程序(4.1)自顶向下的语法分析.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第4章 语法分析和语法分析程序(4.2-4.2.3).ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第4章 语法分析和语法分析程序(4.2.4)LR分析法.ppt
- 西北工业大学:《编译原理》课程教学资源(PPT课件)第5章 语法制导翻译及中间代码生成(5.1-5.2).ppt