Supprimer les commentaires de code C/C++

Est-il un moyen facile de supprimer les commentaires de C/C++ source file sans aucun prétraitement. (c'est à dire, je pense que vous pouvez utiliser gcc -E, mais ce sera d'élargir les macros.) Je veux juste le code source avec des commentaires dépouillé, rien d'autre ne doit être changé.

EDIT:

Préférence vers un outil existant. Je ne veux pas avoir à écrire moi-même avec les regexes, je prévois aussi de nombreuses surprises dans le code.

  • C'est réellement un bon exercice pour la simple utilisation d'un analyseur lexical et l'analyseur de!
  • Devons-nous nous attendre à des trucs comme /* à l'intérieur des commentaires ou des chaînes de caractères?
  • C'est réellement un bon exercice pour l'utilisation d'un très compliquée analyseur lexical et l'analyseur.
  • oui, je m'attends à beaucoup de trucs. Je ne veux pas avoir à faire toutes les hypothèses
  • c'est ce que fait un bon exercice. 🙂
  • Si le drdobbs.com/cpp/184401344 c'est vrai, vous ne pouvez pas supprimer les commentaires (s'attendant à tours) sans l'expansion des macros.
  • êtes-vous sérieusement downvoting des gens qui essaient de vous aider?
  • non, je ne downvoted un commentaire à ce jour et elle a lié à une terrible code
  • Je ne crois pas que le Dr Dobbs, et gcc s'engage à: error: pasting "/" and "/" does not give a valid preprocessing token -ce qui est prévu, comme le commentaire de suppression qui se passe avant de prétraitement
  • il ne nécessite qu'un analyseur lexical, pas un analyseur à tous. Un tout en un C++ lexer est plus complexe que la plupart, il n'est pas encore terriblement difficile. Ne vous méprenez pas: je ne suis pas particulièrement à le recommander à l'aide d'un outil existant -- mais si l'analyse était nécessaire, il serait infiniment plus difficile qu'il ne l'est vraiment.
  • Le préprocesseur est de la sémantique, en particulier ce qui concerne les commentaires. Ainsi, le pré-traitement nécessite un analyseur. C'est pourquoi tous les compilateurs C et C++ construire le préprocesseur dans le compilateur.
  • mais non. Un analyseur traite de la structure des énoncés. Du point de vue de la langue, un commentaire est un jeton qui n'a pas de participer à toute structure plus grande. C'est pas différent d'un caractère espace (en fait, dans la phase trois de la traduction, chaque commentaire doit être remplacé par un seul caractère espace). Comme pour la construction du préprocesseur dans le compilateur, l'explication est beaucoup plus simple: le préprocesseur donne souvent de très grande sortie, afin de le communiquer au compilateur de manière efficace améliore la vitesse de compilation beaucoup.
  • Je réfute vous donc - /* ... */ commentaires ne peuvent pas être traitées par un simple analyseur lexical. Vous semblez être l'amalgame entre la langue avec la mise en œuvre.
  • mais non. Oui, C le style des commentaires peuvent être traitées par un analyseur lexical. Je ne suis pas l'amalgame entre la langue avec la mise en œuvre: je suis tout simplement vous dire ce que je sais par expérience-j'ai écrit un analyseur lexical pour le C et le C++ qui traite à la fois des styles de commentaires parfaitement bien. Tout ce qui était non-trivial par la plupart des normes, par rapport à un analyseur C++, "trivial", c'est exactement ce qu'il est.
  • Comme vous, j'ai écrit un analyseur lexical (et un compilateur) pour C. Et comme vous, je sais ce qu'est un analyseur lexical n'est - il produit un flux de jetons (ou lexèmes, si nous voulons être pédant). Ce qu'est un analyseur lexical n'est de procéder à l'analyse sémantique, qui est ce qui est nécessaire pour gérer bloquer les commentaires. Ceci est mon dernier post sur ce sujet.
  • Peut-être que c'est le meilleur-vous semblez être de répéter la même affirmation, sans preuve à l'appui. Vous n'avez pas encore une fois souligné que l'analyse sémantique que vous pensez est nécessaire pour analyser les observations correctement, juste répété que c'est (dont la norme, non seulement n'a pas besoin, mais n'a pas vraiment de même permettre). Vous substituer trigraphs, splice lignes, puis briser la source en jetons, et les séquences de l'espace blanc (y compris les commentaires). Si vous essayez de prendre plus de sémantique dans le compte de qui, vous le faites mal...
  • N'est pas notre objectif habituellement pour obtenir plus de commentaires dans le code?
  • ma réponse poignées de tous les cas pratiques. Il fonctionne parfaitement, aussi longtemps que /*,//,*/ ne pas séparer en deux lignes. Qui est essentiellement une machine à état avec les états: 1 partie de la chaîne de caractères littérale, la partie 2 de C style de commentaire, partie 3 de style C++ commentaire, 4 autres. La manipulation de continuation de ligne trop.
  • Voir stackoverflow.com/a/13062682/1745001 pour savoir comment vraiment faire ce robuste (et simplement).

InformationsquelleAutor Mike | 2010-03-06