diff options
Diffstat (limited to 'codegen/analyzer.l')
-rw-r--r-- | codegen/analyzer.l | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/codegen/analyzer.l b/codegen/analyzer.l index de4b869..799ece3 100644 --- a/codegen/analyzer.l +++ b/codegen/analyzer.l @@ -1,5 +1,7 @@ /* - Copyright (C) 2010 George Kiagiadakis <kiagiadakis.george@gmail.com> + Copyright (C) 2010 George Kiagiadakis <kiagiadakis.george@gmail.com> + Copyright (C) 2010 Collabora Ltd. + @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published @@ -29,6 +31,7 @@ void yyerror(CodeGen *codegen, const char *msg); id [a-zA-Z][a-zA-Z_0-9]* %x REGISTER_TYPE +%x REGISTER_WRAPPER %x ENUM %x ENUM_EAT_ASSIGNMENT %x INSTRUCTION @@ -41,7 +44,7 @@ id [a-zA-Z][a-zA-Z_0-9]* %% -<REGISTER_TYPE,ENUM,INSTRUCTION>{id} { yylval.Id = new QByteArray(yytext); return IDENTIFIER; } +<REGISTER_TYPE,REGISTER_WRAPPER,ENUM,INSTRUCTION>{id} { yylval.Id = new QByteArray(yytext); return IDENTIFIER; } QGLIB_REGISTER_TYPE\( { yy_push_state(REGISTER_TYPE); return REGISTER_TYPE_BEGIN; } <REGISTER_TYPE>{ @@ -51,6 +54,16 @@ QGLIB_REGISTER_TYPE\( { yy_push_state(REGISTER_TYPE); return REGISTER_TYPE_BE . { yyerror(codegen, "Syntax error in QGLIB_REGISTER_TYPE"); } } +Q[A-Z]+_WRAPPER\( { yy_push_state(REGISTER_WRAPPER); return REGISTER_WRAPPER_BEGIN; } +Q[A-Z]+_WRAPPER_DIFFERENT_C_CLASS\( { yy_push_state(REGISTER_WRAPPER); return REGISTER_WRAPPER_BEGIN; } +Q[A-Z]+_WRAPPER_FAKE_SUBCLASS\( { yy_push_state(REGISTER_WRAPPER); return REGISTER_WRAPPER_SUBCLASS_BEGIN; } +<REGISTER_WRAPPER>{ + , { return COMMA; } + \) { yy_pop_state(); return REGISTER_WRAPPER_END; } + [[:space:]]* + . { yyerror(codegen, "Syntax error in wrapper definition"); } +} + [[:space:]]enum { yy_push_state(ENUM); return ENUM_KEYWORD; } <ENUM>{ \{ { return LEFT_BRACE; } |