在上一節中,我們處理了 “var” “if” “while”,大家應該學會了如何處理 expression block了,這一節我們將會學習如何處理運算符。處理運算符有兩個基本概念要掌握,第一是運算符的運算次序,第二是運算表達式的表示法。
在上一節中,我們處理了 “var” “if” “while”,大家應該學會了如何處理 expression block了,這一節我們將會學習如何處理運算符。處理運算符有兩個基本概念要掌握,第一是運算符的運算次序,第二是運算表達式的表示法。
上回提到,我們要寫一個 Recursive descent parser,從 Scanner 一直讀 Token 進來,並建立一棵 Parse tree。在建立途中,我們還用了 lookahead 的技巧,就是偷看下一個 Token 但是不會佔用它,原因是我們需要用它來判斷下一步怎麼走,但是我們又不能用掉它,否則到下一步時我們就用不到了。現在我們就來完成餘下的部份吧!
現在我們有了 Scanner 幫我們把字元合併成 Token了,那下一步要做什麼呢?就是要把 Token 組合成有意思的“句子”了,這一步我們稱為語法分析(Syntactic analysis),而負責做這項工作的程式我們稱之為語法分析器(Parser)。
繼續上一節未完成的 Scanner 吧,上一節我們寫好了一個 Reader,可以逐個逐個字元讀取,有需要時又可以退回 n 個字元之後再讀(本節將會使用這個功能)。另外,上一節亦寫好了一個簡單的 Scanner,可以讀取七款單字元 Token,並忽略其他字元。本節將會教大家如何建立多字元 Token,過程將會利用 FSM 來分析字元,忘記了什麼是 FSM 的朋友請到上一節回顧一下嚕。
寫 Compiler 第一步通常都是先寫 Scanner,什麼是 Scanner 呢?這裡只給你初步概念,詳細解釋在維基看吧。試想像有一句英文句子(例子:”The quick brown fox jumps over the lazy dog” is an English-language pangram.),人類看英文的方法就是逐個逐個詞語地看,電腦怎樣才能知道要跳過 ” 雙引號才能讀取第一個詞語呢?那就是要靠 Scanner 來分析了,Scanner 會逐個逐個字元讀進來並且在“適當時候”把字元合成一組詞語供後邊的 Parser 做其他處理工作。
相信每個 programmer 都跟西傑一樣想過設計一種自己的編程語言,最近西傑就有機會要寫一個編譯器了。雖然在大學時已經讀過如何編寫一個編譯器,但要認真寫起上來還真的不容易,而且網上教寫編譯器的教材不多(尤其中文的),所以就把這次經驗記下來,疏理一下自己在開發過程中所學到的東西,也同時為互聯網增加一些有關編譯器這方面的中文資源吧。
根據“TIOBE編程語言排行榜”(榜單雖然統計方式有侷限,但是仍然不失為一個比較好的參考),2010年PHP最高曾經在世界編程語言中排名第三。可見,PHP語言在PC互聯網時代的Web領域可謂叱咤風雲,擎天一柱。
目前主流的電腦顯示器解析度是1920x1080,也就是常說的FHD標準,不過在智能手機都開始朝2560x1440前進了,PC顯示器顯然還需要更進一步的強化,下一代的標準就是4K解析度,也就是Utlra HD標準。今年以來,戴爾、聯想、華碩、三星等公司紛紛推出廉價型4K顯示器,最便宜的只有4000多即可買到,預計今年底明年初就能降到3000元內,用戶也更容易接受。
4K對我們來說不僅是一次解析度升級,其影響遠遠比之前1680x1050解析度升級到1920x1080還要大,從應用體驗、UI優化及性能上都提出了更嚴峻的挑戰,更重要的是4K即將來臨之前,很多人對4K尚無清晰的認識。從本文開始,超能網也會推出一系列有關4K解析度的科普文章,從4K顯示器到4K電視,從4K基礎知識再到4K視頻、遊戲應用皆有涉及。