實驗一、遞歸下降程序分析實驗
專業:商業軟件2班 姓名:蔡瑞奇 學號:20150611061
一、 實驗目的
練習構造遞歸下降語法分析程序的方法,熟悉上下文無關文法的使用,加深對課堂教學的理解;提高語法分析方法的實踐能力
二、 實驗內容和要求
利用c語言構造語法分析程序
三、 實驗方法、步驟及結果測試
源程序名:壓縮包文件(rar或zip)中源程序名×××.c
可執行程序名:×××.exe
- 1. 原理分析及流程圖
主要總體設計問題。
(包括存儲結構,主要算法,關鍵函數的實現等)
·用戶輸入一段表達式,然后調用S這個函數,如果遇到a或^這兩個字符的話,就跳到下一個字符,否則如果是左括號的話,就讀取下一個字符並調用這個T函數,在T函數里面又調用了S和X這兩個函數,同樣的,在X函數里,先判斷是不是‘,’如果不是,讀取下一個字符,然后再調用S和X兩個函數。
- 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);
}
}
- 3. 運行結果及分析
一般必須配運行結果截圖,結果是否符合預期及其分析。
(截圖需根據實際,截取有代表性的測試例子)
感覺這個結果和我想要的不大一樣,每次輸入一個a的時候,最后的結果老是能夠得到正確的結果,例如像a????這樣的語句它也能夠提示正確,反正它第一個輸入的只要是a就會提示正確。
一、 實驗總結
心得體會,實驗過程的難點問題及其解決的方法。
個人感覺這個不難,只是用遞歸函數就可以做了,不過難的是在那些函數里面如何去判斷條件,這個才是重難點,因為本身編譯原理就難,再加上沒有太多的電腦知識基礎,所以寫出來的程序還是有些問題的。