iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
自我挑戰組

Lex & Yacc 學習筆記系列 第 9

[Day9] Yacc - BNF表示式

  • 分享至 

  • xImage
  •  

本篇內容

  • 介紹BNF表示式

BNF表示式

BNF(Backus-Naur Form),中文為巴科斯範式,可以用來表示與上下文無關文法的語言,也就是一種用來描述語法規則的中繼語言(meta-language)。這些規則描述了語言中不同元素如何組合在一起,以及它們的優先順序等訊息。在Yacc中, 根據這些規則生成語法分析器,用於解析輸入文本並構建相對應的語法結構。

一般來說,BNF具有下列結構:

<symbol> ::= expansion 

一個BNF表示式是由一個非終端符號(non-terminal)和它的產生式所組成,產生式可以是一個終端符號(terminal)和非終端符號組成的序列。

  • 終端符表示無法再分解或簡化的變數,如常數字串、字元等。
  • 非終端符表示由終端符與非終端符組合而成的規則。

以上式為例,symbol即為非終端符。非終端符皆以尖括號<>包起來,無論在等號左側或右側。中間的::=表示左式可以用右式替換。等號右邊的expansion是一個包含終端符非終端符的表達式,通過排序和選擇將它們連接在一起。終端符不會出現在等號左側。

我們來舉個例子吧!

<短句> ::= <主詞> <動詞>

以上是一個短句的規則,由一個主詞後接一個動詞所組成,以並列的形式表示前後順序。下面我們列出幾個短句,並檢查是否符合此規則:

  • 蝸牛爬行 (O)
  • 候鳥飛行 (O)
  • 緩慢移動 (X)

我們再來看一個例子:

<收件者稱謂> ::= <姓名> <先生>|<女士>

在以上的規則中,姓名後面接”先生”或”女士”都是符合規則的。我們使用”|”表示選擇。

結語

今天簡單介紹BNF及其定義的語法架構。明天我們將要來看看Yacc檔案的格式與相關語法。

參考資料


上一篇
[Day8] Yacc - 基本介紹與原理
下一篇
[Day10] Parser解析(1) Lex Token標記
系列文
Lex & Yacc 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言