编译原理习题—LL文法构造预测分析器递归下降分析LRSLRLR分析—陈意云张昱第三版第三章

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理习题—LL文法构造预测分析器递归下降分析LRSLRLR分析—陈意云张昱第三版第三章相关的知识,希望对你有一定的参考价值。

编译原理第三章习题

Homework 4

3.1 3.1 3.1文法:
S → ( L ) ∣ a L → L , S ∣ S F o l l o w ( S ) = , , ) , $ F o l l o w ( L ) = , , ) S→(L)|a\\\\ L→L,S|S\\\\ Follow(S)=\\,,),\\$\\\\\\Follow(L)=\\,,)\\ S(L)aLL,SSFollow(S)=,),$Follow(L)=,)

1

( 1 ) (1) (1)习题 3.8 3.8 3.8,其中 ( b ) (b) (b)给出递归下降语法分析程序。

3.8 : 3.8: 3.8:
( a ) (a) (a)消除习题 3.1 3.1 3.1文法的左递归
消除左递归得到
S → ( L ) ∣ a L → S L ′ L ′ → , S L ′ ∣ ϵ S→(L)|a\\\\L→SL'\\\\L'→,SL'|\\epsilon S(L)aLSLL,SLϵ
( b ) (b) (b) ( a ) (a) (a)的文法构造预测分析器

F i r s t ( S ) = ( , a F i r s t ( L ) = F i r s t ( S ) = ( , a F i r s t ( L ′ ) = , , ϵ F o l l o w ( L ) = ) F o l l o w ( L ′ ) = F o l l o w ( L ) + $ = ) , $ F o l l o w ( S ) = F i r s t ( L ′ ) − ϵ + F o l l o w ( L ) + F o l l o w ( L ′ ) + $ = , , ) , $ \\beginaligned First(S)&=\\(,a\\\\\\ First(L)&=First(S)=\\(,a\\\\\\ First(L')&=\\,,\\epsilon\\\\\\ Follow(L)&=\\)\\\\\\ Follow(L')&=Follow(L)+\\\\$\\=\\),\\$\\\\\\ Follow(S)&=First(L')-\\\\epsilon\\+Follow(L)+Follow(L')+\\\\$\\=\\,,),\\$\\\\\\ \\endaligned First(S)First(L)First(L)Follow(L)Follow(L)Follow(S)=(,a=First(S)=(,a=,ϵ=)=Follow(L)+$=),$=First(L)ϵ+Follow(L)+Follow(L)+$=,),$

( ( ( ) ) ) , , , a a a $ $
S S S S → ( L ) S→(L) S(L) S → a S→a Sa
L L L L → S L ′ L→SL' LSL L → S L ′ L→SL' LSL
L ′ L' L L ′ → ϵ L'→\\epsilon Lϵ L ′ → , S L ′ L'→,SL' L,SL L ′ → ϵ L'→\\epsilon Lϵ

递归下降程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int N = 1e3;
char str[N];
int ind = 0;
void S();// S->(L)|a;
void L();// L->SX
void X();// X-> ,SX|ε
int main() 
    int len;
    int m;
        printf("请输入要分析的串:");
        scanf("%s", str);
        len = strlen(str);
        str[len] = '#';
        str[len + 1] = '\\0';
        S();
        if (str[ind] == '#')
            printf("正确语句!\\n");
        else 
            printf("分析失败!\\n");
        
    return 0;

void L() // L->SX
        S();
        X();

void X() // X-> ,SX|ε
    if (str[ind] == ',') 
        ind++;
        S();
        X();
    

void S() // S->(L)|a;
    if (str[ind] == 'a') 
        ind++;
     else if (str[ind] == '(') 
        ind++;
        L();
        if (str[ind] == ')') 
            ind++;
         else 
            printf("分析失败!\\n");
            exit(0);
        
     else 
        printf("分析失败!\\n");
        exit(0);
    


2

( 2 ) (2) (2)习题 3.11 3.11 3.11,并描述该文法产生的语言。
3.11 3.11 3.11:
构造下面文法的 L L ( 1 ) LL(1) LL(1)分析表
S → a B S ∣ b A S ∣ ϵ A → b A A ∣ a B → a B B ∣ b     F i r s t ( S ) = a , b , ϵ F i r s t ( A ) = a , b F i r s t ( B ) = a , b F o l l o w ( S ) = $ F o l l o w ( A ) = a , b , $ F o l l o w ( B ) = a , b , $ S→aBS|bAS|\\epsilon\\\\ A→bAA|a\\\\ B→aBB|b\\\\ \\ \\\\ \\ \\\\ \\beginaligned First(S)&=\\a,b,\\epsilon\\\\\\ First(A)&=\\a,b\\\\\\ First(B)&=\\a,b\\\\\\ Follow(S)&=\\\\$\\\\\\ Follow(A)&=\\a,b,\\$\\\\\\ Follow(B)&=\\a,b,\\$\\\\\\ \\endaligned SaBSbASϵAbAAaBaBBb  以上是关于编译原理习题—LL文法构造预测分析器递归下降分析LRSLRLR分析—陈意云张昱第三版第三章的主要内容,如果未能解决你的问题,请参考以下文章

编译原理 LL文法判别方法

编译原理 LL文法判别方法

编译原理之LL文法的判断,递归下降分析程序

编译原理11 LL文法的判断,递归下降分析程序

编译原理:LL文法 语法分析器(预测分析表法)

编译原理-第四章 语法分析-4.4 自顶向下的语法分析