%% %include Jflex.include %{ int nbOK=0, nbNOT=0, nbUNK=0; void OUT(String s) { System.out.print( s + ":" + yytext()); } %} %eof{ System.out.println("OK=" + nbOK + ", NOT=" + nbNOT + ", UNK=" + nbUNK); %eof} // la solution traditionnelle calculée par négation // d'automate et recurrence de McNaughton & Yamada // OK = b* (a+bb+)* (a*|a+b) // variante lemme de Arden et reduction de Gauss au lieu de McNaughton & Yamada // OK = (a+bb|b)*(a+b)? // La solution habile de Paul VANCAUWENBERGHE CSC4536 2021-2022 OK = b*(a|bb+)*b* NOT = .* aba .* // Astar ab -5 : OK = 47, NOT = 16 // Astar ab -10 : OK = 814, NOT = 1233 %% ^ {OK} \R { OUT("OK "); nbOK++; } ^ {NOT} \R { OUT("NOT"); nbNOT++; } ^ [ab]* \R { OUT("UNK"); nbUNK++; } /* balai sur Sigma* */ [^] { WARN("Invalid Char"); } /* autre que a,b ou NL */