Est le C++, libre de tout contexte ou contextuelle?

J'entends souvent des réclamations que le C++ est un contexte sensible de la langue. Prenons l'exemple suivant:

a b(c);

Est-ce une définition de variable ou d'une déclaration de fonction? Cela dépend de la signification du symbole c. Si c est un variable, puis a b(c); définit une variable nommée b de type a. Il est initialisée directement avec c. Mais si c est un type, puis a b(c); déclare une fonction nommée b qui prend un c et renvoie un a.

Si vous regardez la définition du contexte langues, il va vous dire que toutes les règles de grammaire doit avoir de gauche qui consistent exactement un non-terminal symbole. Contexte de grammaires, d'autre part, de permettre à des chaînes arbitraires de terminaux et non-terminaux sur le côté gauche.

La navigation par le biais de l'Annexe A de la "Le Langage de Programmation C++", je ne pouvais pas trouver une seule règle de grammaire qui n'avait rien d'autre à part un non-terminal symbole sur son côté gauche. Cela impliquerait que le C++ est libre de tout contexte. (Bien sûr, chaque contexte du langage est également sensible au contexte, dans le sens que le contexte langues forment un sous-ensemble de l'contextuelle langues, mais ce n'est pas le point.)

Donc, est le C++, libre de tout contexte ou contextuelle?

  • Votre exemple montre clairement qu'il soit sensible au contexte.
  • Montrez-moi une seule règle de grammaire de C++ qui n'est pas constitué d'une seule non-terminal symbole sur son côté gauche, et je vais immédiatement vous croire.
  • IIUC ça dépend un peu sur l'endroit où vous dessinez la ligne pour la sensibilité au contexte. Je pense que j'ai vu de gens affirment que presque tous les typé statiquement les langages de programmation sont sensibles au contexte, non pas parce que vous ne pouvez pas construire une pratique compilateur pour eux avec CFG analyse des outils, mais parce que de telles implémentations de "tricher" par l'analyse de certains invalides des programmes et que les rejeter plus tard, lors de la vérification de type. Donc, si vous envisagez de mal tapé des programmes de ne pas être dans la langue (dans le CS sens, c'est à dire un ensemble de chaînes de caractères), l'analyseur doit accepter, plus de langues que C++ sont sensibles au contexte.
  • Ces gens sont dans l'erreur. Théorie des langages formels est une belle distinction entre les étapes, et sensible au contexte se réfère spécifiquement à l'analyse uniquement, pas de sémantique impliqués.
  • Honnêtement, je pensais que "sensible au contexte de la langue" est bien défini. Peut-être que je me trompe et il y a plusieurs définitions établies? Si c'est le cas, je serai heureux d'accepter la première réponse à m'expliquer 🙂
  • Non, vous vous trompez. Il n'y a pas de "analyse" ou "sémantique" dans le langage formel de la théorie du tout, juste de la "langue" qui est un ensemble de chaînes de caractères.
  • Pas de réponses à ce jour ont effectivement abordé votre définition de "context-free grammar". À mon avis, la réponse correcte à cette question, soit de la cites, la production dans l'annexe A qui ne correspond pas à votre définition, ou démontre que votre définition est incorrecte ou insuffisante. Stand your ground!
  • Pas tous les "définitions" sont Formelles, c'est pourquoi j'ai voté pour ré-ouvrir: les alternatives étaient en train de gagner! Dans ce genre de questions, il aide vraiment à l'accent de référence/le point particulier de guide [initial] des réponses.
  • Voir en fait D la grammaire vraiment libre de tout contexte?. En fait, je pense que tous ici devrait lire cette question et ses réponses!
  • Ne annexe A prétendre qu'il est à la fois nécessaire et suffisante définition complète du langage C++? Alors qu'est-ce que le reste de la norme document (moins la partie de la bibliothèque standard) sur?
  • Je viens de mettre la clé de citation de l'Annexe A dans ma réponse, ci-dessous. L'annexe A ne prétend pas être une définition de la langue.
  • Ressemble à aucune des réponses (y compris le mien) en fait répondre à la question! (Pour commencer, je ne vois pas comment un contexte sensible de la grammaire pourrait résoudre un de ces problèmes que les gens ont mentionné sans hacks.)
  • vous pourriez ne pas avoir vu cette citation dans ma réponse quelque part à quelqu'un d'autre: "Mathématiquement, un contexte sensible de la langue est l'équivalent d'un linéaire bornée de la machine de Turing non déterministe, également appelé un linéaire bornée automate". Je ne sais plus quoi vous vous attendez à une réponse.
  • voir mon autre commentaire ci-dessous votre réponse.
  • c'est parce que la solution réelle, il faudrait une planète vaut la peine de productions. Le fait qu'il est turing montre qu'il est possible d'écrire. Je ne pense pas que vous avez besoin de plus d'une réponse.
  • Personne n'a demandé une solution pour le C++, quel que soit le contexte sensible de la langue qui présente le même problème/solution suffirait
  • math.stackexchange.com/questions/163830/...
  • Cependant, je ne vois pas où OP demandé pour cela. Vous l'avez fait. Soins à poser une autre question?
  • Je pourrais le faire, mais j'ai envie de répondre que les revendications C++ est sensible au contexte doit être prêt à expliquer comment un contexte sensible de la grammaire serait en mesure de l'analyser.
  • FredOverflow: Ok, maintenant je vois, @rici réponse est ce que vous cherchez! Assurez-vous de suivre le lien! Il décrit comment une CSG pouvez regarder des copies de symboles, qui est ce dont nous avons besoin pour le C++.
  • Si, comme vous le dites, "très libre de tout contexte de la langue est également sensible au contexte" et les deux seules options (par la question) est "C++ libre de tout contexte ou contextuelle?" alors la réponse est clairement qu'il est moins sensible au contexte. Si, toutefois, vous voulez dire à votre question réponse "oui/non", alors peut-être :-p
  • Liés copie exacte de la question n'est pas aussi bien construit que celui-ci. En désaccord avec les proches.
  • Je pense que la question liée est bien, mais les principales réponses sont incorrectes. Ils devraient probablement être fusionnées.
  • Thunk Pourrait vous tuer l'acceptation de ma réponse. Je suis convaincu que DeamMG et coll. sont droit, mais je ne peux pas les supprimer.
  • Le problème avec ce titre c'est qu'il suppose que C++ est à moins sensible au contexte; il ne l'est pas. Je voudrais le changer s'il ne serait pas invalider tant dans les réponses.
  • Cela ne signifie pas que ce n'est pas un doublon. Cependant, je serai d'accord avec un compromis pour fermer cette question comme un doublon de celui-ci, pour ce qui va devenir "raisons historiques".
  • Voir aussi: Comment Clang gère le type / nom de la variable de l'ambiguïté de C/C++ eli.thegreenplace.net/2012/07/05/...
  • Si Une question est bonne, et la question B est mauvais, ne fermez pas la question A. Fermer l'autre comme un double, et de laisser le bon. L'autre question n'avait aucune information utile dans ses réponses. Celui-ci a de grandes choses.
  • Je me demande je ne suis pas venu à cette question... - I often hear claims that C++ is a context-sensitive language -- Oui, ensemble de tous les possible de corriger les programmes d'un langage formel est de la LCF en effet de " C " la langue est un CFL -- contrainte comme la déclaration d'abord, puis l'utiliser plus tard CSL - Vous ne pouvez pas trouver toute seule règle de CSG parce que le Compilateur est écrit en utilisant le problème est que nous ne savons pas efficaces pour l'analyse technique de l'ASC, de Sorte que nous utilisons CFG et poignées caractéristiques explicitement par programmation.
  • Ici, dans ma réponse: quelqu'un Peut-il donner un simple mais non-toy exemple d'un contexte sensible de la grammaire? j'ai essayé d'expliquer pourquoi une langue est de la CSL, même avec la même syntaxe. L'applicabilité de la syntaxe correcte de la règle de sur type est aussi un CS-fonction qui est dans votre exemple. Mais la compilation de résoudre et de choisir règle de grammaire à l'aide des informations stockées dans le symbole-table explicitement (il n'y a pas de grammaire, vous trouverez en Annexe).

InformationsquelleAutor fredoverflow | 2013-01-29