Ich möchte Großbuchstaben C Kommentare in einem Text mit Flex.Verwenden Sie flex zu Großbuchstaben C comments
Hier ist meine flex Code:
%{
#include <ctype.h>
%}
%%
\/\/.* {
for(int i = 0; i < strlen(yytext); i++)
printf("%c", toupper(yytext[i]));
}
\/\*[^\*]*\*(\*|[^\*\/][^\*]*)*\/ {
for(int i = 0; i < strlen(yytext); i++)
printf("%c", toupper(yytext[i]));
}
%%
int main(int argc ,char* argv[]) {
yylex();
return 0;
}
int yywrap() {
return 1;
}
Hier ist der Testtext:
/*aBc*aBc/aBc*/
/** /aBc*/
/*aBc*/aBc*/
aBc
aBc/*aBC
aBc/aBc*aBc
aBc**/
/*aBc/*aBc
//aBc
//aBc
aBc
Das Ergebnis:
/*ABC*ABC/ABC*/
/** /ABC*/
/*ABC*/aBc*/
aBc
aBc/*ABC
ABC/ABC*ABC
ABC**/
/*ABC/*ABC
//ABC
//aBc
aBc
Die zweite und vierte Zeile von dem Ende in der Ergebnis sind seltsam.
Was ist falsch an meinem Programm?
Danke für du antwortest! Ich schreibe die Regex von DFA neu und stelle fest, dass ein "*" fehlt. Hoppla ... Jetzt ist es "\/\ * [^ \ *] * \ * (\ * | [^ \ * \ /] [^ \ *] * \ *) * \ /', die den gleichen Effekt haben können mit der Regex du Wirte. – chaosink
Das Entweichen von Metazeichen wie "*" ist innerhalb von Zeichenklassen optional. – chaosink
@chaosink; Ja, das ist was "nicht notwendig" bedeutet. In Posix Regexes ist es nicht erlaubt, aber Flex ist großzügiger. Ich empfehle jedoch immer dagegen, weil es die Lesbarkeit IMHO nicht verbessert, und Sie könnten irgendwann die Regex in einem Dialekt verwenden wollen, der die Fluchten nicht erlaubt. – rici