D 表示式語法分析 遞迴子程式法SDUT

2021-10-25 02:10:07 字數 2060 閱讀 2184

d - 表示式語法分析——遞迴子程式法sdut

編譯原理 表示式語法分析——遞迴子程式法

遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll(1)文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別由該非終結符推出的串,當某非終結符的產生式有多個候選式時能夠按ll(1)形式唯一地確定選擇某個候選式進行推導。請根據下面的表示式ll(1)文法,構造遞迴子程式,完成對表示式的語法分析。

表示式文法如下:

e→tg

g→+tg | ε

t→fs

s→*fs | ε

f→(e) | i

對於給定的輸入串(長度不超過50個符號),請輸出分析過程中用到的所有產生式,並指明該輸入串是否為該文法能生成的表示式,輸出共11行,前10行每行兩個資料用空格隔開,表示推導時所用產生式順序號(從0開始),最後一行是accept,表示i+i*i是文法能生成的合法表示式。注:其中&符號代表文法中的ε符號。

例如:i+i*i是文法能生成的乙個表示式,輸出格式如下:

0 e–>tg

1 t–>fs

2 f–>i

3 s–>&

4 g–>+tg

5 t–>fs

6 f–>i

7 s–>*fs

8 f–>i

9 s–>&

10 g–>&

accept

i@i不是文法能生成的表示式,輸出共5行,前5行每行兩個資料用空格隔開,表示推導時所用產生式序號(從0開始),最後一行是error,表示i@i不是文法能生成的表示式。@不是合法的文法符號,輸出格式舉例:

0 e–>tg

1 t–>fs

2 f–>i

3 s–>&

4 g–>&

error

(i+i*i不是文法能生成的表示式,存在括號不匹配的語法錯誤,輸出格式舉例:

0 e–>tg

1 t–>fs

2 f–>(e)

3 e–>tg

4 t–>fs

5 f–>i

6 s–>&

7 g–>+tg

8 t–>fs

9 f–>i

10 s–>*fs

11 f–>i

12 s–>&

13 g–>&

error

input

輸入資料只有一行,代表待分析的符號串,以#號結束

output

輸出推導過程中所有的產生式,按照使用順序給出。輸出詳細說明見題目描述中的例子。

input

i+i*i#

output

0 e–>tg

1 t–>fs

2 f–>i

3 s–>&

4 g–>+tg

5 t–>fs

6 f–>i

7 s–>*fs

8 f–>i

9 s–>&

10 g–>&

accept

這是ac**

#include

#include

using

namespace std;

voide(

);voidg(

);voidf(

);voidt(

);voids(

);char st[50]

;int c=0;

int num=0;

voidg(

)else

}voids(

)else

}voide(

)else

}voidt(

)else

}voidf(

)else

if(st[c]

=='('

)else

}else

}int

main()

else

return0;

}

D 表示式語法分析 遞迴子程式法

time limit 1000 ms memory limit 65536 kib submit statistic problem description 遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是...

D 表示式語法分析 遞迴子程式法

遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別由該非終結符推出的串,當某非終結符的產生式有多個候選式時能夠按ll 1 形式唯一地確定選擇某個候選式進行推導。請根據下面的表示式ll 1 文法,構造遞迴子...

D 表示式語法分析 遞迴子程式法

遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別由該非終結符推出的串,當某非終結符的產生式有多個候選式時能夠按ll 1 形式唯一地確定選擇某個候選式進行推導。請根據下面的表示式ll 1 文法,構造遞迴子...