Wenn Sie sicher sein möchten, dass Sie C-Kommentare analysieren, müssen Sie Ihr Modell mit der C-Spezifikation konfrontieren. C99 §6.4.9 definiert die Syntax von Kommentaren wie folgt:
1. Außer innerhalb einer Zeichenkonstante, eines Zeichenfolgenliteral oder eines Kommentars führen die Zeichen /*
einen Kommentar ein. Der Inhalt eines solchen Kommentars wird nur untersucht, um Multibyte-Zeichen zu identifizieren und die Zeichen zu finden, die */
ihn beenden.
2. Außer innerhalb einer Zeichenkonstante, eines Zeichenfolgenliteral oder eines Kommentars führen die Zeichen //
einen Kommentar ein, der alle Multibyte-Zeichen bis zum nächsten Zeilenumbruch enthält, jedoch nicht enthält. Der Inhalt eines solchen Kommentars wird nur untersucht, um Multibyte-Zeichen zu identifizieren und das abschließende neue Zeilenzeichen zu finden.
Dies ist englische Prosa, keine formale Definition, aber es gibt eine einigermaßen klare Interpretation in Bezug auf einen nichtdeterministischen endlichen Automaten (NFA), der einen Kommentar verbraucht:
- Ab dem Anfangszustand tritt
/
gefolgt von dem *
Eintritt in den mehrzeiligen Kommentarzustand und /
gefolgt von dem /
Eintritt in den einzeiligen Kommentarzustand ein.
- Aus dem Status "In-Multiline-Kommentar",
*
gefolgt vom /
Status "Post-Kommentar".
- Aus dem Status "Einzeiliger Kommentar" wechselt eine neue Zeile in den Status "Nachkommentar".
- Jedes andere Zeichen lässt den Status unverändert.
Beachten Sie, dass Sie, um zu wissen, ob der Anfangszustand zutrifft, etwas mehr Analysen durchführen müssen, um Zeichenfolgen- und Zeichenliterale zu erkennen.
Sobald Sie eine NFA haben, können Sie Standardtechniken verwenden, um einen regulären Ausdruck zu erstellen (ich sehe sie nicht in den Wikipedia-Artikeln, aber sie sollten in Lehrbüchern besprochen werden).
Wenn Sie bereits einen regulären Ausdruck haben und ihn testen möchten, können Sie seine generierte Sprache mit der aus der NFA abgeleiteten Sprache vergleichen, die aus der Sprachspezifikation abgeleitet wurde: Die Gleichheit der regulären Sprachen ist entscheidbar. Eine Möglichkeit, die Gleichheit zu bestimmen, besteht darin, für jeden einen minimalen deterministischen Automaten zu erstellen. Wenn die Sprachen äquivalent sind, sind die minimalen DFAs isomorph.