Cours de langage D (interfece) en PDF


Télécharger Cours de langage D (interfece) en PDF

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Cours de langage D

...

Chapitre 1 Introduction

D est un langage de programmation système à usage général avec une syntaxe de type C qui se compile en code natif. Il est typé de manière statique et prend en charge la gestion de la mémoire automatique (récupération de la mémoire) et manuelle. Les programmes D sont structurés sous forme de modules pouvant être compilés séparément et liés à des bibliothèques externes pour créer des bibliothèques ou des exécutables natifs.

Ce document est le manuel de référence du langage de programmation D. Pour plus d'informations et d'autres documents, consultez le site Web du langage D.

1.1 Phases de compilation

Le processus de compilation est divisé en plusieurs phases. Chaque phase ne dépend pas des phases suivantes. Par exemple, le scanner n'est pas perturbé par l'analyseur sémantique. Cette séparation des passes rend les outils langagiers tels que les éditeurs à commande syntaxique relativement faciles à produire. Il est également possible de compresser la source D en la stockant sous une forme `tokenisée '.

  1. jeu de caractères source

Le fichier source est vérifié pour voir quel jeu de caractères il s'agit et le scanner approprié est chargé.

Les formats ASCII et UTF sont acceptés.

  1. ligne de script

Si la première ligne commence par "#!", Cette ligne est ignorée.

  1. analyse lexicale

Le fichier source est divisé en une séquence de jetons. Les jetons spéciaux sont remplacés par d'autres. SpecialTokenSequences sont traités et supprimés.

  1. analyse syntaxique

La séquence de jetons est analysée pour former des arbres de syntaxe.

  1. analyse sémantique

Les arbres de syntaxe sont parcourus pour déclarer des variables, charger des tables de symboles, affecter des types et, en général, déterminer la signification du programme.

  1. optimisation

L'optimisation est une passe facultative qui tente de réécrire le programme dans une version équivalente, mais dont l'exécution est plus rapide.

  1. génération de code

Les instructions sont sélectionnées dans l'architecture cible pour mettre en œuvre la sémantique du programme. Le résultat typique sera un fichier objet, approprié pour une entrée dans un éditeur de liens

Chapitre 2 Lexical

L'analyse lexicale est indépendante de l'analyse syntaxique et de l'analyse sémantique. L'analyseur lexical divise le texte source en jetons. La grammaire lexicale décrit la syntaxe de ces jetons. La grammaire est conçue pour être adaptée à la numérisation à grande vitesse et pour faciliter l’écriture d’un scanner approprié. Il y a un minimum de règles de cas particuliers et il n'y a qu'une phase de traduction.

2.1 Texte source

Le texte source peut être dans l'un des formats suivants:

ˆ ASCII

ˆ UTF-8

ˆ UTF-16BE

ˆ UTF-16LE

ˆ UTF-32BE

ˆ UTF-32LE

L'une des nomenclatures UTF suivantes (marques d'ordre d'octet) peut être présente au début du texte source:

Marques d'ordre d'octet UTF

Format BOM

UTF-8 EF BB BF

UTF-16BE FE FF

UTF-16LE FF FE

UTF-32BE 00 00 FE FF

UTF-32LE FF FE 00 00

ASCII pas de nomenclature

Si le fichier source ne commence pas par une nomenclature, alors le premier caractère doit être inférieur ou égal à U + 0000007F.

Le texte source est décodé de sa représentation source en caractères Unicode. Les personnages sont ensuite divisés en: WhiteSpace, EndOfLine, Comments, SpecialTokenSequences, Tokens, tous suivis de EndOfFile.

Le texte source est divisé en jetons à l’aide de la technique de munch maximale, c’est-à-dire que l’analyseur lexical fabrique le plus long jeton possible. Par exemple, >> est un jeton de décalage à droite, pas deux plus grands que des jetons.

Il y a deux exceptions à cette règle:

ˆ A .. intégré dans ce qui ressemble à deux littéraux à virgule flottante, comme en 1..2, est interprété comme si le .. était séparé par un espace du premier entier.

ˆ A 1.a est interprété comme les trois jetons 1,. Et a, alors que 1. a est interprété comme les deux jetons 1. et a.

2.2 Jeu de caractères

Caractère: n'importe quel caractère Unicode

2.3 Fin du fichier

EndOfFile: fin physique du fichier

\ u0000

\ u001A

Le texte source est terminé par celui qui vient en premier.

2.4 Fin de ligne

Fin de ligne

:

\ u000D

\ u000A

\ u000D \ u000A

\ u2028

\ u2029

Fin de fichier

2.5 espace blanc

Espace blanc

:



Espace

Espace blanc

Espace

:

\ u0020

\ u0009

\ u000B

\ u000C

2.6 Commentaires

Commentaire

:

BlockComment

LineComment

NestingBlockComment

BlockComment

:

/* Personnages */

LineComment

:

// Caractères EndOfLine

NestingBlockComment:

/ + NestingBlockCommentCharacters + /

NestingBlockCommentCharacters:

NestingBlockCommentCharacter

NestingBlockCommentCharacter NestingBlockCommentCharacters

NestingBlockCommentCharacter:

Personnage

NestingBlockComment

Personnages:

Personnage

Caractères Personnages

Il y a trois sortes de commentaires:

  1. Les commentaires de bloc peuvent s'étendre sur plusieurs lignes, mais ne sont pas imbriqués.
  2. Les commentaires de ligne se terminent à la fin de la ligne.
  3. Les commentaires de bloc d'imbrication peuvent s'étendre sur plusieurs lignes et peuvent s'emboîter.

Le contenu des chaînes et des commentaires ne sont pas segmentés. Par conséquent, les ouvertures de commentaires survenant dans une chaîne ne commencent pas un commentaire et les délimiteurs de chaîne dans un commentaire n'affectent pas la reconnaissance des fermetures de commentaires et des ouvertures imbriquées / + commentaires. À l'exception de / + apparaissant dans un commentaire / +, les ouvertures de commentaire dans un commentaire sont ignorées.

a = / + // + / 1; // analyse comme si 'a = 1;'

a = / + "+ /" + / 1 "; // analyse comme si 'a =" + / 1 ";'

a = / + / * + / * / 3; // analyse comme si 'a = * / 3;'

Les commentaires ne peuvent pas être utilisés comme concaténateurs de jetons. Par exemple, abc / ** / def est deux jetons, abc et def, pas un seul jeton abcdef.

... ...

Wysiwyg Cordes

Les chaînes citées par Wysiwyg ("ce que vous voyez est ce que vous obtenez") sont entourées par r "et". Tous les caractères entre "et" font partie de la chaîne. Il n'y a pas de séquences d'échappement dans les chaînes wysiwyg.

r "Je suis Oz"

r "c: \ games \ Sudoku.exe"

r "ab \ n" // chaîne de 4 caractères,

// 'a', 'b', '\', 'n'

Une autre forme de chaîne wysiwyg est encadrée par des guillemets, le caractère `.

