實驗二 遞迴下降語法分析

2022-05-21 22:24:10 字數 3021 閱讀 3824

一、實驗目的:

利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。

編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。

二、實驗原理

每個非終結符都對應乙個子程式。

該子程式根據下乙個輸入符號(select集)來確定按照哪乙個產生式進行處理,再根據該產生式的右端:

三、實驗要求說明

輸入單詞串,以「#」結束,如果是文法正確的句子,則輸出成功資訊,列印「success」,否則輸出「error」,並指出語法錯誤的型別及位置。

例如:輸入begin a:=9;x:=2*3;b:=a+x end #

輸出success

輸入x:=a+b*c  end #

輸出『end' error

四、實驗步驟

1.待分析的語言的語法(參考p90)

2.將其改為文法表示,至少包含

–語句–條件

–表示式

3. 消除其左遞迴

4. 提取公共左因子

5. select集計算

6. ll(1)文法判斷

7. 遞迴下降分析程式

#include

#include

#include

#include

using namespace std;

char ch;

char arr1[100], arr2[15],arr3[15];//arr1輸入,arr2輸出

int syn, row, sum ; //syn為單詞種別碼,sum為整形常數。

int p=0,m=0,n=0;

int flag=0;

char* words[6] = ;

void sca();

void s();//解析語句

void s1();

void s2();

void s3();

void s4();

void c();//解析條件

void e();//解析表示式

void e1();

void t();//解析項

void t1();

void f();//解析因子

void s()

else if(syn == 2)

else if(syn == 4)

else if(syn == 0)

else

}elseelse}}

void s1()

else

}void s2()

else

}void s3()

else

}void s4()

if(syn == 6)

else

}else

}void c()

else

e();

} void e()

void e1()

else if(syn == 28 || syn == 0)

}void t()

void t1()

else if(syn == 13 ||syn == 14 || syn == 28 || syn == 0)

}void f()

else

}else if(syn == 10 || syn == 11)

else

}int main()

while (ch != '#');

p = 0;

// do

////

arr2[m++] = '\0';

--p;

syn = 10;

for (n = 0; n < 6; ++n)}}

else if ((ch >= '0' && ch <= '9'))

--p;

syn = 11;

if (sum > 32767)

}else switch (ch)

else if (ch == '=')

else

break;

case '>':

m = 0;

arr2[m++] = ch;

ch = arr1[p++];

if (ch == '=')

else

break;

case ':':

m = 0;

arr2[m++] = ch;

ch = arr1[p++];

if (ch == '=')

else

break;

case '*':

syn = 13;

arr2[0] = ch;

break;

case '/':

syn = 14;

arr2[0] = ch;

break;

case '+':

syn = 15;

arr2[0] = ch;

break;

case '-':

syn = 16;

arr2[0] = ch;

break;

case '=':

syn = 25;

arr2[0] = ch;

break;

case ';':

syn = 26;

arr2[0] = ch;

break;

case '(':

syn = 27;

arr2[0] = ch;

break;

case ')':

syn = 28;

arr2[0] = ch;

break;

case '#':

syn = 0;

arr2[0] = ch;

break;

case '\n':

syn = -2;

break;

default:

syn = -1;

arr3[0]=ch;

break;}}

實驗二 遞迴下降語法分析

一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...

實驗二 遞迴下降語法分析

一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...

遞迴下降語法分析實驗

通過設計 開發乙個高階語言的遞迴下降語法分析程式,實現 對詞法分析程式所提供的單詞序列進行語法檢查和結構分析,加 深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。1 理解語法分析在編譯程式中的作用,以及它與詞法分析程式的 關係 2 掌握遞迴下降語法分析方法的主要原理 3 理解遞迴下降分析法對...