← 返回博客列表
Snowflake

Snowflake 面試題:實作一個迷你程式語言直譯器

2025-11-15

題目描述

SnowCal 是一種用於執行計算的簡單程式語言。SnowCal 程式在記憶體中保存一個整數 X,初始設定為零,並重複對其執行加法和乘法操作。

形式上,該語言有 5 種操作:

編寫一個直譯器,接收命令字串陣列,並返回 X 的最終值。

問題分析

這道題要求你實作一個簡單程式語言 SnowCal 的直譯器。語言中只有一個整數變數 X(初始為 0)。

重點考察:

屬於中高階工程師常見的系統設計類 Coding 題。

解法實作

class SnowCalInterpreter:
    def __init__(self):
        self.X = 0
        self.functions = {}  # 儲存函數定義
    
    def interpret(self, commands):
        i = 0
        while i < len(commands):
            cmd = commands[i]
            
            if cmd == 'ADD':
                value = int(commands[i + 1])
                self.X += value
                i += 2
            
            elif cmd == 'MUL':
                value = int(commands[i + 1])
                self.X *= value
                i += 2
            
            elif cmd == 'FUN':
                func_name = commands[i + 1]
                i += 2
                
                # 找到函數體(直到 END)
                func_body = []
                depth = 1  # 處理嵌套函數定義
                
                while depth > 0:
                    if commands[i] == 'FUN':
                        depth += 1
                    elif commands[i] == 'END':
                        depth -= 1
                        if depth == 0:
                            break
                    func_body.append(commands[i])
                    i += 1
                
                self.functions[func_name] = func_body
                i += 1  # 跳過 END
            
            elif cmd == 'INV':
                func_name = commands[i + 1]
                if func_name in self.functions:
                    # 遞迴執行函數體
                    self.interpret(self.functions[func_name])
                i += 2
            
            else:
                i += 1
        
        return self.X

def snowcal_interpreter(commands):
    interpreter = SnowCalInterpreter()
    return interpreter.interpret(commands)

總結

SnowCal 直譯器題考察點:

  1. 指令解析:字串處理和狀態機
  2. 函數管理:定義、儲存、調用
  3. 嵌套處理:深度計數和堆疊管理
  4. 狀態維護:變數和調用堆疊

oavoservice 專注於 Snowflake / Google / Amazon 等大廠面試輔導,提供 OA 代做、VO 即時輔助等服務。如需幫助,歡迎聯繫我們。


需要面試真題? 立刻聯繫微信 Coding0201獲得真題