免費開始練習
司法三等申論題 114年 [檢察事務官電子資訊組] 程式語言

第 三 題

以下 Python 程式碼,可以解析下列 BNF 規則。請先寫出 BNF 規則中 (I) ~ (V);並說明程式執行後之輸出。(25 分)
(程式碼包含 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. 1 入口函式呼叫 — 呼叫如 assign() 或 expr() 啟動解析。
  2. 2 優先權遞迴下行 — 依序呼叫 term()、factor() 處理層級關係。
  3. 3 Token 比對消耗 — 匹配輸入字串中的終結符號(如 +, *, ID)。
  4. 4 堆疊彈回釋放 — 匹配完成後由 Call Stack 逐層回傳成功信號。
🔄 延伸學習:延伸學習:LL(1) 語法的預測分析表與回溯機制。
🧠 記憶技巧:函式即語法,遞迴見階層;Token 對終結,順序定優先。
⚠️ 常見陷阱:答題時容易遺漏 BNF 的階層式定義(如 expr -> term -> factor),或忽略程式碼中處理括號與變數的具體判斷邏輯。
抽象語法樹 (AST) 詞法分析 (Lexical Analysis) 左遞迴消除 (Left Recursion)

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

程式語言的語法定義與剖析樹建構
查看更多「[檢察事務官電子資訊組] 程式語言」的主題分類考古題