BNF(Backus-Naur Form),中文為巴科斯範式,可以用來表示與上下文無關文法的語言,也就是一種用來描述語法規則的中繼語言(meta-language)。這些規則描述了語言中不同元素如何組合在一起,以及它們的優先順序等訊息。在Yacc中, 根據這些規則生成語法分析器,用於解析輸入文本並構建相對應的語法結構。
一般來說,BNF具有下列結構:
<symbol> ::= expansion
一個BNF表示式是由一個非終端符號(non-terminal)和它的產生式所組成,產生式可以是一個終端符號(terminal)和非終端符號組成的序列。
以上式為例,symbol即為非終端符。非終端符皆以尖括號<>包起來,無論在等號左側或右側。中間的::=表示左式可以用右式替換。等號右邊的expansion是一個包含終端符和非終端符的表達式,通過排序和選擇將它們連接在一起。終端符不會出現在等號左側。
我們來舉個例子吧!
<短句> ::= <主詞> <動詞>
以上是一個短句的規則,由一個主詞後接一個動詞所組成,以並列的形式表示前後順序。下面我們列出幾個短句,並檢查是否符合此規則:
我們再來看一個例子:
<收件者稱謂> ::= <姓名> <先生>|<女士>
在以上的規則中,姓名後面接”先生”或”女士”都是符合規則的。我們使用”|”表示選擇。
今天簡單介紹BNF及其定義的語法架構。明天我們將要來看看Yacc檔案的格式與相關語法。