分析樹和語法樹

  編譯器在實際閱讀源程序的時候,首先經過掃描程序執行語法分析(Lexical analysis):它將字符序列收集到稱做記號(token)的有意義單元中,記號同天然語言,如英語中的字詞。
字體

  例如在下面的代碼行中:blog

  a[index] = 4 + 2token

  這個代碼包括了12個非空字符,但只有8個記號:編譯器

  

  每個記號均由一個或多個字符組成,在進一步處理以前它已被收集在一個單元中。編譯

  

  語法分析程序從掃描程序中獲取記號形式的源代碼,並定義程序結構的語法分析(syntax analysis),這與天然語言中句子的語法分析相似。語法分析定義了程序的結構元素極其關係。一般將語法分析的結果表示爲分析樹(parse tree)或語法樹(syntax tree)。語法

  例如:仍是那行C代碼,它表示一個稱爲表達式的結構元素,該表達式是一個由左邊爲下標表達式、右邊爲整型表達式的賦值表達式組成。這個結構可按下面的形式表示爲一個分析樹:程序

  

  請注意,分析樹的內部節點均由其表示的結構名標示出,而分析樹的葉子則表示輸入中的記號序列(結構名以不一樣字體表示以示與記號的區別)。im

  分析樹對於顯示程序的語法或程序元素頗有幫助,可是對於表示該結構卻顯得力不從心了。分析程序更趨向於生成語法樹,語法樹是分析樹中所包含信息的濃縮(有時由於語法樹表示從分析樹中的進一步抽取,因此也被稱爲抽象的語法樹(abstract syntax tree))。下面是C賦值語句的抽象語法樹的例子:img

  

 

  ps: 昨天看到這個,原本想馬上記錄下來的,由於種種別的事情,耽誤了。o(︶︿︶)o 唉,只有今天來作了。語言

    我本想找一個現成的介紹之類的轉載過來,這樣可以省很多力氣。

    但是,沒有合適的。

    以上均是個人手打,半個多小時啊~

相關文章
相關標籤/搜索