Se você quiser ter certeza de que está analisando comentários em C, precisará confrontar seu modelo com a especificação C. C99 §6.4.9 define a sintaxe dos comentários da seguinte maneira:
1. Exceto dentro de uma constante de caractere, uma string literal ou um comentário, os caracteres /*
introduzem um comentário. O conteúdo desse comentário é examinado apenas para identificar caracteres multibyte e encontrar os caracteres */
que o encerram.
2. Exceto dentro de uma constante de caractere, uma string literal ou um comentário, os caracteres //
introduzem um comentário que inclui todos os caracteres multibyte, até, mas não incluindo, o próximo caractere de nova linha. O conteúdo desse comentário é examinado apenas para identificar caracteres multibyte e encontrar o caractere de nova linha final.
Esta é uma prosa inglesa, não uma definição formal, mas há uma interpretação razoavelmente clara em termos de um autômato finito não determinístico (NFA) que consome um comentário:
- No estado inicial,
/
seguido por *
entra no estado de comentário em várias linhas e /
seguido por /
entra no estado de comentário em linha única.
- No estado de comentário em várias linhas,
*
seguido de /
entra no estado de pós-comentário.
- No estado de comentário em linha única, uma nova linha entra no estado de pós-comentário.
- Qualquer outro caractere deixa o estado inalterado.
Observe que, para saber se o estado inicial se aplica, é necessário executar um pouco mais de análise para detectar cadeias de caracteres e literais de caracteres.
Depois de ter um NFA, você pode usar técnicas padrão para criar uma expressão regular (não as vejo nos artigos da Wikipedia, mas elas devem ser discutidas nos livros didáticos).
Se você já possui uma expressão regular e deseja testá-la, pode comparar sua linguagem gerada com a linguagem NFA deduzida da especificação de linguagem: a igualdade de linguagens regulares é decidível. Uma maneira de decidir a igualdade é construir um autômato determinístico mínimo para cada um; se os idiomas forem equivalentes, os DFAs mínimos serão isomórficos.