確定型上下文無關語言(deterministic context-free language)
確定型上下文無關語言,簡單說,就是某台確定型下推自動機能辨識的語言。由於 DPDA 從不猜測,這些是「能以單趟向前掃描、不需回溯」就剖析的上下文無關語言——是上下文無關世界中規矩、實務上易處理的角落。它們構成所有上下文無關語言的一個真子集:每個 DCFL 都是上下文無關的,但並非每個上下文無關語言都是 DCFL。
直覺上,一個語言落入此類別的關鍵在於「沒有任何無可避免的猜測」。語言 a^n b^n 是確定型的:機器能精確判斷何時該停止推入、開始彈出,因為從 a 切換到 b 就明擺在輸入裡。相對地,偶數長度迴文語言是上下文無關的,但「不是」確定型的,因為找出中點需要一個確定型機器做不到的猜測。另一個說明性的例子:語言 {a^n b^n} 聯集 {a^n b^2n} 是上下文無關的,但不是確定型的——確定型機器在看完 a 之後,無法決定該預期兩種模式中的哪一種。
這個類別是實務剖析的理論基礎。程式語言所用的文法——LL 文法、尤其是 LR 文法——恰好生成確定型下推機器能處理的語言,這正是為什麼編譯器能以線性時間、單趟由左到右掃描、且不回溯地剖析原始碼。確定型上下文無關語言的封閉性質也比一般 CFL 更好:值得一提的是,它們「是」對補集封閉的,不像完整的上下文無關類別。老實的提醒是:這份美好以表達力為代價——某些完全合理的上下文無關語言根本落在它之外。
平衡括號與 a^n b^n 是確定型上下文無關的;偶數長度迴文 ww^R 與聯集 {a^n b^n} ∪ {a^n b^2n} 是上下文無關的、但「不是」確定型的——兩者都迫使做出 DPDA 無法做的猜測。
DCFL:不需猜測的 CFL——編譯器文法實務上瞄準的目標。
確定型上下文無關語言是上下文無關語言的一個「真」子集,且不同於完整的 CFL 類別,它們對補集封閉。它們恰好是能以 LR 式方法在線性時間內剖析的語言。