❶ 編譯原理:構造表示「標識符」的正則表達式標識符定義:以字母開頭的字母數字串,標識符可以有後綴,
^([A-Za-z]\w*)([.]([A-Za-z]\w*))*$
不知理解得對不對
比如
(java).(util).(Locale)
java util Locale三組都是以字母開頭,後接單詞字元(即[A-Za-z0-9_]的縮寫\w)的表達式
❷ c語言中的標識符分幾類
C語言中的標識符分為三哪顫類:
一、關鍵字
關鍵字是用來標識文件中各個記錄的特定數據項目的值。
關鍵字是電腦語言里事先定義的,有特別意義的標識符,有時又叫保留字。
二、預定義標識符
預定義標識符是C語言中標識符兩種中的一種,在C語言中有特定的含義。
如函數「printf」是「格式輸出」的英語全稱加縮寫。
三、用戶標識符
每個C語言中的字要麼歸為關鍵字,要麼歸為標識汪攜符。而標識符分為預定義標識符和用戶標識符。
預定義標識符是C語言中系統預先定義的標識符,如系統類庫名、系統常量名、系統函數名。
預定義標識符具有見字明義的特點,如函數「格式輸出」(英語全稱加縮寫:printf)、「格式輸入」(英語全稱加縮寫:scanf)、sin、isalnum等等。
預定義標識符可以作為用戶標識符使用,只是這樣會失去系統規定的原意,使用不當還會使程序出錯。
(2)標識符的文法編譯技術擴展閱讀:
C語言:
C語言中把標識符分為三類:關鍵字,預定義標識符,用戶自定義標識符
1、標識符由字母(A-Z,a-z)、數字(0-9)、下劃線「_」組成困緩伏,並且首字元不能是數字,但可以是字母或者下劃線。例如,正確的標識符:abc,a1,prog_to。
2、不能把C語言關鍵字作為用戶標識符,例如if ,for, while等.
3、標識符長度是由機器上的編譯系統決定的,一般的限制為8字元(註:8字元長度限制是C89標准,C99標准已經擴充長度,其實大部分工業標准都更長)。
4、標識符對大小寫敏感,即嚴格區分大小寫。一般對變數名用小寫,符號常量命名用大寫。
5、標識符命名應做到「見名知意」,例如,長度(length),求和、總計(sum),圓周率(pi)……
❸ C語言中標識符怎樣才能合法
C語言中標識符(identifier)是用來標識變數、函數、數組、結構體等的名稱。為了使標識符合法,需要遵循以下幾條規則:
標識符必須以字母或下劃線喚扮(_)開頭。
標識符只能包含字母、數字和下劃線。
標識符不能與C語言中的關鍵字重名。
標識符的長度不能超過31個渣鏈鏈字元。
C語言是大小寫敏感的,標識符的大小寫也要區分。
C語言中使用非法標識符會導如孫致編譯錯誤,因此在編寫程序時需要注意遵循這些規則
❹ c語言中標識符是什麼
C語言中的標識符只能由字母、數字和下劃線三種字元組成,且第一個字元必須是字母或下劃線。
標識符是用戶編程時使用的名字,比如指定某個東西、人,都要用到它,他或她的名字。在電腦語言中,對於變數,常量,函數,語句塊也有名字,統統稱之為標識符。
電腦的標識符如下:
知識擴展:
C語言的標識符一般應遵循如下的命名規則:
1、標識符必須以字母a~z、 A~Z或下劃線開頭,後面可跟任意個(可為0)字元,這些字元可以是字母、下劃線和數字,其他字元不允許出現在標識符中。
2、標識符區分大小寫字母。
3、標識符的長度,c89規定31個字元以內,c99規定63個字元以內。
4、C語言中的關鍵字,有特殊意義,不能作為標識符。
5、自定義標識符最好取具有一定意義的字元串,便於記憶和理解。
❺ C語言中合法標識符的要求
法律分析:標識符由字母(A-Z,a-z)、數字(0-9)、下劃線「_」組成,並且首字元爛蘆不能是數字,但可以是字母或者下劃線。例如,正確的標識符:abc,a1,prog_to。不能把C語言關鍵字作為用戶標識符,例如if,for,while等。標識符長度是由機器上的編譯系統決定的,一般的限制為8字元(註:8字元長度限制是C89標准,C99標准已經擴充長度,其實大部分工業標准都更長)。標識符對大小寫敏感,即嚴格區分大小寫。
法律依據:《中華人民共和國網路安全法》
第十九條 各級人民政府及其有關部門應當組織開展經常性的網路安全宣傳教育,並指導、督促有關單位做好網路安全宣傳教育工作。大眾傳播媒介應當有針對性地面向社會進行網路安全宣傳教育搏歷段。
第二十條 國家支持企業和高等學校、職業學校等教育培訓機構開展網路安全相關教育基譽與培訓,採取多種方式培養網路安全人才,促進網路安全人才交流。
❻ C語言中合法標識符的要求
標識符由字母(A-Z,a-z)、數字(0-9)、下劃線「_」組成,並且首字元不能是數字,但可以是字母或者下劃線。例如,正確的標識符:abc,a1,prog_to。不能把C語言關鍵字作為用戶標識符,廳圓例如if,for,while等。
標識符長度是由機器上的編譯系統決定的,一般的限制為8字元(註:8字元長度限制是C89標准,C99標准已經擴充長度,其實大部分工業標准都更長)。
標識符對大小寫敏感,即嚴格區分大小寫。一般對變數名用小寫,符號常量命名用大寫。標識符命名應做到「見名知意」,例如,長度(length),求和、總計(sum),圓周率(pi)。
(6)標識符的文法編譯技術擴展閱讀
C語言特點
(1)簡潔的語言
C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。
實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡拿巧潔的編譯系統。
(2)具有結構化的控制語句
C語言是一種結構化的語言,提供的控制語句具有結構化特徵,如for語句、if⋯else語句和switch語句等。可以用於實現函數的邏輯控制,方便麵向過程的程序設計。
(3)豐富的數據類型
C語言包含的數據類型廣泛,不僅包含有傳統的字元型、整型、浮點型、數組類型等數據類型,還具有其他編程語言所不具備的數據類型,其中以指針類型數據使用最為靈活,可以通過編程對各種數據結構進行計算。
(4)豐富的運算符
C語言包含34個運算符,它將賦值、括弧等均是作運算符來操作,使C程序的表達式類型和運算符類型均非常豐富。
(5)可對物理地址進行直接操作
C語言允許對硬體內存地址進行直接讀寫,以此可以實現匯編語言的主要功能,並可直接操作硬體。C語言不但具備高級語言所具有的良好特性,又包含了許多低級語言的優勢,故在系統軟體編程領域有著廣泛的應用。
(6)代碼具有較好的可移植性
C語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境,在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植。
這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。
(7)可生成高質量、目標代碼執行效率高的程序
與其他高級語言相比,C語言可以生成高質量和高效率的目標代碼,故通常應用於對代碼質量和執行效率要求較高的嵌扮敏塌入式系統程序的編寫。
❼ 編譯原理,左線性文法
{l}{l,d}*表示集合 {l}和{l,d}*的乘積,具體含義為「以l開頭的、後面跟著由l和d組成的任意串」。
該文法就是一般語言中的「標識符」的定義(其中:l代表字母letter,d代表數字digit)
❽ C語言的按照標識符、關鍵字、常用編譯指令有哪些
我們可以在C源程序中插入傳給編譯程序的各中指令,這些指令被稱為預處理器指令,它們擴充了程序設計的環境。現把常用的預處理命令總結如下:
1. 預處理程序
按照ANSI標準的定義,預處理程序應該處理以下指令:
#if #ifdef #ifndef #else #elif
#endif
#define
#undef
#line
#error
#pragma
#include
顯然,上述所有的12個預處理指令都以符號#開始,,每條預處理指令必須獨佔一行。
2. #define
#define指令定義一個標識符和一個串(也就是字元集),在源程序中發現該標識符時,都用該串替換之。這種標識符稱為宏名字,相應的替換稱為宏代換。一般形式如下:
#define macro-name char-sequence
這種語句不用分號結尾。宏名字和串之間可以有多個空白符,但串開始後只能以新行終止。
例如:我們使用LEFT代表1,用RIGHT代表0,我們使用兩個#define指令:
#define LEFT 1
#define RIGHT 0
每當在源程序中遇到LEFT或RIGHT時,編譯程序都用1或0替換。
定義一個宏名字之後,可以在其他宏定義中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
宏代換就是用相關的串替代標識符。因此,如果希望定義一條標准錯誤信息時,可以如下定義:
#define ERROR_MS 「Standard error on input \n」
如果一個串長於一行,可在行尾用反斜線」\」續行,如下:
#define LONG_STRING 「This is a very very long \
String that is used as an example」
3. #error
#error指令強制編譯程序停止編譯,它主要用於程序調試。#error指令的一般形式是:
#error error-message
注意,宏串error-message不用雙引號包圍。遇到#error指令時,錯誤信息被顯示,可能同時還顯示編譯程序作者預先定義的其他內容。
4. #include
程序中的#include指令要求編譯程序讀入另一個源文件。被讀入文件的名字必須用雙引號(「」)或一對尖括弧(<>)包圍,例如:
#include 「stdio.h」
#include <stdio.h>
都使C編譯程序讀入並編譯頭文件以用於I/O系統庫函數。
包含文件中可以包含其他#include指令,稱為嵌套包含。允許的最大嵌套深度隨編譯器而變。
文件名被雙括弧或尖括弧包圍決定了對指定文件的搜索方式。文件名被尖括弧包圍時,搜索按編譯程序作者的定義進行,一般用於搜索某些專門放置包含文件的特殊目錄。當文件名被雙括弧包圍時,搜索按編譯程序實時的規定進行,一般搜索當前目錄。如未發現,再按尖括弧包圍時的辦法重新搜索一次。
通常,絕大多數程序員使用尖括弧包圍標準的頭文件,雙引號用於包圍與當前程序相關的文件名。
5. 條件編譯指令
若干編譯指令允許程序員有選擇的編譯程序源代碼的不同部分,這種過程稱為條件編譯。
5.1#if、#else、#elif #endif
條件編譯指令中最常用的或許是#if,#else,#elif和#endif。這些指令允許程序員根據常數表達式的結果有條件的包圍部分代碼。
#if的一般形式是:
#if constant-expression
Statement sequence
#endif
如#if後的常數表達式為真,則#if和#endif中間的代碼被編譯,否則忽略該代碼段。#endif標記#if塊的結束。
#else指令的作用與C語言的else相似,#if指令失敗時它可以作為備選指令。例如:
#include <stdio.h>
#define MAX 100
Int main(void)
{
#if MAX>99
printf(「Compiled for array greater than 99.\n」);
#else
printf(「Complied for small array.\n」);
#endif
return 0;
}
❾ 標識符id由字母或』』_''開頭,包括字母,數字或下劃線構成(不能只有下劃線)。描述其文法。
合仿扮法的標游明識符 _adfs8d85 ad85dsf46sd
不合法的標識符 _______(全部下劃線備磨灶) 8dsf5ad1(數字開頭) das'@d85(含其他特殊字元)
❿ 【編譯原理】第二章:語言和文法
上述文法 表示,該文法由終結符集合 ,非終結符集合 ,產生式集合 ,以及開始符號 構成。
而產生式 表示,一個表達式(Expression) ,可以由一個標識符(Identifier) 、或者兩個表達式由加號 或乘號 連接、或者另一個表達式用括弧包裹( )構成。
約定 :在不引起歧義的情況下,可以只寫產生式。如以上文法可以簡寫為:
產生式
可以簡寫為:
如上例中,
可以簡寫為:
給定文法 ,如果有 ,那麼可以將符號串 重寫 為 ,記作 ,這個過程稱為 推導 。
如上例中, 可以推導出 或 或 等等。
如果 ,
可以記作 ,則稱為 經過n步推導出 ,記作 。
推導的反過程稱為 歸約 。
如果 ,則稱 是 的一個 句型(sentential form )。
由文法 的開始符號 推導出的所有句子構成的集合稱為 文法G生成的語言 ,記作 。
即:
例
文法
表示什麼呢?
代表小寫字母;
代表數字;
表示若干個字母和數字構成的字元串;
說明 是一個字母、或者是字母開頭的字元串。
那麼這個文法表示的即是,以字母開頭的、非空的字元串,即標識符的構成方式。
並、連接、冪、克林閉包、正閉包。
如上例表示為:
中必須包含一個 非終結符 。
產生式一般形式:
即上式中只有當上下文滿足 與 時,才能進行從 到 的推導。
上下文有關文法不包含空產生式( )。
產生式的一般形式:
即產生式左邊都是非終結符。
右線性文法 :
左線性文法 :
以上都成為正則文法。
即產生式的右側只能有一個終結符,且所有終結符只能在同一側。
例:(右線性文法)
以上文法滿足右線性文法。
以上文法生成一個以字母開頭的字母數字串(標識符)。
以上文法等價於 上下文無關文法 :
正則文法能描述程序設計語言中的多數單詞。
正則文法能描述程序設計語言中的多數單詞,但不能表示句子構造,所以用到最多的是CFG。
根節點 表示文法開始符號S;
內部節點 表示對產生式 的應用;該節點的標號是產生式左部,子節點從左到右表示了產生式的右部;
葉節點 (又稱邊緣)既可以是非終結符也可以是終結符。
給定一個句型,其分析樹的每一棵子樹的邊緣稱為該句型的一個 短語 。
如果子樹高度為2,那麼這棵子樹的邊緣稱為該句型的一個 直接短語 。
直接短語一定是某產生式的右部,但反之不一定。
如果一個文法可以為某個句子生成 多棵分析樹 ,則稱這個文法是 二義性的 。
二義性原因:多個if只有一個else;
消岐規則:每個else只與最近的if匹配。