X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/56beb0d2b20edc2f0ac8716c020053f8a103577d..86d4727e727a55648196205cff450c96569ec4a6:/src/lexer.l diff --git a/src/lexer.l b/src/lexer.l index b3b2d59..d33965d 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -1,5 +1,9 @@ -/* GOB C Preprocessor - * Copyright (C) 1999 the Free Software Foundation. +%top{ +/* + * GOB C Preprocessor + * Copyright (C) 1999-2000 the Free Software Foundation. + * Copyright (C) 2000 Eazel, Inc. + * Copyright (C) 2001-2011 George (Jiri) Lebl * * Author: George Lebl * @@ -18,9 +22,10 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ -%{ +#include +} -#include "config.h" +%{ #include #include #include @@ -93,9 +98,10 @@ add_gtk_doc_func(void) gtk_doc_func = NULL; } -/* Ugly warning avoiding */ +/* Ugly warning / error avoidings */ #ifdef FLEX_SCANNER int yylex(void); +int yywrap(void) { return 1; } #endif %} @@ -187,7 +193,7 @@ REJECT; g_free(str); } -^#[ \t]*include[ \t][<"][^\n">]*[>"] { +^#[ \t]*include[ \t][<"][^\n\r">]*[>"] { if(look_for_includes==1) { char *p; char *file; @@ -344,6 +350,24 @@ REJECT; if(look_for_includes==0) look_for_includes=1; } +^\%(ct|ctop)\{ { + BEGIN(C_CODE); + parenth_depth = 1; + class_after_c = FALSE; + code_type = CTCODE; + clear_cbuf(); + ccode_line = line_no; + if(look_for_includes==0) + look_for_includes=1; + } +^\%(ad|afterdecls)\{ { + BEGIN(C_CODE); + parenth_depth = 1; + class_after_c = FALSE; + code_type = ADCODE; + clear_cbuf(); + ccode_line = line_no; + } ^\%\} { BEGIN(INITIAL); yylval.cbuf = cbuf; @@ -493,6 +517,12 @@ flags { return FLAGS; } . { add_to_cbuf(yytext); } \n { add_to_cbuf(yytext); } +\" { + BEGIN(CLASS_STRING); + before_string = CLASS_CODE_I; + add_to_cbuf(yytext); + } + void {return VOID;} struct {return STRUCT;} union {return UNION;} @@ -523,6 +553,7 @@ flags { return FLAGS; } return PROPERTY; } nick { yylval.line = line_no; return NICK; } +name { yylval.line = line_no; return NAME; } blurb { yylval.line = line_no; return BLURB; } maximum { yylval.line = line_no; return MAXIMUM; } minimum { yylval.line = line_no; return MINIMUM; } @@ -615,20 +646,21 @@ flags { return FLAGS; } [\f\t ] ; /*ignore*/ +<*>[\n\r] ; /*ignore*/ + + <*>. { yylval.line = line_no; return yytext[0]; } -<*>[\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; + npreallocs=t; } %%