上下文無關文法與推導
終端符號(terminal symbol)
當你用文法建造句子時,有些片段是會被替換、拆除的鷹架,有些片段則是留在牆上的成品磚塊。終端符號就是那些成品磚塊:實際出現在文法所生成字串中、且永遠不再被重寫的符號。名字已說明一切——終端符號一旦出現,那個片段的重寫就「終止」了。
形式上,終端符號恰好是上下文無關文法 (V, Σ, R, S) 中字母表 Σ(Sigma)的元素。它們與變數 V 互不相交,且沒有任何產生式規則的左側是終端符號,所以無法重寫終端符號。當當前字串只剩終端符號時,推導恰好結束——這個最終的終端符號字串便是所生成語言的成員。在算術文法中,終端符號可能是數字、加號乘號與括號;在程式語言文法中,它們對應到剖析開始前由詞法分析器產生的詞符(token),如識別字、關鍵字與標點。
教科書中一個方便的慣例:終端符號通常寫成小寫字母、數字或字面標點,而變數寫成大寫字母——這讓你一眼就能讀懂文法。別把終端符號跟單一字元混為一談:在真實語言設計中,終端符號往往是一整類「詞符」(終端符號「number」可能匹配 42 或 3.14),由掃描器在剖析開始前先產生。
在文法 S → a S b | ε 中,終端符號是 a 與 b(小寫),唯一的變數是 S,而 ε(epsilon)是空字串。像「aabb」這樣生成出的字串完全由終端符號組成。
終端符號是存活到最終字串裡的字母表字母;它們永不被重寫。
終端符號不一定是單一字元——在語言設計中它常是一整類詞符(如終端符號「identifier」),由詞法分析器產生。終端符號與變數必須互不相交。
又稱
另見