]> git.draconx.ca Git - gob-dx.git/blobdiff - src/lexer.l
Release 0.90.3
[gob-dx.git] / src / lexer.l
index 5f9f7423a211958a0cf35e100e055e0d7dda1d7a..0037b85181537998dce2b3ebe8401a4b7e0b3b95 100644 (file)
@@ -67,17 +67,32 @@ add_to_cbuf(char *s)
 
 <*>\n                  { line_no++; REJECT; }
 
+<*>MOTHERFUCKER                { fprintf(stderr,"You are a bad bad person!\n"); REJECT; }
+
 \/\/.*$                        { ; /*comment, ignore*/ }
-<C_CODE>\/\/.*$                { ; /*comment, ignore*/ }
+<C_CODE>\/\/.*$                { add_to_cbuf(yytext); /*comment, ignore*/ }
 <CLASS_CODE>\/\/.*$    { ; /*comment, ignore*/ }
 <CLASS_CODE_I>\/\/.*$  { ; /*comment, ignore*/ }
 \/\*           {BEGIN(COMMENT); before_comment = INITIAL; }
-<C_CODE>\/\*   {BEGIN(COMMENT); before_comment = C_CODE; }
+<C_CODE>\/\*   {
+       add_to_cbuf(yytext);
+       BEGIN(COMMENT);
+       before_comment = C_CODE;
+}
 <CLASS_CODE>\/\*       {BEGIN(COMMENT); before_comment = CLASS_CODE; }
 <CLASS_CODE_I>\/\*     {BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
-<COMMENT>\*\/  {BEGIN(before_comment);}
-<COMMENT>.     { ; /* comment, ignore */ }
-<COMMENT>\n    { ; /* comment, ignore */ }
+<COMMENT>\*\/  {
+       if(before_comment == C_CODE) add_to_cbuf(yytext);
+       BEGIN(before_comment);
+               }
+<COMMENT>.     {
+       /* comment, ignore */
+       if(before_comment == C_CODE) add_to_cbuf(yytext);
+               }
+<COMMENT>\n    {
+       /* comment, ignore */
+       if(before_comment == C_CODE) add_to_cbuf(yytext);
+               }
 
 ^\%h\{         {
                        BEGIN(C_CODE);
@@ -109,22 +124,21 @@ add_to_cbuf(char *s)
 <C_CODE>\'\\\{\'       { add_to_cbuf(yytext); }
 <C_CODE>\'\}\'         { add_to_cbuf(yytext); }
 <C_CODE>\'\\\}\'       { add_to_cbuf(yytext); }
+<C_CODE>\'\"\'         { add_to_cbuf(yytext); }
+<C_CODE>\'\\\"\'       { add_to_cbuf(yytext); }
        
 <C_CODE>\\.    { add_to_cbuf(yytext); }
 <C_CODE>\"     {
                        BEGIN(C_CODE_STRING);
                        add_to_cbuf(yytext);
                }
-<C_CODE_STRING>\\.     {
-                               add_to_cbuf(yytext);
-                       }
+<C_CODE_STRING>\\.     { add_to_cbuf(yytext); }
 <C_CODE_STRING>\"      {
                                BEGIN(C_CODE);
                                add_to_cbuf(yytext);
                        }
-<C_CODE_STRING>.       {
-                               add_to_cbuf(yytext);
-                       }
+<C_CODE_STRING>.       { add_to_cbuf(yytext); }
+<C_CODE_STRING>\n      { add_to_cbuf(yytext); }
 
 <C_CODE>\{     {
                        parenth_depth++;
@@ -165,6 +179,9 @@ class               {
 <CLASS_CODE_I>float    {return FLOAT;}
 <CLASS_CODE_I>double   {return DOUBLE;}
 <CLASS_CODE_I>char     {return CHAR;}
+<CLASS_CODE_I>const    {return CONST;}
+
+<CLASS_CODE_I>\.\.\.   {return THREEDOTS;}
 
 <CLASS_CODE_I>public   {yylval.line = line_no; return PUBLIC;}
 <CLASS_CODE_I>private  {yylval.line = line_no; return PRIVATE;}
@@ -203,9 +220,11 @@ class              {
                                return '}';
                        }
 
-<CLASS_CODE,CLASS_CODE_I,INITIAL>[\n\t ]       ;  /*ignore*/
+<CLASS_CODE,CLASS_CODE_I,INITIAL>[\t ] ;  /*ignore*/
 
 <*>.           {
                        yylval.line = line_no;
                        return yytext[0];
                }
+
+<*>[\n\r]      ;  /*ignore*/