『壹』 舉例說明詞法分析中關鍵字,運算符及標識符的詞法二元組的描述(編譯原理)問題
ANSI C中的標識符定義是:以字母開頭的,字母、數字以及下劃線的組合。
用正則表達式表示就是:[a-zA-Z]+[a-zA-Z0-9_]*
根據這個正則表達式畫出它的NFA,轉換成DFA,化簡為最簡DFA。最後根據這個最簡的有限狀態機就可以寫出標識符的匹配演算法了。
『貳』 c語言中標識符是什麼
C語言中的標識符只能由字母、數字和下劃線三種字元組成,且第一個字元必須是字母或下劃線。
標識符是用戶編程時使用的名字,比如指定某個東西、人,都要用到它,他或她的名字。在電腦語言中,對於變數,常量,函數,語句塊也有名字,統統稱之為標識符。
電腦的標識符如下:
知識擴展:
C語言的標識符一般應遵循如下的命名規則:
1、標識符必須以字母a~z、 A~Z或下劃線開頭,後面可跟任意個(可為0)字元,這些字元可以是字母、下劃線和數字,其他字元不允許出現在標識符中。
2、標識符區分大小寫字母。
3、標識符的長度,c89規定31個字元以內,c99規定63個字元以內。
4、C語言中的關鍵字,有特殊意義,不能作為標識符。
5、自定義標識符最好取具有一定意義的字元串,便於記憶和理解。
『叄』 編譯原理:c語言標識符的正則表達式
C語言中的標識符:
標識符由字母、數字、下劃線「_」組成,並且首字母不能是數字.
java語言中的標識符:
標識符由字母、數字、下劃線「_」、美元符號「$」組成,並且首字母不能是數字。
一般標識符由字母、數字、下劃線「_」組成
如果只能以下劃線、英文字母開頭,後跟單詞字元的話:
^[A-Za-z_][A-Za-z0-9_]*$
『肆』 編譯原理的名字與標識符的區別是什麼
不太明白樓主想問什麼,先幫你查這么多,如果還不明白,請繼續詢問網路和谷哥。
標識符
是用戶編程時使用的名字。我們指定某個東西、人,都要用到它,他或她的名字;在數學中解方程時,我們也常常用到這樣或那樣的變數名或函數名。同樣的道理,在電腦語言中,對於變數,常量,函數,語句塊也有名字,我們統統稱之為標識符。我們在給人起名字時有一定的規矩,比如,頭一個字為父親或母親的姓氏,後面一般為一個或兩個字。所以,您可以想當然地認為電腦語言里的標識符也有一定的命名規則,如果您這樣想,那您就想對了!
保留字(reserved word)
保留字又稱關鍵字。
指在高級語言中已經定義過的字,使用者不能再將這些字作為變數名或過程名使用。
每種程序設計語言都規定了自己的一套保留字。
例如:BASIC語言規定不能使用LIST作為變數名或過程名,因為LIST是一個BASIC語言專用於顯示內存程序的命令。
C有22+10 = 32個關鍵字
C++ 有22+10+11+20 = 63 個關鍵字
JAVA 有22+ 9+ 17 = 48 個關鍵字
『伍』 【編譯原理】第二章:語言和文法
上述文法 表示,該文法由終結符集合 ,非終結符集合 ,產生式集合 ,以及開始符號 構成。
而產生式 表示,一個表達式(Expression) ,可以由一個標識符(Identifier) 、或者兩個表達式由加號 或乘號 連接、或者另一個表達式用括弧包裹( )構成。
約定 :在不引起歧義的情況下,可以只寫產生式。如以上文法可以簡寫為:
產生式
可以簡寫為:
如上例中,
可以簡寫為:
給定文法 ,如果有 ,那麼可以將符號串 重寫 為 ,記作 ,這個過程稱為 推導 。
如上例中, 可以推導出 或 或 等等。
如果 ,
可以記作 ,則稱為 經過n步推導出 ,記作 。
推導的反過程稱為 歸約 。
如果 ,則稱 是 的一個 句型(sentential form )。
由文法 的開始符號 推導出的所有句子構成的集合稱為 文法G生成的語言 ,記作 。
即:
例
文法
表示什麼呢?
代表小寫字母;
代表數字;
表示若干個字母和數字構成的字元串;
說明 是一個字母、或者是字母開頭的字元串。
那麼這個文法表示的即是,以字母開頭的、非空的字元串,即標識符的構成方式。
並、連接、冪、克林閉包、正閉包。
如上例表示為:
中必須包含一個 非終結符 。
產生式一般形式:
即上式中只有當上下文滿足 與 時,才能進行從 到 的推導。
上下文有關文法不包含空產生式( )。
產生式的一般形式:
即產生式左邊都是非終結符。
右線性文法 :
左線性文法 :
以上都成為正則文法。
即產生式的右側只能有一個終結符,且所有終結符只能在同一側。
例:(右線性文法)
以上文法滿足右線性文法。
以上文法生成一個以字母開頭的字母數字串(標識符)。
以上文法等價於 上下文無關文法 :
正則文法能描述程序設計語言中的多數單詞。
正則文法能描述程序設計語言中的多數單詞,但不能表示句子構造,所以用到最多的是CFG。
根節點 表示文法開始符號S;
內部節點 表示對產生式 的應用;該節點的標號是產生式左部,子節點從左到右表示了產生式的右部;
葉節點 (又稱邊緣)既可以是非終結符也可以是終結符。
給定一個句型,其分析樹的每一棵子樹的邊緣稱為該句型的一個 短語 。
如果子樹高度為2,那麼這棵子樹的邊緣稱為該句型的一個 直接短語 。
直接短語一定是某產生式的右部,但反之不一定。
如果一個文法可以為某個句子生成 多棵分析樹 ,則稱這個文法是 二義性的 。
二義性原因:多個if只有一個else;
消岐規則:每個else只與最近的if匹配。