1、撅氏房乌摩府押褥渝资焉衰泄唾派尿哗杏苇蔗坯敢裔狗传耐综圾第索潜波第四章语法分析一语法1编译原理LL(1)分析语法分析算法之炙臻赚假阅娘骇宠陌囊淘镑绳五臃福邻段赦皿黑匹铁涅簿厚戚非立叠咀锑第四章语法分析一语法2语法分析器编译程序后续部分符号表扫描器原程序语法分析树单词符号取单词语法分析及语法分析程序(语法分析程序又称分析器 )语法分析器的地位和结构疽压匙尚美芥饥币驾态缕栏抒堆裔操唾道段炕庄谗鲁迸植火社批匙饶垃身第四章语法分析一语法3序 (语法分析程序的功能 ) 语法分析程序又简称为分析器,它以单词串形式的源程序作为输入或分析的对象,其基本任务是:根据程序设计语言的语法规则 (即定义该语言的前后文
2、无关文法 ),分析源程序的语法结构,即分析如何由这些单词组成该源程序的各种语法成分 (如下标变量、函数、各种表达式、各程序语句等等 ),并在分析过程中进行语法正确性检查,产生内部形式的中间代码,供编译程序后续阶段处理。郑纷澡必临瘸欧继颐嗣切藐痪咀慈喘倦目赦惊亭功赌鲸集讼郧伤徘回浪谩第四章语法分析一语法4序 (语法分析程序的功能 )目前,已存在许多语法分析方面的方法,但就产生语法树的方向而言,可大致把它们分为自顶向下分析和自底向上分析两大类。自顶向下分析 :介绍递归下降分析法和预测分析法;自底向上分析 :介绍算符优先分析法和 LR分析法。这几种分析方法各有优缺点。但都是当今编译程序构造的实用方法
3、。孟宴烃驯柏稍喝撒蘸蝴哇郭定系胯嘶品凄袍究夹镁烯翻吓森费候忽禽岗戏第四章语法分析一语法54.1 自顶向下的语法分析定义自顶向下分析法也称 面向目标 的分析方法,所谓自顶向下的语法分析,是指对于给定输入串 w,试图为其构造一个从文法开始符号到 w的最左推导 ,或为 w自上而下地构造一棵以 S为根结点的语法树。如果这一尝试得到成功,则证明 w是相应文法的一个句子;反之,则不是。猾症其嫡劳署颂垛埋贿容哭把申辫蜒因薯脐鼠银泊葬疼度年蘸寝叹唉趁泡第四章语法分析一语法64.1 自顶向下的语法分析 自顶向下分析法又可分为确定的和不确定的两种 , 确定的分析方法需对 文法有一定的限制,但由于实现方法简单、直观
4、,便于手工构造或自动生成语法 分析器 ,因而仍是目前常用的方法之一。 不确定的方法即带回溯的分析方法 ,这种 方法实际上是一种举穷的试探方法 ,因此效率低,代价高,因而极少使用。粤祝淫究扎啥调锭虞痢丛偿肘累变淬头朗串吼翱阜窑土鸵椭烽德壶帛喷怀第四章语法分析一语法74.1 自顶向下的语法分析在进行自顶向下的语法分析时,通常有下列两个障碍须加以解决:(1)由于采取了最左推导,故当相应文法 G中含有左递归的非终结符号时,便会使语法分析过程陷入循环不已的状况。(2)采用最左推导以实现对符号串 w的匹配,实际上是一个用文法产生式的诸候选式反复进行试探的过程,这势必会出现大量的回溯,从而导致语法分析效率的
5、大幅度下降。因此,欲实现自顶向下的语法分析,其首要任务是改造程序设计语言的文法,以消除其中的左递归和避免回溯的出现。样孽匿昼矩诅今辐支倚籽您处凡超己保亏棚眩渠坟侠逼铜诽与附涝纤砰矢第四章语法分析一语法8主要内容 自 顶 向 下 的 语 法 分 析1.消除文法的左递归2.回溯的消除及 LL(1)文法3.First和 Follow集的定义和计 算4.递归下降分析法5.预测分析法6.非 LL(1)文法的改造苫挞陵匣堵价剪痞能吊潞凄味动弧缝跟身睁兼谈泰寡摹蛤科粳兔胎捍溶隘第四章语法分析一语法9自 顶 向 下 分 析 的一 般 过 程 和 问 题盲击讼饿廉堕怜练狡锹街踢画烧档樊邱惯告贮同拔撅汉议舌孰趋价
6、仍邑味第四章语法分析一语法101.文法的定义 定义 2.1(前后文无关文法 ): 文法 G定义为四元组( VN, VT, P, S) VN :非终结符集 VT :终结符集 P: 产生式(规则)集合 U= S: 开始符号 S VN VNVT= V=VN VT,称为文法 G的文法符号集合堆懒烘簇计返莆粮摊涨申俩腹初诗川乖凿疮瓮完雏找戏叁猛素牌晨逮啥沾第四章语法分析一语法112.句型、句子、语言的定义句型有文法 G S,若 S x,则称 x是文法 G的句型。句子有文法 G S ,若 S x ,且xV T*,则称 x是文法 G的句子。例: G S : S0S1 , S01S 0S1 00S11 000
7、S111 00001111久种投芽色旦蛤凿概甸诱疚程尺鹏陌菲磨乡俭柜大藩颗超雅砂秧姿煤当翔第四章语法分析一语法123.上下文无关文法 的句型 推导 最左(最右)推导:在推导的任何一步 ,其中 、 是句型,都是对 中的最左(右)非终结符进行替换 最右推导被称为规范推导。由规范推导所得的句型称为规范句型 自顶向下分析 :最左推导塞灶抉账补扭廖箕充乔爆泞陪步护挺裁欢分倍放寄身拘吠啡悄涛留惠熊罚第四章语法分析一语法134.句型的分析 句型分析 就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。 在语言的编译实现中,把完成句型分析的程序称为 分析程序或识别程序。分析算法又称识别算法。 从左到右
8、 的分析算法,即总是从左到右地识别输入符号串,首先识别符号串中的最左符号,进而依次识别右边的一个符号。奈支抚醒寺皋席挎接挫芽箩孰辖慌涝讣爷呀猾梳投鼎嘶挠脊哪凡凹廊盒讣第四章语法分析一语法144.句型的分析 分析算法分类: 自顶向下分析法:从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的 最左 推导。 自底向上分析法:从输入符号串开始,逐步进行归约 (最右推导的逆过程),直至归约到文法的开始符号。锗列环裕埂蛋嵌咆逞乡舶憋脆翟芋寻率晃炔赘苫靶耿汝晤艰掏搁哨口陈得第四章语法分析一语法155.算术表达式的文法及语法分 析 文法 GE:E E+T|T T T*F|FF (E)| I砂钻下滇
9、非锈撇屠孝融工曝唬撤乌衔可畦腆许伙怯迈秤七龚西蕾瞧砰乎灾第四章语法分析一语法165.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导: EE 语法树诲颁鱼撅菏到叫兴碎凄看筑膊棺尧因母慑妇墓兴谴确蓉习宿汽困巍梳码址第四章语法分析一语法175.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导: EE+TE + TE 语法树枪烯舀姑杭寅如宽戚秀即徽阎殖暑悉寐攘乱题钥亢刺拢绅搭追阅侄菇郸躺第四章语法分析一语法185.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导: EE+TT+T E + TT
10、E 语法树念鹿矗茎摘晓校撩戴祈铁钡练慷磺岂塞位撞再莽泽馒蛆象反悯驮胃洋森窝第四章语法分析一语法195.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导: EE+TT+TF+T E + TTFE 语法树霹匡喊决苞杰舶蜗适疗嘎俱勾溺荆至寂揭奇粟幕吩譬泌美赋嗣槐青钎售掐第四章语法分析一语法205.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导:EE+TT+TF+Ta+T E + TTFaE 语法树座竭蟹狰物峪俄弹迢海需戍嘲阵弟拄统谱物细考榴妹伴攀界窖范脚七沪犀第四章语法分析一语法215.算术表达式的文法及语法分 析(自顶向下的
11、语法分析 ) 表达式: a+b*C 最左推导:EE+TT+TF+TA+Ta+T*F E + TT T * FFaE 语法树隐耕赫眶矗裳茧洛当解嫉糯翱姑含绽木姿顶狞菜瓤余栽震默台艳慢柱饥伞第四章语法分析一语法225.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导:EE+TT+TF+TA+Ta+T*F a+F*FE + TT T * FF FaE 语法树步阿悬篇誓神堑搅棱燎阮热美氨痴胜雄棺属旺蝗吕咙卜授跑堑扛素磐峙矮第四章语法分析一语法235.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导:EE+TT+TF+TA+Ta+T
12、*F a+F*Fa+b*FE + TT T * FF Fa bE 语法树唾秉宙艘治挡炯孜魂奈保沦哈渊竟棒懒瑞炸瑚铡湿炒优龋钒乙炽等忘奄躲第四章语法分析一语法245.算术表达式的文法及语法分 析(自顶向下的语法分析 ) 表达式: a+b*C 最左推导:EE+TT+TF+TA+Ta+T*F a+F*Fa+b*Fa+b*cE + TT T * FF Fa bcE 语法树梅希谁瞥馁牛久模囱铝诧绑忽桃郊忱邀锐礼掏漫珊爪介凿揖殿奢铬侮沥叶第四章语法分析一语法255.算术表达式的文法及语法分 析(自顶向下的语法分析 )表达式 :a+b*C最左推导 :EE+TT+TF+Ta+Ta+T*Fa+F*Fa+b*Fa
13、+b*cE + TT T * FF Fa bcE 语法树唾源剖穆藩浩综荫帆辅政碰肇途耪矾耗偏翁加裙臂恩呻厘哄千舞昌畸滩演第四章语法分析一语法266.自上而下语法分析的一般过程 例:文法 G: S cAdA abA a识别输入串 w=cabd是否该文法的句子S S S(1) c A d c A d(2) a b推导过程: S cAd cabd (3)跪霸馏旬愿细昔兹省棱蓬趴沪酚变梳垦弦挑颓咨霹贤汕安烧孟徘姐好思闯第四章语法分析一语法27从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的 最左 推导。文法 G: S cAd A ab |a 识别输入串 w=cad试探推导过程: S cA
14、d cabdS S Sc A d c A da b 回朔 :试探推导过程: S cAd cad Sc A da传耸题囱戍绥送曾块贰鞋肠壕际奴吠抉巢结凄荔拼迢门直活掐漱避肚酷终第四章语法分析一语法287.左递归文法导致分析过程循环不已 GS: SSa Sb L=ban | n1 W=baa S 试探推导 试探推导 bSS aS aa循环不已瓤划三声缝狡沥的照湿裤臀胞督渐颇裕原腮载苯御恰对罕砚鬼扶琼崔锌拳第四章语法分析一语法298.自顶向下语法分析 存在的问题1)如何选择使用哪个产生式进行推导?假定要被代换的最左非终结符号是 V,且有 n条规则: V 1 |2 | N ,那么如何确定用哪个右部 i去替代 V?2)如果文法是 左递归的,则必然导致分析过程循环不已 (死循环 ) 。蔚宽夸氢敢蛆企韭绪媚崖阅藩垛沫诲浴挛培胺亲龋挎怜豁翘坟唐件苫契珐第四章语法分析一语法30