`le grand et puissant. '

`c: \ games \ Empire.exe`

`Le chien" paresseux "

`a" b \ n` // chaîne est composée de 5 caractères,

 // 'a', '"', 'b', '\', 'n'

Cordes doubles citées

Les chaînes entre guillemets sont entourées de "". Des EscapeSequences peuvent être incorporés dans eux.

"Qui es-tu?"

"c: \\ games \\ Doom.exe"

"ab \ n" // la chaîne est composée de 3 caractères,

// 'a', 'b' et un saut de ligne

"un B

"// chaîne est composée de 3 caractères,

// 'a', 'b' et un saut de ligne

Hex Strings

Les chaînes hexadécimales permettent de créer des littéraux de chaîne à l'aide de données hexadécimales. Les données hexadécimales ne doivent pas nécessairement former des caractères UTF valides.

x "0A" // identique à "\ x0A"

x "00 FBCD 32FD 0A" // idem

// "\ x00 \ xFB \ xCD \ x32 \ xFD \ x0A"

Les espaces et les nouvelles lignes sont ignorés, de sorte que les données hexadécimales peuvent être facilement formatées. Le nombre de caractères hexadécimaux doit être un multiple de 2.

Remarque: les chaînes hexadécimales sont obsolètes. Veuillez utiliser std.conv.hexString à la place.

Cordes délimitées

Les chaînes délimitées utilisent différentes formes de délimiteurs. Le délimiteur, qu’il s’agisse d’un caractère ou d’un identifiant, doit suivre immédiatement le "sans espace blanc intermédiaire. Le délimiteur final doit précéder immédiatement la fermeture" sans espace blanc intermédiaire. Un délimiteur imbriqué imite, et est l'un des caractères suivants:

Délimiteurs de nidification

Délimiteur Correspondant Délimiteur

