[C#, CSharp, C Sharp 教學 教程 教材 Tutorial] 語彙基元(Token)
YehYeh\'s Notepad yehyeh@gmail.com 

[C#, CSharp] 語彙基元

語彙基元(Token)

  • 語彙基元(token):獨立不可分割的元素
    • 識別項(Identifier)關鍵字(Keyword)常值(Literal)運算子(Operator)標點符號(Punctuator)
    • 語彙基元是編譯器剖析(Parsing)程式碼時的基本單位,不同的語彙基元通常以泛空白字元(Ex:空白、換行、...)隔開
    • 泛空白字元和註解不於語彙基元
    • 編譯器會盡可能選擇最長的字串做為語彙基元
    • using、System、string、Main、)、Program、...
      語彙基元
Δ 回到最上方

識別項(Identifier)

  • 識別項(Identifier):程式中由使用者自行命名的名稱,如命名空間名稱、類別名稱、物件名稱、欄位名稱、...等。
    • 識別項可以由字母Unicode序列_數字組成
    • 識別項首字不可為數字
    • 逐字識別項:若要將關鍵字做為識別項,需以@做為前置詞
Δ 回到最上方

常值(Literal)

  • 常值(Literal):又叫字面值,代表布林值、數字、字元、字串的值
    • 布林常值(Boolean-Literal):可以是truefalse
    • 整數常值(Integer-Literal)
      • 沒有後置字元(Suffix),表示為int、uint、long、ulong中第一個符合的型別
      • 具有後置字元uU之一,表示為uintulong中第一個符合的型別
      • 具有後置字元lL之一,表示為longulong中第一個符合的型別
      • 具有後置字元ULUlulLULulUlu之一,表示為ulong型別
      • 整數常值的值不可超過ulong所能表示的範圍,否則會發生編譯錯誤
      • Console.WriteLine("25   ⇒ " + 25.GetType() );
        // 顯示: 25   ⇒ System.Int32
        
        Console.WriteLine("25U  ⇒ " + 25U.GetType() );
        // 顯示: 25U  ⇒ System.UInt32
        
        Console.WriteLine("25L  ⇒ " + 25L.GetType() );
        // 顯示: 25L  ⇒ System.Int64
        
        Console.WriteLine("25UL ⇒ " + 25UL.GetType() );
        // 顯示: 25UL ⇒ System.UInt64
        
    • 實數常值(Real-Literal):包括floatdoubledecimal型別的值
      • 沒有後置字元(Suffix),表示為double型別
      • 具有後置字元fF,代表其型別為float
      • 具有後置字元dD,代表其型別為double
      • 具有字元eE,代表其後為10的指數
        • Console.WriteLine(1e1);     // 顯示: 10
          Console.WriteLine(1e2);     // 顯示: 100
          Console.WriteLine(1e3);     // 顯示: 1000
          
      • 具有後置字元mM,代表其型別為decimal
        • Console.WriteLine("2.5  ⇒ " + 2.5.GetType() );
          // 顯示: 2.5  ⇒ System.Double
          
          Console.WriteLine("2.5F ⇒ " + 2.5F.GetType() );
          // 顯示: 2.5F ⇒ System.Single
          
          Console.WriteLine("2.5D ⇒ " + 2.5D.GetType() );
          // 顯示: 2.5D ⇒ System.Double
          
          Console.WriteLine("2e2D ⇒ " + 2e2D.GetType() );
          // 顯示: 2e2D ⇒ System.Double
          
          Console.WriteLine("2.5M ⇒ " + 2.5M.GetType() );
          // 顯示: 2.5M ⇒ System.Decimal
          
      • decimal的捨位採用四拾六入五成雙(Banker's Rounding),亦即要捨位的前一位數是奇數就進位,偶數則捨去
        • Console.WriteLine(Math.Round( 0.5 ));  //顯示: 0
          Console.WriteLine(Math.Round( 1.5 ));  //顯示: 2 奇數 ⇒ 進位
          Console.WriteLine(Math.Round( 2.5 ));  //顯示: 2 偶數 ⇒ 捨去
          
    • 16進位:常值可以加上前置字元(Prefix)0x或0X來表示其值為16進位
      • int a = 0x10;                        // 相當於指派10進位的值16給變數a
        Console.WriteLine(a.ToString("D"));  // 顯示: 16 (10進位)
        Console.WriteLine(a.ToString("X"));  // 顯示: 10 (16進位)
        Console.Write("{0:X}", a);           // 顯示: 10 (16進位)
        
    • 字元常值(Character-Literal):單一字元,通常用單引號括住
      • 簡單脫逸序列(Simple-escape-sequence): \' \" \\ \0 \a \b \f \n \r \t \v
      • 單一Unicode字元可用\x接16進位數字表示
    • 字串常值(String-Literal):以雙引號括住的連續字元,可分為規則字串常值逐字字串常值
      • 規則字串常值:以雙引號"括住的字串,可包含簡單脫逸字元,
        • 字串起始的雙引號與結束的雙引號需在同一行
        • 若要表示雙引號則需以脫逸字元\"代表
        • 不可以直接換行,需以脫逸字元\n表示換行
        • Console.Write("字串");    // 顯示: 字串
          Console.Write("字'串");   // 顯示: 字'串
          Console.Write("字\'串");  // 顯示: 字'串
          Console.Write("字\"串");  // 顯示: 字"串
          
      • 逐字字串常值@接雙引號括住的字串,脫逸字元會失去效果,被譯為2個字元
        • 字串起始的雙引號與結束的雙引號不需在同一行
        • 要表示雙引號則要用""
        • 可以直接換行
        • Console.Write(@"字串");    // 顯示: 字串
          Console.Write(@"字'串");   // 顯示: 字'串
          Console.Write(@"字\"串");  // 顯示: 字\"串
          Console.Write(@"字""串");  // 顯示: 字""串
          Console.Write(@"字         // 顯示: 字
          串");                      //        串
          
    • null常值(Null-Literal):通常用來表示變數尚未被指派的狀態
      • string 字串1 = "";      // 空字串
        string 字串2 = null;    // 字串2沒有值
        
    • 標點符號(Punctuator):可以為 {   }   [   ]   (   )   .   ,   :   ;
    • 運算子(Operator):可以為 +   -   *   /   %   &   /   ^   !   ~   =   <   >   ?   ??   ::   ++   --   &&   ||   ->   ==   !=   <=   >=   +=   -=   *=   /=   %=   &=   |=   ^=   <<   <<=   =>   >>   >>=  
  • 常值(Literal)常數(Const):常值是指固定不變的數值,常數是賦予常值一個名稱方便使用
    • const PI = 3.1415926;   // PI是常數, 3.1415926是常值
      int num = 5;            // num是變數, 5是常值
      
Δ 回到最上方

關鍵字(Keyword)

  • 關鍵字(Keyword):在C#中已定義且代表特定功能的字,如void, int, return
    C#關鍵字表
    abstract as base bool break byte case
    catch char checked class const continue decimal
    default delegate do double else enum event
    explicit extern false finally fixed float for
    foreach goto if implicit in int interface
    internal is lock long namespace new null
    object operator out override params private protected
    public readonly ref return sbyte sealed short
    sizeof stackalloc static string struct switch this
    throw true try typeof uint ulong unchecked
    unsafe ushort using virtual void volatile while
Δ 回到最上方