《程式》 —〉 《外部宣告》 | 《函式定義》
《外部宣告》 —〉《標頭檔案》 | 《變數》 | 《結構體》
《標頭檔案》 —〉 #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
C版程式語法 (消除左遞迴)
c程式語法 無左遞迴 程式 外部宣告 函式定義 外部宣告 標頭檔案 變數 結構體 標頭檔案 include 檔名 檔名 stdio.h丨stdlib.h丨string.h 結構體 結構體宣告 變數 結構體宣告 struct 識別符號 函式定義 型別說明 識別符號 引數列表 復合語句 引數列表 型別說...
c 消除左遞迴文法 遞迴(Leetcode)
遞迴對於我來說,典型的一看就會,一寫就廢 希望這章總結能給我一點啟發 by the way,我的文章你快點接收吧!侵刪 這個題解我竟無從下筆,擷取幾個非常清楚的圖來解釋吧 1 如果l1 val l2 val,那麼mergetwolist l2 next l1 2 反之,mergetwolist l2...
編譯原理(語法分析之消除左遞迴 消除回溯)
引言 語法分析 自上而下分析部分內容 顧名思義,自上而下就是從文法的開始符號出發,向下推導,推出句子。其中,自上而下分析方法不允許文法含有任何左遞迴。為構造不帶回溯的自上而下分析演算法,首先要消除文法的坐遞迴性,並找出克服回溯的充分必要條件。下面討論消除左遞迴和克服回溯。左遞迴的消除 直接消除產生式...