A Digitalmars D programozási nyelv

Nyelvi elemek

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.

Kommentek

Háromféle komment használható a D nyelvben:

/* Karakterek */
// Karakterek Sorvége-jel
/+ Karakterek(beágyazható) +/

A kommenteket nem lehet konkatenálásra használni, például az abc/**/def két tokent - abc és def - jelent, nem pedig egy abcdef tokent.

Azonosítók

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.

Literálok

String literál

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.

'hello'
'c:\root\foo.exe'
'ab\n' // 4 karakteres string: 'a', 'b', '\', 'n'

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.

"hello"
"c:\\root\\foo.exe"
"ab\n" // 3 karakteres string: 'a', 'b', és egy sorvége-jel
"ab
" // 3 karakteres string: 'a', 'b', és egy sorvége-jel

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.

\n // sorvége-jel
\t // tabulátor
\" // dupla idézőjel
\012 // oktális
\x1A // hexadecimális
\u1234 // wchar
\r\n // kocsivissza, sorvége-jel

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

"hello " "world" ~ \n // a string: 'h','e','l','l','o',' ','w','o','r','l','d',sorvége-jel

Az alábbi stringek ekvivalensek:

"ab" "c"
'ab' 'c'
'a' "bc"
"a" ~ "b" ~ "c"
\0x61"bc"
Integer literál

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:

  1. Ha decimális, akkor ulong-ként, long-ként vagy int-ként lesz reprezentálva.
  2. Ha nem decimális -> ulong, long, uint, int.
  3. Ha a suffixe 'u' -> ulong, uint.
  4. Ha a suffixe 'l' -> ulong, long.
  5. Ha a suffixe 'u' és 'l' -> ulong.
Float literál

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:

0x1.FFFFFFFFFFFFFp1023 // double.max 0x1p-52 // double.epsilon 1.175494351e-38F // float.min 6.3i // imaginary 6.3

A komplex literálok nem tokenek, de a szemantikus elemzésnél egy valós és egy képzett kifejezésből összerakódik.

4.5 + 6.2i // komplex szám

Fenntartott kulcsszavak

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

Tokenek az alábbiak lehetnek:

Identifier StringLiteral IntegerLiteral FloatLiteral Keyword
/ /= . .. ...
& &= && | |=
|| - -= -- +
+= ++ <= << 
<<= <>  <>= >=
>>= >>>= >>  >>>  !
!= !== !<> !<>= !<
!<= !> !>= ( )
[ ] { } ?
, ; : $ =
== === * *= %
%= ^ ^= ~ ~=