• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當(dāng)自強(qiáng)而不息

            【ZT】D語(yǔ)言詞法分析(2)

            字符串文字量

            	字符串文字量:	所見(jiàn)即所得字符串	替代所見(jiàn)即所得字符串	雙引號(hào)字符串		轉(zhuǎn)義序列		十六進(jìn)制字符串	
            	StringLiteral:	WysiwygString	AlternateWysiwygString	DoubleQuotedString	EscapeSequence	HexString	
             
            	所見(jiàn)即所得字符串:	r" 多個(gè)所見(jiàn)即所得字符 "	替代所見(jiàn)即所得字符串:	` 多個(gè)所見(jiàn)即所得字符 `	所見(jiàn)即所得字符:	字符		
            	WysiwygString:	r" WysiwygCharacters "	AlternateWysiwygString:	` WysiwygCharacters `	WysiwygCharacter:	Character	
            	
            	行尾		雙引號(hào)字符串:		" 多個(gè)雙引號(hào)字符 "		雙引號(hào)字符:		字符		轉(zhuǎn)義序列		
            	EndOfLine	DoubleQuotedString:	" DoubleQuotedCharacters "	DoubleQuotedCharacter:	Character		EscapeSequence	
             
            	行尾		轉(zhuǎn)義序列:	\'	\"	\?	\\	\a	\b	\f	\n	\r	\t	\v		
            	EndOfLine	EscapeSequence:	\'	\"	\?	\\	\a	\b	\f	\n	\r	\t	\v	
            	
            	\ 文件尾		\x 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字	\ 八進(jìn)制數(shù)字	\ 八進(jìn)制數(shù)字 八進(jìn)制數(shù)字	\ 八進(jìn)制數(shù)字 八進(jìn)制數(shù)字 八進(jìn)制數(shù)字		
            	\ EndOfFile	\x HexDigit HexDigit		\ OctalDigit	\ OctalDigit OctalDigit	\ OctalDigit OctalDigit OctalDigit
             
            	\u 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字	
            	\u HexDigit HexDigit HexDigit HexDigit			
             
            	\U 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字 十六進(jìn)制數(shù)字	十六進(jìn)制字符串:		
            	\U HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit					HexString:
            		
            	x" 多個(gè)十六進(jìn)制字符串字符 "	多個(gè)十六進(jìn)制字符串字符:	十六進(jìn)制數(shù)字	空白		行尾
            	x" HexStringChars "		HexStringChar		HexDigit	WhiteSpace	EndOfLine	
             

            字符串文字量可以是一個(gè)雙引號(hào)字符串、一個(gè)所見(jiàn)即所得引號(hào)字符串、一個(gè)轉(zhuǎn)義序列、或者一個(gè)十六進(jìn)制字符串。

            所見(jiàn)即所得引號(hào)字符串由‘r"’和‘"’包圍起來(lái)。所有位于‘r"’和‘"’之間的字符都是字符串的一部分,只有 行尾 除外,他被視作一個(gè)‘\n’字符。在 r" " 中沒(méi)有轉(zhuǎn)義序列:

            	r"hello"	r"c:\root\foo.exe"	r"ab\n"		// 由四個(gè)字符組成的字符串:'a'、'b'、'\'、'n'	
            所見(jiàn)即所得字符串的另一種形式是使用反引號(hào)‘`’代替雙引號(hào)。‘`’字符并不是所有的鍵盤(pán)上都有,而且有時(shí)在屏幕上難以同另一個(gè)常用的字符‘'’區(qū)分。盡管‘`’很少使用,當(dāng)用在包含‘"’的字符串時(shí)就會(huì)體現(xiàn)出它的價(jià)值。
            	`hello`	`c:\root\foo.exe`	`ab\n`		// 由四個(gè)字符組成的字符串:'a'、'b'、'\'、'n'	
            雙引號(hào)字符串是用‘""’包圍起來(lái)的字符串。可以使用典型的‘\’記號(hào)在其中嵌入轉(zhuǎn)義序列。行尾 被視作一個(gè)‘\n’字符。
            	"hello"	"c:\\root\\foo.exe"	"ab\n"	// 由三個(gè)字符組成的字符串:'a'、'b'和一個(gè)新行符	
            	"ab	"			// 由三個(gè)字符組成的字符串:'a'、'b'和一個(gè)新行符	
            轉(zhuǎn)義字符串由‘\’開(kāi)始,他和其后的字符構(gòu)成了一個(gè)轉(zhuǎn)義字符序列。相鄰的轉(zhuǎn)義字符串會(huì)被連接在一起:
            	\n		// 新行符	
            	\t		// 制表符	
            	\"		// 雙引號(hào)	
            	\012		// 八進(jìn)制	
            	\x1A		// 十六進(jìn)制	
            	\u1234		// wchar 字符	
            	\U00101234	// dchar 字符	
            	\r\n		// 回車換行	
            除了上面列出的,其他的轉(zhuǎn)義序列都是非法的。

            十六進(jìn)制字符串使用十六進(jìn)制數(shù)據(jù)構(gòu)造字符串:

            	x"0A"			// 等價(jià)于 "\x0A"	
            	x"00 FBCD 32FD 0A"	// 等價(jià)于 "\x00\xFB\xCD\x32\xFD\x0A"	
            空白和新行符會(huì)被忽略,因此可以很方便的格式化。十六進(jìn)制字符的個(gè)數(shù)必須是2的倍數(shù)。

            相鄰的字符串應(yīng)該用 ~ 運(yùn)算符連接,或者也可以僅僅并置即可:

            	"hello " ~ "world" ~ \n	// 構(gòu)成字符串:'h','e','l','l','o',' ','w','o','r','l','d',字符串	
            下面的形式都是等價(jià)的:
            	"ab" "c"	r"ab" r"c"	r"a" "bc"	"a" ~ "b" ~ "c"	\x61"bc"	

            字符文字量

            	字符文字量:	' 單引號(hào)字符 '		單引號(hào)字符		字符		轉(zhuǎn)義序列	
            	CharacterLiteral:	' SingleQuotedCharacter '	SingleQuotedCharacter	Character		EscapeSequence	
            字符文字量是單個(gè)的字符或者由單引號(hào)括起來(lái)的轉(zhuǎn)義序列,' ' 。

            整數(shù)文字量

            	整數(shù)文字量:	整數(shù)	整數(shù) 	整數(shù)后綴		整數(shù):		十進(jìn)制數(shù)		二進(jìn)制數(shù)		八進(jìn)制數(shù)		
            	IntegerLiteral:	Integer	Integer I	ntegerSuffix	Integer:		Decimal		Binary		Octal		
             
            	十六進(jìn)制數(shù)	整數(shù) _	整數(shù)后綴:	l	L	u	U	lu	Lu	lU	LU	ul	uL		
            	Hexadecimal	Integer _IntegerSuffix:	l	L	u	U	lu	Lu	lU	LU	ul	uL
             
            	Ul	UL	十進(jìn)制數(shù):	0	非零數(shù)字		非零數(shù)字 	十進(jìn)制數(shù)		非零數(shù)字 _ 十進(jìn)制數(shù)	二進(jìn)制數(shù):	
            	Ul	UL	Decimal:		0	NonZeroDigit	NonZeroDigit 	Decimal		NonZeroDigit _ Decimal	Binary:
             
            	0b 二進(jìn)制數(shù)字	0B 二進(jìn)制數(shù)字	八進(jìn)制數(shù):	0 八進(jìn)制數(shù)字	十六進(jìn)制數(shù):	0x 十六進(jìn)制數(shù)字	0X 十六進(jìn)制數(shù)字
            	0b BinaryDigits	0B BinaryDigits	Octal:		0 OctalDigits	Hexadecimal:	0x HexDigits	0X HexDigits	
             
            整數(shù)可以采用十進(jìn)制、二進(jìn)制、八進(jìn)制或者十六進(jìn)制。

            十進(jìn)制整數(shù)是十進(jìn)制數(shù)字的序列。

            二進(jìn)制整數(shù)是二進(jìn)制數(shù)字的序列,以‘0b’為前綴。

            八進(jìn)制整數(shù)是八進(jìn)制數(shù)字的序列,以‘0’為前綴。

            十六進(jìn)制整數(shù)是十六進(jìn)制數(shù)字的序列,以‘0x’為前綴,或者使用‘h’作為后綴。

            整數(shù)可以內(nèi)嵌 '_' 字符,它們會(huì)被忽略。嵌入的 '_' 可以用于格式化較長(zhǎng)的文字量,例如作為千位分隔符:

            	123_456		// 123456	
            	1_2_3_4_5_6_	// 123456	
            整數(shù)后可以緊跟著一個(gè) 'l' 或者一個(gè) 'u' 或者兩者都有。

            整數(shù)的類型按照下述規(guī)則判斷:

            1. 如果是十進(jìn)制的,它是 ulong、long、int 中從后向前找到的第一個(gè)可以表示它的類型。
            2. 如果不是十進(jìn)制的,它是 ulong、long、uint、int 中從后向前找到的第一個(gè)可以表示它的類型。
            3. 如果它有后綴‘u’,它是 ulong、uint 中從后向前找到的第一個(gè)可以表示它的類型。
            4. 如果它有后綴‘l’,它是 ulong、long 中從后向前找到的第一個(gè)可以表示它的類型。
            5. 如果它同時(shí)擁有后綴‘u’和‘l’,它是 ulong 類型。

            浮點(diǎn)數(shù)文字量

            	浮點(diǎn)數(shù)文字量:	浮點(diǎn)數(shù)	浮點(diǎn)數(shù) 浮點(diǎn)數(shù)后綴	浮點(diǎn)數(shù) 虛數(shù)后綴		浮點(diǎn)數(shù) 浮點(diǎn)數(shù)后綴 虛數(shù)后綴		浮點(diǎn)數(shù):	十進(jìn)制浮點(diǎn)數(shù)	
            	FloatLiteral:	Float	Float FloatSuffix	Float ImaginarySuffix	Float FloatSuffix ImaginarySuffix	Float:	DecimalFloat	
            	
            	十六進(jìn)制浮點(diǎn)數(shù)	浮點(diǎn)數(shù) _	浮點(diǎn)數(shù)后綴:	f	F	l	L	虛數(shù)后綴:		i	I
            	HexFloat	Float _	FloatSuffix:	f	F	l	L	ImaginarySuffix:	i	I		
            浮點(diǎn)數(shù)可以使用十進(jìn)制或者十六進(jìn)制格式,如同標(biāo)準(zhǔn) C 一樣。

            十六進(jìn)制浮點(diǎn)數(shù)以 0x 開(kāi)頭,階碼以 p 或者 P 開(kāi)頭,后面跟著以 2 為底的階數(shù)。

            浮點(diǎn)文字量可以有嵌入的‘_’字符,它們會(huì)被忽略。嵌入的‘_’用來(lái)格式化冗長(zhǎng)的文字量以提高可讀性,例如可以將它們用作千位分隔符:

            	123_456.567_8		// 123456.5678	
            	1_2_3_4_5_6_._5_6_7_8	// 123456.5678	
            	1_2_3_4_5_6_._5e-6_	// 123456.5e-6	
            浮點(diǎn)數(shù)可以跟隨有一個(gè) fFl 或者 L 后綴。fF 后綴說(shuō)明這是一個(gè)浮點(diǎn)數(shù),lL 說(shuō)明這是一個(gè)擴(kuò)展格式浮點(diǎn)數(shù)。

            如果浮點(diǎn)文字量后面跟著 i 或者 I ,那么它就是一個(gè) ireal (虛數(shù))類型。

            示例:

            	0x1.FFFFFFFFFFFFFp1023		// double.max	
            	0x1p-52				// double.epsilon	
            	1.175494351e-38F			// float.min	
            	6.3i				// idouble 6.3	
            	6.3fi				// ifloat 6.3	
            	6.3LI				// ireal 6.3	
            如果文字量超出了該類型的表示范圍,會(huì)被視為錯(cuò)誤。如果文字量取整后可以用該類型的有效位數(shù)字表示,就不是錯(cuò)誤。

            復(fù)數(shù)文字量不是記號(hào),而是在語(yǔ)義分析時(shí)用實(shí)數(shù)和虛數(shù)表達(dá)式構(gòu)造的:

            	4.5 + 6.2i		// 復(fù)數(shù)	

            關(guān)鍵字

            關(guān)鍵字是保留的標(biāo)志符:
            	Keyword:	
            	abstract		alias		align		asm		assert		auto		bit
            	body		break		byte		case		cast		catch		cent		char
            	class		cfloat		cdouble		creal		const		continue		dchar		debug	
            	default		delegate		delete		deprecated	do		double		else		enum
            	export		extern		false		final		finally		float		for		foreach
            	function		goto		idouble		if		ifloat		import		in		inout	
            	int		interface		invariant		ireal		is		long		mixin		module	
            	new		null		out		override		package		pragma		private		protected
            	public		real		return		short		static		struct		super		switch	
            	synchronized	template		this		throw		true		try		typedef		typeof	
            	ubyte		ucent		uint		ulong		union		unittest		ushort		version	
            	void		volatile		wchar		while		with	

             

            特殊記號(hào)序列

            特殊記號(hào)序列由詞法分析程序處理,它可以出現(xiàn)在其他記號(hào)之間,并且不影響語(yǔ)法分析。

            目前只有一個(gè)特殊記號(hào)序列,#line

            	特殊記號(hào)序列		# line 整數(shù) 行尾		# line 整數(shù) Filespec 行尾		指定文件		" 字符 "
            	SpecialTokenSequence	# line Integer EndOfLine	# line Integer Filespec EndOfLine	Filespec		" Characters "		
            它會(huì)將源代碼的行號(hào)設(shè)置為 整數(shù) 的值,將源代碼文件名設(shè)置為可選的 Filespec 的值,從源碼文本的下一行生效。與碼文件名和行號(hào)用于打印調(diào)試信息,還被符號(hào)調(diào)試器用于將生成的代碼映射回源代碼。

            例如:

            	int #line 6 "foo\bar"	x;	// 這里是文件 foo\bar 的第6行	
            注意,Filespec 字符串中的反斜杠不會(huì)被特殊對(duì)待。

            posted on 2007-09-13 20:21 lovedday 閱讀(442) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ▲ D Program

            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評(píng)論

            欧美久久久久久午夜精品| 亚洲精品乱码久久久久久蜜桃不卡 | 色婷婷久久综合中文久久蜜桃av| 亚洲精品午夜国产VA久久成人| 香港aa三级久久三级老师2021国产三级精品三级在| 精品熟女少妇av免费久久| 久久99精品国产麻豆婷婷| 99久久国产亚洲综合精品| 久久美女网站免费| 囯产极品美女高潮无套久久久| 久久免费视频网站| 久久久久国产精品| 国产免费久久久久久无码| 久久久久久午夜成人影院| 亚洲欧美成人久久综合中文网| 久久99精品国产99久久| 亚洲∧v久久久无码精品| 久久无码人妻一区二区三区| 久久香蕉综合色一综合色88| 久久精品国产亚洲Aⅴ香蕉| 婷婷综合久久中文字幕| 久久精品中文无码资源站 | 久久国产精品一国产精品金尊| 2020久久精品国产免费| 久久综合亚洲鲁鲁五月天| 久久亚洲日韩精品一区二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 91久久精品国产成人久久| 综合久久一区二区三区 | 大伊人青草狠狠久久| 久久久久人妻一区精品| 中文字幕人妻色偷偷久久| 国产一区二区精品久久岳| 波多野结衣AV无码久久一区| 亚洲国产成人久久精品动漫| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲一区精品伊人久久伊人| 97精品久久天干天天天按摩| 亚洲国产一成久久精品国产成人综合 | 久久婷婷久久一区二区三区| 伊人久久大香线蕉av不卡|