簡易c語言LL 1 文法

2022-06-01 17:24:10 字數 1306 閱讀 8629

〈程式〉::〈宣告〉|〈函式〉

〈宣告〉::(a|〈宣告〉')〈函式宣告〉

a::〈標頭檔案〉|〈巨集定義〉

〈宣告〉'::〈宣告〉|null

〈標頭檔案〉::〈標頭檔案〉〈標頭檔案〉'

〈標頭檔案〉'::〈標頭檔案〉|null

〈巨集定義〉::#define b〈巨集定義〉|null

b::〈字串 〉c

c::〈字串〉|〈數字〉

〈字串〉::〈變數名〉

〈函式宣告〉::〈返回值型別 〉〈函式名〉(〈形參〉) ;〈函式宣告〉|null

〈形參〉::〈資料型別 〉〈變數名〉|〈資料型別 〉〈變數名〉〈,〉〈形參〉|void

〈變數名〉::〈字母〉d

d::〈字母〉|〈數字〉|〈_〉|d|null

〈字母〉::f〈字母〉'

f::a|b|...|y|z|(大寫字母。。。)

〈字母〉'::〈字母〉|null

〈數字〉::e〈數字〉'

e::0|1|...|8|9

〈數字〉'::〈數字〉|null

〈返回值型別〉::int|float|char|void

〈函式名〉::〈變數名〉

〈函式〉::〈返回值型別〉〈函式名〉|函式名〉〈函式〉

〈函式主體〉::〈變數的申請〉〈處理語句〉

〈變數的申請〉::〈資料型別 〉〈變數名〉;〈變數的申請〉'

〈變數的申請〉'::〈變數的申請〉|null

〈資料型別 〉::int|float|char

〈處理語句〉::f〈處理語句〉'

f::〈賦值語句〉|〈判斷語句〉|〈迴圈語句〉|〈函式呼叫〉

〈處理語句〉'::〈處理語句〉|null

〈賦值語句〉::〈變數名〉=g

g::〈字母〉|〈數字〉|〈變數名〉|〈運算〉

〈運算〉::〈變數名〉〈運算子〉〈數字〉|〈數字〉〈運算子〉〈數字〉

〈運算子〉::+|-|*|/

〈判斷語句〉::if(〈條件〉)h

h::〈else if〉else|null

〈else if〉::〈else if〉'〈else if〉(〈條件〉)|null

〈else if〉'::〈else if〉|null

〈條件〉::〈變數名〉〈判斷運算子〉〈變數名〉|〈變數名〉〈判斷運算子〉〈數字〉|〈數字〉〈判斷運算子〉〈數字〉|〈數字〉

〈判斷運算子〉::=|>|<|>=|<=|!=

〈迴圈語句〉::while(〈條件〉)|dowhile(〈條件〉)|for(〈賦值語句〉;〈條件〉;〈運算〉)

〈函式呼叫〉::〈變數名〉=〈函式名〉(〈形參〉)|〈函式名〉(〈形參〉)

LL 1 文法判斷

ll 1 文法判斷 題型 1.判斷該文法是否是ll 1 文法?2.若是,給出它的ll 1 分析表,否則說明理由。概念 對於產生式 a 1.如果 均不能推導出 空語句 則 first first 2.和 至多有乙個能推導出 3.如果 經過0步或多步可以推導出 則 first follow a 關鍵 求...

LL(1)文法解析

一 問題描述 給定上下文無關文法,對其進行解析,得出first集和follow集。在有能力的情況下,可以求出ll 1 分析表。二 演算法設計 本程式主要分成三塊內容,第一是文法的讀入解析,第二是first集的求解,第三為follow集的求解。文法的解析需要根據整行讀入的文法,生成rulelist 表...

編譯原理實驗 LL(1)文法

目標任務 實現 ll 1 分析中控制程式 表驅動程式 完成以下描述算術表示式的 ll 1 文法的 ll 1 分析程式。g e e te e ate t ft t mft f e i a m 說明 終結符號 i 為使用者定義的簡單變數,即識別符號的定義。compiler3.cpp 定義控制台應用程式的...