遞歸下降分析程序


實驗一、遞歸下降程序分析實驗

專業:商業軟件2班   姓名:蔡瑞奇  學號:20150611061

一、        實驗目的

 

     練習構造遞歸下降語法分析程序的方法,熟悉上下文無關文法的使用,加深對課堂教學的理解;提高語法分析方法的實踐能力

 

二、        實驗內容和要求

      利用c語言構造語法分析程序

三、        實驗方法、步驟及結果測試

源程序名:壓縮包文件(rarzip)中源程序名×××.c

可執行程序名:×××.exe

  1. 1.      原理分析及流程圖

主要總體設計問題。

(包括存儲結構,主要算法,關鍵函數的實現等)

·用戶輸入一段表達式,然后調用S這個函數,如果遇到a或^這兩個字符的話,就跳到下一個字符,否則如果是左括號的話,就讀取下一個字符並調用這個T函數,在T函數里面又調用了S和X這兩個函數,同樣的,在X函數里,先判斷是不是‘,’如果不是,讀取下一個字符,然后再調用S和X兩個函數。

  1. 2.      主要程序段及其解釋:

實現主要功能的程序段,重要的是程序的注釋解釋。

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

char str[10];

int index=0;

void S();

void X();

void T();

main()

{

    int len;

    int m;

    printf("請輸入要測試的次數:\n");

    scanf("%d",&m);

    while(m--)

    {

           printf("請輸入表達式:\n");

           scanf("%s",str);

           len=strlen(str);

           str[len]='#';

           str[len+1]='\0';

           S();

           printf("語句正確!\n");

           strcpy(str,"");

           index=0;

    }

    return 0;

}

void S()

{

    if(str[index]=='a'||str[index]='^')

    {

           index++;

    }

    else if(str[index]=='(')

    {

           index++;

           T();

           if(str[index]==')')

           {

                  index++;

           }

           else

           {

                  printf("分析失敗!");

                  exit(0);

           }

    }

           else

           {

                  printf("分析失敗!");

                  exit(0);

           }

}

void T()

{

    S();

    X();

}

void X()

{

    if(str[index]==',')

          

    {index++;

           S();

           X();

    }

    else

    {

           printf("分析失敗!\n");

           exit(0);

    }

}

  1. 3.      運行結果及分析

一般必須配運行結果截圖,結果是否符合預期及其分析。

   (截圖需根據實際,截取有代表性的測試例子)

感覺這個結果和我想要的不大一樣,每次輸入一個a的時候,最后的結果老是能夠得到正確的結果,例如像a????這樣的語句它也能夠提示正確,反正它第一個輸入的只要是a就會提示正確。

 

 

一、        實驗總結

心得體會,實驗過程的難點問題及其解決的方法。

個人感覺這個不難,只是用遞歸函數就可以做了,不過難的是在那些函數里面如何去判斷條件,這個才是重難點,因為本身編譯原理就難,再加上沒有太多的電腦知識基礎,所以寫出來的程序還是有些問題的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM