我是靠谱客的博主 舒心大侠,最近开发中收集的这篇文章主要介绍递归下降识别器——编译原理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

作业用的简化版递归下降识别器 :



例子说明:

文法G[S]:

S-> A|B

A->aM

M->A|#

B->bN

N->B|#

 

①文法不含左递归

 

 

是否=>#

First

follow

S

{a,b}

#

A

{a}

#

B

{b}

#

M

{a,#}

#

N

{b,#}

#

 

 

①文法不含左递归

M N的产生式至多有一个#,因此:

First(A) follow(M) =

First(B) follow{N} =

S A B的产生式没有#, 因此

First(A) first(B) =

First{aM}={a}

First{bN} ={b}

 

因此此文法符合LL(1)判断

 

递归下降分析:

Select(S->A) = {a}

Select(S->B)={b}

Select(A->aM)={a}

Select(M->A)={a)

Selec(M->#)=(#)

Select(B->bN)={b}

Select(N->B)={b}

Select(N->#)={#}

 

Void praseS(){
    Switc(lookahead){
        Case a:
            ParseA();
            Break;
        Case b:
            ParseB();
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }
}
Void praseA(){
    Switc(lookahead){
        Case a:
            MatchToken(a)
            ParseM();
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }
}

Void praseB(){
    Switc(lookahead){
        Case b:
            MatchToken(b)
            ParseN();
            Break;
         Defalut:
            Print(“error”);
            Exit();
    }
}

Void praseM(){
    Switc(lookahead){
        Case a:
            ParseA();
            Break;
        Case #:
            MatchToken(#)
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }
}


Void praseN(){
    Switc(lookahead){
        Case b:
            ParseB();
            Break;
        Case #:
            MatchToken(#)
            Break;
        Defalut:
            Print(“error”);
            Exit();
    }    
}

最后

以上就是舒心大侠为你收集整理的递归下降识别器——编译原理的全部内容,希望文章能够帮你解决递归下降识别器——编译原理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部