司法三等申論題
114年
[檢察事務官電子資訊組] 程式語言
第 三 題
以下 Python 程式碼,可以解析下列 BNF 規則。請先寫出 BNF 規則中 (I) ~ (V);並說明程式執行後之輸出。(25 分)
(程式碼包含 id_, expr, assign, test 函式解析特定字串,詳見原圖)
(程式碼包含 id_, expr, assign, test 函式解析特定字串,詳見原圖)
📝 此題為申論題
思路引導 VIP
看到解析 BNF 的 Python 程式碼(通常為遞迴下降剖析器),首先應將每個剖析函式(如 assign, expr, id_)對應到 BNF 的非終結符號,並觀察函式內的條件分支(if/elif/match)來反向推導產生式(Production rules)。接著,利用 Call Stack 觀念,逐步追蹤 test 函式輸入字串的遞迴呼叫順序,藉此判斷剖析是否成功並得出輸出結果。
🤖
AI 詳解
AI 專屬家教
【解題思路】將遞迴下降剖析器(Recursive Descent Parser)的程式邏輯反向推導為 BNF 語法規則,並透過模擬執行堆疊(Call Stack)來追蹤程式輸出。 【詳解】 一、推導 BNF 規則 (I) ~ (V)
▼ 還有更多解析內容
BNF與遞迴下降剖析
💡 程式邏輯與 BNF 語法的雙向映射及遞迴剖析流程。
🔗 遞迴下降剖析執行鏈
- 1 入口函式呼叫 — 呼叫如 assign() 或 expr() 啟動解析。
- 2 優先權遞迴下行 — 依序呼叫 term()、factor() 處理層級關係。
- 3 Token 比對消耗 — 匹配輸入字串中的終結符號(如 +, *, ID)。
- 4 堆疊彈回釋放 — 匹配完成後由 Call Stack 逐層回傳成功信號。
↓
↓
↓
🔄 延伸學習:延伸學習:LL(1) 語法的預測分析表與回溯機制。