C版程式語法 (消除左遞迴)

2022-09-17 18:54:12 字數 1032 閱讀 9458

c程式語法(無左遞迴)

《程式》 —〉 《外部宣告》 | 《函式定義》

《外部宣告》 —〉《標頭檔案》 | 《變數》 | 《結構體》

《標頭檔案》 —〉 #include《檔名》

《檔名》—〉 stdio.h丨stdlib.h丨string.h

《結構體》 —〉 《結構體宣告〉|《變數》

《結構體宣告》 —〉 struct

《識別符號》

《函式定義》 —〉 《型別說明》《識別符號》《引數列表》《復合語句》

《引數列表〉 —〉《型別說明》《變數名》

《復合語句》 —〉《變數》|《語句》|《復合語句》|&

《語句》 —〉《表示式語句〉|《選擇語句》|《迴圈語句》|《跳躍語句》|《語句》|&

《表示式語句》 —〉 《賦值表示式》|《關係表示式》|《邏輯表示式》|《表示式語句》|&

《賦值表示式》 —〉 =a/a=a —> &|+|-

《關係表示式》 —> 〉| < | 〉=| <=

《邏輯表示式》 —〉 + | - | * | /

《選擇語句》 —〉 if else語句|switch語句|《選擇語句》|&

《迴圈語句》 —〉 for語句|while語句|do while語句|《迴圈語句》|&

《跳躍語句》 —> return語句|break語句|continue語句

《變數》 —> 《型別》丨《識別符號》丨《變數值》

《型別說明》 —>int丨char丨double丨float丨long

《變數值》 —> 《字母》丨〈數字〉

《識別符號》 〈==〉 s

s —>as1

s1 —>s1s2

s2 —> a|b|&a —> a|b|c|……y|z

b —> 0|1|2|3|4|5|6|7|8|9

《字母》 —> a|b|c|……y|z

《數字》 〈==〉 s

s —>as1

s1 —>s1as2

s2 —> &|0

a —> 1|2|3|4|5|6|7|8|9

消除左遞迴

參考關健young的部落格,左遞迴形式為 1 a a a vn,v 2 a b b a a b vn,v 稱其為左遞迴。其中可以採取修改左遞迴為右遞迴 a a 其中 非空,不以a打頭 可寫為 a a a a 即 a a 1 a 2 a m 1 2 n 其中,i 1 i m 均不為空,j 1 j n ...

消除左遞迴

first集的求法 對於文法g的任一符號串 x1x2 xn可按下列步驟構造其first 集合 1 置first 2 將first x1 中的一切非 符號加進first 3 若 first x1 將first x2 中的一切非 符號加進first 若 first x1 和first x2 將first...

消除左遞迴

1.將以下文法消除左遞迴,並分析符號串 i i i e e t t t t f f f e i 消除左遞迴 e t e e te t ft t ft f e i first集 first e first e first t first t first f follow集 follow e follo...