Napisałem sobie program do kolorowania składni języka C++ (po przepuszczeniu przez skompilowany program efektem jest kod html ktory ma tagi kolorujace). Ale chcę go teraz przerobić na koloryzator Python'a przy czym mam małe niedociągnięcia (co mozna poprawic?), oto kod:

%{
#include <stdlib.h>
%}
%x komentarze zwykle_komentarze wypisz inkludy dip2 wypisz_2
nlinia \n
dekl  (def|short|int|double|float|long|char|string|bool|signed|unsigned|static|const|virtual)
reszta (do|while|for|if|case|break|switch|default|return|else|break|continue|new|this)
stdlib (DictMixin|IterableUserDict|UserDict|Codec|EncodedFile|StreamReader|StreamReaderWriter|StreamRecoder|StreamWriter|ascii_decode|ascii_encode|backslashreplace_errors|charbuffer_encode|charmap_decode|charmap_encode|decode|encode|escape_decode|escape_encode|getdecoder|getencoder|getreader|getwriter|ignore_errors|latin_1_decode|latin_1_encode|lookup|lookup_error|make_encoding_map|make_identity_dict|open|raw_unicode_escape_decode|raw_unicode_escape_encode|readbuffer_encode|register|register_error|replace_errors|strict_errors|unicode_escape_decode|unicode_escape_encode|unicode_internal_decode|unicode_internal_encode|utf_16_be_decode|utf_16_be_encode|utf_16_decode|utf_16_encode|utf_16_ex_decode|utf_16_le_decode|utf_16_le_encode|utf_7_decode|utf_7_encode|utf_8_decode|utf_8_encode|xmlcharrefreplace_errors|add_extension|clear_extension_cache|constructor|pickle|pickle_complex|remove_extension|CodecRegistryError|normalize_encoding|search_function|Codec|StreamConverter|StreamReader|StreamWriter|getregentry|ArithmeticError|AssertionError|AttributeError|DeprecationWarning|EOFError|EnvironmentError|Exception|FloatingPointError|FutureWarning|IOError|ImportError|IndentationError|IndexError|KeyError|KeyboardInterrupt|LookupError|MemoryError|NameError|NotImplementedError|OSError|OverflowError|OverflowWarning|PendingDeprecationWarning|ReferenceError|RuntimeError|RuntimeWarning|StandardError|StopIteration|SyntaxError|SyntaxWarning|SystemError|SystemExit|TabError|TypeError|UnboundLocalError|UnicodeDecodeError|UnicodeEncodeError|UnicodeError|UnicodeTranslateError|UserWarning|ValueError|Warning|ZeroDivisionError|checkcache|clearcache|getline|getlines|updatecache|WCOREDUMP|WEXITSTATUS|WIFCONTINUED|WIFEXITED|WIFSIGNALED|WIFSTOPPED|WSTOPSIG|WTERMSIG|abort|access|chdir|chmod|chown|chroot|close|confstr|ctermid|dup|dup2|error|execl|execle|execlp|execlpe|execv|execve|execvp|execvpe|fchdir|fdatasync|fdopen|fork|forkpty|fpathconf|fstat|fstatvfs|fsync|ftruncate|getcwd)

pkomentarz "/*"
kkomentarz "*/"
kom [#]
pukosnik ("//")
czudzyslow (["])
import "import"
spacja [ ]
tab \t
d_i_p_1 ^({dekl}|{reszta})/([ ]|"["|"]"|","|"("|")"|"?"|":"|";"|"+"|"-"|"*"|"/")
d_i_p_2 ([ ]|"["|"]"|","|"("|")"|"?"|":"|";"|"*"|"+"|"-"|"*"|"/")/({dekl}|{reszta})
znaczki ([ ]|"["|"]"|","|"("|")"|"?"|":"|";"|"+"|"-"|"*"|"/")
nawiasy ("{"|"}")
cudzyslow_2 (['])

%option noyywrap 

%%

{nlinia} printf ("<BR>");

{d_i_p_1} printf("<B><font color='DARKORANGE'>%s</font></B>",yytext);
{d_i_p_2} BEGIN(dip2); printf("<B><font color='DARKBLUE'>%s</font></B>",yytext);

<dip2>({dekl}|{reszta})/([" " ]|"["|"]"|","|"("|")"|"?"|":"|";"|"\n"|"+"|"-"|"*"|"/") printf("<B><font color='DARKORANGE'>%s</font></B>",yytext); BEGIN(INITIAL);
<dip2>({dekl}|{reszta})/([[:print:]]) printf("%s",yytext); BEGIN(INITIAL);

<komentarze,zwykle_komentarze,wypisz,wypisz_2,inkludy>"<"	printf("&lt;");
<komentarze,zwykle_komentarze,wypisz,wypisz_2,inkludy>">"	printf("&gt;");
<INITIAL>("<<") printf("<font color='FUCHSIA'>&lt&lt</font>");
<INITIAL>(">>") printf("<font color='FUCHSIA'>&gt&gt</font>");

<INITIAL,komentarze,zwykle_komentarze,wypisz,wypisz_2,inkludy>{spacja}   printf("&nbsp;");
<INITIAL,komentarze,zwykle_komentarze,wypisz,wypisz_2,inkludy>{tab}      printf("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
<INITIAL>{znaczki} printf("<B><font color='DARKBLUE'>%s</font></B>",yytext);
<INITIAL>{stdlib} printf("<B><font color='BROWN'>%s</font></B>",yytext);
{nawiasy} printf("<font color='DARKPURPLE'>%s</font>",yytext);

{import} BEGIN(inkludy); printf("<B><font color='RED'>%s",yytext);
<inkludy>{nlinia} printf("%s</font></B><BR>",yytext); BEGIN(INITIAL);
{pukosnik} BEGIN(zwykle_komentarze); printf("<I><font color='BLUE'>%s",yytext);

{kom} BEGIN(inkludy); printf("<I><font color='BLUE'>%s",yytext);
<zwykle_komentarze>{nlinia} printf("%s</font></I><BR>",yytext); BEGIN(INITIAL);
{pkomentarz} BEGIN(komentarze); printf("<I><font color='BLUE'>%s",yytext);
<komentarze>{nlinia} printf("<BR>");
<komentarze>{kkomentarz} printf("%s</font></I>",yytext); BEGIN(INITIAL);

{czudzyslow} BEGIN(wypisz); printf("<B><font color='GREEN'>%s",yytext);
<wypisz>{nlinia} printf("<BR>");
<wypisz>{czudzyslow} printf("%s</font></B>",yytext); BEGIN(INITIAL);
{cudzyslow_2} BEGIN(wypisz_2); printf("<font color='LIGHTGREEN'>%s",yytext);
<wypisz_2>{nlinia} printf("<BR>");
<wypisz_2>{cudzyslow_2} printf("%s</font>",yytext); BEGIN(INITIAL);

%%

main()
{
yylex();
return 0;
}

</span></i>