Egy D forrásfájl karakterekből áll. ASCII és bármely UTF kódolás megengedett. A forrásfájl felbontása a maximális munch technikával történik, azaz a lexikális elemző megpróbálja a lehető leghosszabb tokent értelmezni. Például a >> egy jobbra léptető tokent jelent, nem pedig két "nagyobb, mint" relációt.
Háromféle komment használható a D nyelvben:
Az azonosítók betűvel vagy _ jellel kezdődnek, és tetszőleges számú betűvel, _ jellel vagy számjeggyel folytatódik. Az azonosító hossza tetszőleges. a kis- és nagybetűk különböznek. A __ jellel kezdődő azonosítók foglalt szavakat jelölnek.
Egy string literál lehet dupla idézőjeles string, egyszeres idézőjeles string és vezérlő sorozat.
Az egyszeres idézőjeles string sima aposztrófok - ' ' - közé van zárva. Az aposztrófokon belül lévő karakterek részei a stringnek, kivéve a sorvége-jelet, amelyet egy egyszerű \n karakterként kell tekinteni. Vezérlő karaktersorozat nem szerepelhet itt.
A dupla idézőjeles string kettős idézőjelek - " " - közé van zárva. Vezérlő karaktersorozatot be lehet ágyazni a \ jelöléssel. a sorvégejel itt is egy egyszerű \n karakterként van értelmezve.
A vezérlő karaktersorozat egy \ jellel kezdődik és egy vezérlő karaktersorozattal folytatódik. Egymás mellett lévő vezérlő karaktersorozatok konkatenáltként értelmezendők.
Minden ettől eltérő formájú vezérlő sorozat hibát eredményez.
Szomszédos stringeket a ~ operátorral vagy egymás mellé helyezéssel lehet konkatenálni
Az alábbi stringek ekvivalensek:
Egy számot decimálisként, binárisként, oktálisként illetve hexadecimálisként specifikálhatunk. Egy decimális szám decimális számjegyek sorozatából áll. Egy bináris szám a '0b'-vel kezdődik és bináris számjegyek sorozata követi. Egy oktális szám a '0'-val kezdődik és oktális számjegyek sorozata követi. Egy hexadecimális szám hexadecimális számjegyek sorozatából áll, amely a '0x'-el kezdődik vagy a 'h'-val végződik.
A számokat követheti egy 'l' vagy egy 'u' vagy mindkettő.
A szám típusa a következők alapján dönthetők el:
Egy float lehet decimális vagy hexadecimális, mint a standard C-ben. Egy hexadecimális float egy '0x'-el kezdődik és a kitevő egy 'p' vagy 'P'-vel van jelölve, amelyet a 2-nek egy hatványa követ. Egy float-ot követhet egy 'f','F', 'l' vagy 'L' suffix. Az 'f' vagy 'F' suffix azt jelenti, hogy ez egy float, az 'l' vagy 'L' jelzi, hogy ez kiterjesztett. Ha egy float literált egy 'i' vagy 'I' követ, akkor ez egy képzett típus.
Példa:
A komplex literálok nem tokenek, de a szemantikus elemzésnél egy valós és egy képzett kifejezésből összerakódik.
A kulcsszavak foglalt azonosítókat jelentenek, ezek a következők:
abstract | alias | align | asm | assert | auto | bit |
body | break | byte | case | cast | catch | cent |
char | class | complex | const | continue | debug | default |
delegate | delete | deprecated | do | double | else | enum |
export | extended | extern | false | final | finally | float |
for | super | null | new | short | int | long |
imaginary | if | switch | synchronized | return | goto | struct |
interface | import | static | override | in | out | inout |
private | protected | public | invariant | this | throw | true |
try | typedef | ubyte | ucent | uint | ulong | union |
ushort | version | void | volatile | wchar | while | with |
Tokenek az alábbiak lehetnek:
Identifier | StringLiteral | IntegerLiteral | FloatLiteral | Keyword | |
/ | /= | . | .. | ... | |
& | &= | && | | | |= | |
|| | - | -= | -- | + | |
+= | ++ | < | <= | << | |
<<= | <> | <>= | > | >= | |
>>= | >>>= | >> | >>> | ! | |
!= | !== | !<> | !<>= | !< | |
!<= | !> | !>= | ( | ) | |
[ | ] | { | } | ? | |
, | ; | : | $ | = | |
== | === | * | *= | % | |
%= | ^ | ^= | ~ | ~= |