H    [\x80\x80-\xFF\xFF]
E    [a-zA-Z]
S    [^a-zA-Z0-9\x80\x80-\xFF\xFF\n\x20]
SP   [\x20]
N    [0-9]
%%
{H}+                              { if( (r = checkAndCat(" T_KOR ")) < 0 ) return r; }
{E}+(-{E})*                       { if( (r = checkAndCat(" T_ENG ")) < 0 ) return r; }
{N}+                              { if( (r = checkAndCat(" T_NUM ")) < 0 ) return r; }
{N}*\.{N}+                        { if( (r = checkAndCat(" T_NUM ")) < 0 ) return r; }
{N}+\.{N}*                        { if( (r = checkAndCat(" T_NUM ")) < 0 ) return r; }
{N}{1,3}(\,{N}{N}{N})*(\.{N}*)?   { if( (r = checkAndCat(" T_NUM ")) < 0 ) return r; }
{N}+/{N}+                         { if( (r = checkAndCat(" T_NUM ")) < 0 ) return r; }
{S}                               { if( (r = checkAndCat(" T_SYM ")) < 0 ) return r; }
{SP}                              { if( (r = checkAndCat(" T_SYM ")) < 0 ) return r; }
\n                                { return 1; }
%%
checkAndCat( s )
    char* s;
{
    // if string length is too long to fit in lexResult
    // variable, then return -1 (error).
    //
    if( strlen(lexResult) + yyleng + strlen(s) >= LEN_LEXRESULT ) return -1;

    strncat( lexResult, yytext, yyleng);
    strcat( lexResult, s );

    fflush(stdout);
    return 1;
}
