编译器笔记11-语法分析-递归与非递归的预测分析

递归的预测分析法

递归的预测分析法是指:在递归下降分析中,根据预测分析表进行产生式的选择。根据每个非终结符的产生式和LL(1)文法的预测分析表,为每个非终结符编写对应的过程:

过程.png
主过程.png

PROGRAM表示为程序,其中program与end为关键字。DELIST表示标识符的序列。STLIST表示语句的序列,s表示语句。

PROGRAM的过程.png
DECLIST的过程.png
DECLISTN的过程.png
STLIST的过程.png
STLISTN的过程.png
TYPE的过程.png

若过程中不发生错误则说明输入是符号文法的。

非递归的预测分析法

非递归的预测分析不需要为每个非终结符编写递归下降过程,而是根据预测分析表构造一个自动机,也叫表驱动的预测分析。

自动机.png

下推自动机比有穷自动机识别能力更强,有穷自动机的识别能力不强是因为其识别能力不强。如若想识别上图例子中语言的句子,就需要读入a的个数。但有穷自动机不具备专门的存储器因此它利用不同的状态记录a的个数n。但n是趋于无穷而有穷自动机的状态数是有穷的,这就导致有穷自动机无法识别这样的语言。

非递归的预测分析法.png

上图输出的产生式序列就相当于一个最左推导

表驱动的预测分析法

输入:一个串w和文法G的分析表M
输出:如果w 在L(G) 中,输出w的最左推导;否则给出错误提示
方法:最初,语法分析器的格局如下:输入缓冲区中是w$ ,G的开始符号位于栈顶,其下面是$。下面的程序使用预测分析表M生成了处理这个输入的预测分析过程

预测分析过程.png

递归的预测分析法vs.非递归的预测分析法

递归的预测分析法vs.非递归的预测分析法.png

递归预测分析法是根据产生式的右部来编写程序,因此直观性比较好。

预测分析法实现步骤:

  1. 构造文法
  2. 改造文法:消除二义性、消除左递归、消除回溯。
  3. 求每个变量的FIRST 集和FOLLOW 集,从而求得每个候选式的求得每个候选式的SELECT 集。
  4. 检查是不是 LL(1) 文法。若是, 构造预测分析表。
  5. 对于递归的预测分析,根据预测分析表为每一个非终结符编写一个过程;对于非递归的预测分析,实现表驱动的预测分析算法;

预测分析中的错误处理

预测分析中的错误检测

两种情况下可以检测到错误

  • 栈顶的终结符和当前输入符号不匹配
  • 栈顶非终结符与当前输入符号在预测分析表对应项中的信息为空
预测分析中的错误恢复

恐慌模式:

  1. 忽略输入中的一些符号,直到输入中出现由设计者选定的同步词法单元 (synchronizing token) 集合中的某个词法单元。其效果依赖于同步集合的选取。集合的选取应该使得语法分析器能从实际遇到的错误中快速恢复。

例如可以把FOLLOW(A)中的所有终结符放入非终结符A的同步记号集合。这么做的原因是当栈顶为非终结符A的时候检测到错误,说明A在识别过程中遇到了问题,此时就会放弃对A这个成分进行识别而从它后面的成分继续分析,因此当FALLOW(A)符号出现的时候就可以立即进行同步。此时将A出栈,从它后面的成分继续进行分析。

  1. 如果终结符在栈顶而不能匹配,一个简单的办法就是弹出此终结符。
同步词法单元.png

由于E'与T'有空产生式,它们的FOLLOW集中对应的符号,对应对空产生式的应用,因此它们不作为同步词法单元。

分析表的使用方法:

  • 如果M[A,a ]是空,表示检测到错误,根据恐慌模式忽略输入符号a。
  • 如果M[A,a ]是synch,则弹出栈顶的非终结符A,试图继续分析后面的语法成分。
  • 如果栈顶的终结符和输入符号不匹配,则弹出栈顶的终结符。
恐慌模式处理错误.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352