32 votes

Pourquoi un langage de programmation a-t-il besoin de mots-clés?

Par exemple (en C):

int break = 1;
int for = 2;

Pourquoi le compilateur avoir aucun problème en déduire qu' break et for sont des variables ici?


Donc, nous avons besoin de mots-clés parce que

  • nous voulons que les programmes de façon à être lisible
  • nous ne voulons pas compliquer à l'excès le travail déjà complexe, les compilateurs d'aujourd'hui
  • mais le plus important, une langue est beaucoup plus puissant si certains " clé'words sont réservés pour certaines actions spéciales. Ensuite, la langue peut penser être utile à un niveau plus élevé plutôt que de mourir en essayant de le mettre en œuvre une boucle de façon non ambiguë.

28voto

Jerry Coffin Points 237758

Il n'est pas nécessaire -- Fortran n'a pas de réserve, des mots, des choses comme:

if if .eq. then then if = else else then = if endif

sont juridique complet. Ceci n'est pas une langue difficile pour le compilateur à l'analyse, mais souvent presque impossible pour une personne de lire ou de repérer les erreurs. par exemple, considérons classique Fortran (disons, jusqu'à la Fortran 77 -- je n'ai pas utilisé récemment, mais au moins l'espoir qu'ils ont corrigé quelques choses comme cela dans la plus récente des normes). Une Fortran NE boucle ressemble à ceci:

DO 10 I = 1,10

Sans être côte-à-côte, vous pouvez probablement voir comment vous pouvez manquer la façon dont cela a été différent:

DO 10 I = 1.10

Malheureusement, ce dernier n'est pas une boucle à tous -- c'est une simple affectation de la valeur 1.10 à une variable nommée DO 10 I (oui, il permet aussi d'espaces dans un nom). Depuis le Fortran prend également en charge implicite (non déclarées) variables, c'est (ou était) tout à fait légal, et certains compilateurs serait même l'accepter sans un avertissement!

20voto

Kache Points 2182

Ensuite, que fera l’ordinateur lorsqu’il rencontre une déclaration du type:

 while(1) {
  ...
  if (condition)
    break;
}
 

Est-ce que ça devrait casser? Ou devrait-il le traiter comme 1; ?

Le langage deviendrait ambigu dans certains cas, ou il faudrait créer un analyseur syntaxique très intelligent pouvant déduire une syntaxe subtile, ce qui représente un travail supplémentaire inutile.

8voto

Ira Baxter Points 48153

Ils n'en ont pas. PL/1 célèbre a pas de mots-clés; chaque "mot clé" (COMMENCER, FAIRE, ...) peuvent également être utilisés dans un nom de variable. Mais en permettant cela signifie que vous pouvez écrire vraiment obscur code: SI FAIRE>COMMENCER, PUIS D'IMPRIMER:=APPEL GOTO; La réservation de la "déclaration des mots-clés" que la langue n'est pas une perte si cet ensemble des noms est modeste (comme il l'est dans toutes les langues que j'ai jamais vu, sauf PL/1 :-).

APL également célèbre a pas de mots-clés. Mais il a un ensemble de près de 200 incroyable symboles iconiques dans lequel écrire compliqué opérateurs. (le "domino" de l'opérateur [ne pas demander!] est une boîte carrée avec une calculatrice diviser signe dans le milieu) Dans ce cas, la langue concepteurs simplement utilisé les icônes au lieu de mots-clés. La conséquence en est que l'APL a une réputation d'être une "écriture seule" langue.

Bottom line: pas une obligation, mais il a tendance à rendre les programmes beaucoup plus lisible si les mots clés sont réservés identifiants à partir d'un petit ensemble connu pour les programmeurs. (Certaines langues a insisté sur le fait que les "mots-clés" démarrer avec un caractère de ponctuation comme le "." pour permettre à l'ensemble des identifiants à être utilisé, mais ce n'est pas la peine de les problèmes supplémentaires de type ou de l'encombrement sur la page, son assez facile de rester loin de la "identificateurs" qui correspondent à des mots clés lors de l'ensemble de mots clés est petit).

6voto

Bertrand Marron Points 9284

Comme il est étiqueté C, le langage C d'origine était tel que par défaut, toute variable était définie comme type int .

Cela signifie que foo; déclarerait une variable de type int .

Disons que vous faites break; . Comment le compilateur sait-il si vous souhaitez déclarer une variable nommée break ou utiliser le mot clé break ?

4voto

lexu Points 5385

plusieurs raisons:

  • Les mots-clés peuvent sembler sans ambiguïté dans vos exemples. Mais ce n'est pas le seul endroit où vous utiliseriez la variable "break" ou la variable "for".

  • écrire l'analyseur serait beaucoup plus difficile et sujet aux erreurs pour peu de gain.

  • L'utilisation d'un mot-clé comme nom de fonction ou de procédure dans une bibliothèque peut avoir des effets secondaires indésirables, éventuellement liés à la sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X