[]

()

<> 

{}

q "(foo (xxx))" // "foo (xxx)"

q "[foo {]" // "foo {"



Si le délimiteur est un identifiant, l'identifiant doit être immédiatement suivi d'un saut de ligne et le délimiteur correspondant est le même identifiant commençant au début de la ligne:

Writeln (q "EOS

Ce

est un multi-ligne

chaîne heredoc

EOS "

)

La nouvelle ligne qui suit l'identificateur d'ouverture ne fait pas partie de la chaîne, mais la dernière nouvelle ligne précédant l'identificateur de fermeture fait partie de la chaîne. L'identifiant de fermeture doit être placé sur sa propre ligne dans la colonne la plus à gauche.

Sinon, le délimiteur correspondant est identique au caractère de délimiteur:

q "/ toto] /" // "toto]"

// q "/ abc / def /" // erreur

Chaînes de jetons

Les chaînes de jetons s'ouvrent avec les caractères q {et se ferment avec le jeton}. Entre les deux doivent être des jetons D valides. Le nid de jetons {et}. La chaîne est formée de tous les caractères compris entre l'ouverture et la fermeture de la chaîne de jeton, y compris les commentaires.

q {c'est la voix de} // "c'est la voix de"

q {/ *} * /} // "/ *} * /"

q {world (q {control}); } // "world (q {control});"

q {__TIME__} // "__TIME__"

// c'est-à-dire qu'il n'est pas remplacé par le temps

// q {__EOF__} // erreur

// __EOF__ n'est pas un jeton, c'est la fin du fichier

Poteau de ficelle x

Le caractère facultatif StringPost x donne un type spécifique à la chaîne, plutôt que d'être déduit du contexte. Les types correspondant aux caractères post x sont:

Chaîne littérale Post x caractères

Post x Type Aka

c immuable (char) [] chaîne

w immuable (wchar) [] wstring

d immuable (dchar) [] dstring

"bonjour" c // chaîne

"bonjour" w // wstring

"bonjour" d // dstring

Les littéraux de chaîne sont assemblés sous la forme de tableaux de caractères UTF-8, et le post x est appliqué pour être converti au format wchar ou dchar selon les besoins, à la fin.

2.10 Séquences d'échappement

Les séquences d'échappement listées dans EscapeSequence sont:

Tableau 2.1: Séquences d'échappement

Séquence Signification

\ 'Citation simple littérale:'

\ "Double citation:"

\? Point d'interrogation littéral:?

\\ barre oblique inverse littérale: \

\ 0 Binaire zéro (NUL, U + 0000).

Séquence Signification

\ un caractère BEL (alarme) (U + 0007).

\ b Retour arrière (U + 0008).

\ f Form Feed (FF) (U + 000C).

\ n Fin de ligne (U + 000A).

\ r Retour chariot (U + 000D).

\ t Onglet horizontal (U + 0009).

\ v Onglet vertical (U + 000B).

\ xnn Valeur d'octet en hexadécimal, où nn est spécifié sous forme de deux chiffres hexadécimaux. Par exemple: \ xFF représente le caractère avec la valeur 255.

\ n \ nn \ nnn Valeur d'octet en octal.Par exemple: \ 101 représente le caractère avec la valeur 65 ('A'). Analogues aux caractères hexadécimaux, la valeur d'octet la plus grande est \ 377

(= \ xFF en hexadécimal ou 255 en décimal)

\ unnnn Caractère Unicode U + nnnn, où nnnn sont quatre chiffres hexadécimaux. Par exemple, \ u03B3 représente le caractère Unicode γ (U + 03B3 - GREEK SMALL LETTER GAMMA).

\ Unnnnnnnn Le caractère Unicode U + nnnnnnnn, où nnnnnnnn sont 8 chiffres hexadécimaux. Par exemple, \ U0001F603 représente le caractère Unicode U + 1F603 (SMILING

FACE À BOUCHE OUVERTE).

\ name Entité de caractère nommée issue de la spécification HTML5. Voir NamedCharacterEntity.

2.11 Littéraux de caractère

Caractère Littéral:

'SingleQuotedCharacter'

SingleQuotedCharacter:

Personnage

Séquence d'échappement

Les littéraux de caractères sont un seul caractère ou une séquence d'échappement entourés de guillemets simples.

'h' // la lettre h

'\ n' // nouvelle ligne

'\\' // le caractère barre oblique inverse



58