編譯原理是介紹如何將高級程序設計語言轉換成計算機硬件能識別的機器語言,以便計算機進行處理。
詞法分析(Lexical Analyzer)是編譯器的第一個步驟,它也被稱為 掃描(scanning)。詞法分析器(semantic analyzer)通過讀入外部的字符流(源程序)對其進行掃描,并且把它們組成有意義的詞素(lexeme)序列,對于每個詞素,詞法分析器都會產生詞法單元(token) 作為輸出。
編譯原理領域中將高級程序語言中的最小的單元稱為token,token是構成源程序的基本不可再分割的單元。高級程序設計語言在分析源程序時的第一步就是把源程序分割為一個個獨立的token,這個過程就稱為詞法分析。
高級語言中的token有以下幾類:
分隔符(界限符)
關鍵字和保留字
標識符
操作符
字面值
高級語言中最常見的分隔符(界限符)有空格、換行符、分號、大括號等等,我們可以利用空格來分隔token、用換行符或者分號來分隔語句、用大括號或者是縮進(數(shù)量相等的空格或者是制表符)來分隔代碼塊(復合語句)。操作符也是一種特殊的分隔符。
標識符
編程語言的標識符是用來標識變量、自定義類型、函數(shù)等實體的符號名稱,我們在后面想要使用這個實體的話只需要用這個實體的名字引用它就可以了。不同類型的標識符具有不同的作用,當標識符代表的是一個變量和函數(shù)的時候,它代表的其實是一個內存地址,我們使用變量進行內存訪問、使用函數(shù)進行子程序的調用;而當標識符作為一個自定義數(shù)據類型的時候,它將在編譯的時候為編譯器提供組織內存的元數(shù)據信息。
關鍵字和保留字
關鍵字是指語言的設計者保留的具有特定語法含義的字符序列,每個關鍵字都有自己獨特的用途和語法含義,我們只能按照高級程序設計語言的語法規(guī)定來使用它們。關鍵字是一門高級程序設計語言的語法的重要組成部分,同時也是我們?yōu)檎Z言的編譯器或解釋器提供元數(shù)據信息的主要手段。保留字是一類比較特殊的關鍵字,是為了語言后續(xù)的升級所預留的,在當前的語言版本中,保留字還不具備任何特殊的語義,但是在后續(xù)的語言升級過程中,保留字可能會被提升為關鍵字。所以我們在為標識符命名的時候,也不能隨意使用保留字。
操作符就是語言所使用的符號集合,一般來說操作符代表的是計算類的指令,我們會使用操作符來構建表達式,來完成計算任務。大多數(shù)的操作符會被編譯成轉換成計算類的指令。
按照功能分類,操作符可以做如下分類:
算術運算符
位運算符
賦值運算符
賦值復核運算符(+=這一類的)
比較運算符
邏輯運算符
括號(可以用來改變表達式的計算順序,也可以用來進行函數(shù)調用)
自增自減操作
其他運算符,比如元素數(shù)組元素訪問[],子元素訪問.、->等等
按照操作數(shù)的數(shù)量,操作符可以做如下分類:
單目運算符
雙目運算符
三目運算符
操作符的主要作用是用來構成表達式的,運算符有兩個非常重要的特性,即優(yōu)先級和結合性,這兩個特性決定了表達式的計算。
優(yōu)先級
我們在數(shù)學中進行四則運算的時候都知道一個計算式中要先算乘除后算加減,這個規(guī)則就是數(shù)學中四則運算的優(yōu)先級規(guī)則,高級語言中的運算符的運算規(guī)則跟這個是類似的,具有更高優(yōu)先級的運算符會優(yōu)先占用操作數(shù)組成一個表達式進行計算產生一個值。
在所有語言中運算符的優(yōu)先級規(guī)則都是非常相似的,一般來說操作數(shù)越少的操作數(shù)優(yōu)先級越高,而且賦值運算符的優(yōu)先級比較靠后。
結合性
優(yōu)先級并不能完全解決表達式的計算順序問題,在表達式中出現(xiàn)連續(xù)的多個優(yōu)先級相同的運算符的時候,該以什么樣的順序進行計算呢?
高級語言中表達式的結合性就是用來解決連續(xù)多個相同優(yōu)先級的運算符的計算順序的。
結合性有兩種,即左結合性和右結合性。具有左結合性的計算順序是從左到右,右結合性的計算順序是從右到左。
在高級語言中,存在三種最基本的字面值形式(不同語言所具有的字面值形式是不同的,但是大多數(shù)的語言都支持下面三種形式的字面值):
字符串:因為代碼本身就是字符串,通常會使用界定符比如""來區(qū)分是字面值還是程序代碼
數(shù)字:其實就是具有特定格式的字符串(只有數(shù)字字符,數(shù)字分隔符,進制前綴和類型后綴),因為其格式特殊,所以不需要界定符
邏輯值:通常也稱為布爾值,true或者false,大部分程序設計語言中都把true和false作為關鍵字,但是在比較古老的編程語言中(例如C語言),沒有專門代表邏輯值的數(shù)據類型,而是使用整數(shù)代表邏輯值,0代表false,所有的非0整數(shù)都代表true。
表達式(Expression)和語句(Statement)表達式
表達式是由運算符和操作數(shù)組成,最簡單的表達式是一個單獨的運算對象,以此為基礎可以創(chuàng)建復雜的表達式。像+、*這樣可以進行運算的符號稱為運算符(operator),作為運算對象的變量、常量、函數(shù)調用等稱為操作數(shù)(operand)。
表達式有一個基本特征——每個表達式都會產生一個值。
根據表達式的復雜程度的不同,可以把表達式分為簡單表達式和復合表達式:
簡單表達式: “字面值”和“變量”。
復合表達式:由簡單表達式和運算符所構成的更復雜的表達式。
語句
語句是命令式編程語言的一個語法單元,表示程序要執(zhí)行的操作。程序是有一個或多個語句序列。語句可能包含內部組件(如關鍵字、表達式)。
大多數(shù)語言中,語句和表達式的區(qū)別在于,語句不返回結果。
在命令式編程語言中,Algol 68 是少數(shù)幾種語句可以返回結果的語言之一。在混合了命令式和函數(shù)式風格的語言中,如 Lisp 家族,表達式和語句之間沒有區(qū)別。在純函數(shù)式編程中,沒有語句,一切都是表達式。
語句可以分為簡單語句和復合語句。
復合語句就是用來把多條語句組合成一個整體的。
通常會在如下情況下把一系列的語句集合起來,形成一條復合語句:
流程控制
在分支或者是循環(huán)結構中,某一個分支或者是循環(huán)體中的邏輯往往用一條語句是無法完成的,這個時候我們就需要一個復合語句來組織邏輯。
函數(shù)體
一個函數(shù)可能包含多條語句。
語句塊
大多數(shù)編程語言中有自己組織語句塊的方式,比如Java、c、C++等語言中使用{}, Python中用縮進來。
命令式編程語言中表達式和語句的關系
表達式有值,而語句不總有值。
程序是由語句組成的。語句可以是表達式,也可以不是。表達式可以當做值賦給變量。
表達式本身可以作為表達式語句,也能作為賦值語句的右值或if語句的條件等,所以表達式可以作為語句的組成部分,但不是必須成分(例如continue語句)。
【補充說明:token計算機科學中含義很多,不同場景下,其語義表面上看起來相差甚遠。
在信息安全中
會話令牌(Session token),交互會話中唯一身份標識符;
訪問令牌(Access token)表示訪問控制操作主體的系統(tǒng)對象
密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做認證令牌或者加密令牌,一種計算機身份校驗的物理設備。
編譯原理
詞法分析是計算機科學中將字符序列轉換為標記(token)序列的過程。從輸入字符流中生成標記的過程叫作標記化(tokenization)。
在網絡技術里
一種能夠控制站點占有媒體的特殊幀,以區(qū)別數(shù)據幀及其他控制幀。】
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
名稱欄目:編譯原理中的token簡介-創(chuàng)新互聯(lián)
當前URL:http://sd-ha.com/article16/decsgg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站設計、用戶體驗、網站營銷、云服務器、網頁設計公司、響應式網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)