Jika Anda ingin memastikan bahwa Anda menguraikan komentar C, Anda harus berhadapan dengan model Anda dengan spesifikasi C. C99 §6.4.9 mendefinisikan sintaks komentar sebagai berikut:
1. Kecuali dalam konstanta karakter, string literal, atau komentar, karakter /*
memperkenalkan komentar. Isi dari komentar semacam itu hanya diperiksa untuk mengidentifikasi karakter multibyte dan untuk menemukan karakter */
yang menghentikannya.
2. Kecuali dalam konstanta karakter, string literal, atau komentar, karakter //
memperkenalkan komentar yang mencakup semua karakter multibyte hingga, tetapi tidak termasuk, karakter baris baru berikutnya. Isi dari komentar semacam itu hanya diperiksa untuk mengidentifikasi karakter multibyte dan untuk menemukan karakter baris baru yang berakhir.
Ini adalah prosa bahasa Inggris, bukan definisi formal, tetapi ada interpretasi yang cukup jelas dalam hal robot hingga nondeterministic finite (NFA) yang menggunakan komentar:
- Dari kondisi awal,
/
diikuti oleh *
memasuki kondisi komentar di-multiline, dan /
diikuti oleh /
memasuki kondisi komentar di-baris-tunggal.
- Dari status in-multiline-comment,
*
diikuti oleh /
memasuki status post-comment.
- Dari status in-single-line-comment, baris baru memasuki status pasca-komentar.
- Karakter lain mana pun tidak mengubah keadaan.
Perhatikan bahwa untuk mengetahui apakah kondisi awal berlaku, Anda harus melakukan sedikit lebih banyak analisis untuk mendeteksi string dan karakter literal.
Setelah memiliki NFA, Anda dapat menggunakan teknik standar untuk membangun ekspresi reguler (Saya tidak melihatnya di artikel Wikipedia, tetapi harus dibahas dalam buku teks).
Jika Anda sudah memiliki ekspresi reguler dan ingin mengujinya, Anda dapat membandingkan bahasa yang dihasilkan dengan yang dari NFA yang disimpulkan dari spesifikasi bahasa: kesetaraan bahasa biasa dapat ditentukan. Salah satu cara untuk memutuskan kesetaraan adalah dengan membangun otomat deterministik minimal untuk masing-masing; jika bahasanya setara, DFA minimal adalah isomorfik.