]> git.draconx.ca Git - gob-dx.git/blobdiff - src/lexer.l
Release 2.0.12
[gob-dx.git] / src / lexer.l
index 56f86ada52aa2186740e99b3dc31a97faddd0a85..971b121886e3833837700dcd9c7a44bff47a9722 100644 (file)
@@ -104,6 +104,7 @@ int yylex(void);
 %x C_CODE
 %x CODE_STRING
 %x CLASS_CODE
+%x CLASS_STRING
 %x CLASS_CODE_I
 %x PROPERTY_CODE
 %x PROPERTY_CODE_I
@@ -473,6 +474,22 @@ flags              { return FLAGS; }
                }
 
 <CLASS_CODE>from       {return FROM;}
+<CLASS_CODE>\" {
+                       BEGIN(CLASS_STRING);
+                       before_string = CLASS_CODE;
+                       add_to_cbuf(yytext);
+               }
+<CLASS_STRING>\\.      { add_to_cbuf(yytext); }
+<CLASS_STRING>\"       {
+                       BEGIN(before_string);
+                       add_to_cbuf(yytext);
+                       yylval.id = cbuf->str;
+                       g_string_free (cbuf, FALSE);
+                       cbuf = NULL;
+                       return STRING;
+               }
+<CLASS_STRING>.        { add_to_cbuf(yytext); }
+<CLASS_STRING>\n       { add_to_cbuf(yytext); }
 
 <CLASS_CODE_I,PROPERTY_CODE_I>void     {return VOID;}
 <CLASS_CODE_I,PROPERTY_CODE_I>struct   {return STRUCT;}
@@ -548,12 +565,12 @@ flags             { return FLAGS; }
                                REJECT;
                        }
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)+ {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z_][A-Za-z0-9_]*)+        {
                        /* this one is for a classname with a namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)*        {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z_][A-Za-z0-9_]*)*       {
                        /* this is for a classname with an empty namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
@@ -571,12 +588,16 @@ flags             { return FLAGS; }
                        yylval.id = g_strdup(yytext);
                        return ARRAY_DIM;
                }
-
+<CLASS_CODE_I>:[0-9]+ {
+                       /* cheat for bitfield */
+                       yylval.id = g_strdup(yytext);
+                       return ARRAY_DIM;
+               }
 <CLASS_CODE>\{ {
                        BEGIN(CLASS_CODE_I);
                        return '{';
                }
-<CLASS_CODE_I>\{       {
+<CLASS_CODE_I,PROPERTY_CODE>\{ {
                        BEGIN(C_CODE);
                        parenth_depth=1;
                        class_after_c = TRUE;
@@ -599,4 +620,13 @@ flags              { return FLAGS; }
 
 <*>[\n\r]      ;  /*ignore*/
 
+^[ \t]*prealloc[ \t]+[0-9]+[ \t]*$ {
+                       char *p;
+                       int t;
+                       p = strchr (yytext,'p');
+                       g_assert (p); /* we MUST have found it */
+                       sscanf (p, "prealloc %d", &t);
+                       prealloc=t;
+               }
+
 %%