diff -wru cmix-2.0.12/src/analyzer/gram.y ../cmix-2.0.12/src/analyzer/gram.y
--- cmix-2.0.12/src/analyzer/gram.y	2000-02-14 04:56:58.000000000 +0200
+++ ../cmix-2.0.12/src/analyzer/gram.y	2008-09-08 13:38:59.589848013 +0300
@@ -101,6 +101,7 @@
 
 /* New Lexical element, whereas ANSI suggested non-terminal */
 
+%token ATTRIBUTE        NONNULL         THROW
 %token AUTO             DOUBLE          INT             STRUCT
 %token BREAK            ELSE            LONG            SWITCH
 %token CASE             ENUM            REGISTER        TYPEDEF
@@ -205,6 +206,33 @@
 
 %%
 
+
+/* attribute */
+attribute_list:
+   | attribute_list_p ;
+
+attribute_list_p:
+   attribute | attribute attribute_list_p;
+
+clist_item:
+   constant | IDENTIFIER | IDENTIFIER '(' clist ')' ;
+
+clist: 
+  clist_item | clist_item ',' clist ;
+
+attribute:
+   attribute_p | attribute_p IDENTIFIER ;
+
+attribute_p:
+   THROW |
+   ATTRIBUTE '(' '(' clist ')' ')' |
+   ATTRIBUTE IDENTIFIER |
+   nonnull ;
+
+nonnull:
+   NONNULL '(' '(' clist ')' ')' ;
+
+
 /************************** CONSTANTS *********************************/
 
 constant:
@@ -340,11 +368,11 @@
           }
         | SIZEOF unary_expression
           {
-              $$=new ExprSize($2,$2->pos)
+	    $$=new ExprSize($2,$2->pos);
           }
         | SIZEOF '(' type_name ')'
           {
-              $$=new TypeSize($3,ccchere)
+	    $$=new TypeSize($3,ccchere);
           }
         ;
 
@@ -592,12 +620,14 @@
 declaring_list: /* tdecl */
         declaration_specifier declarator
           { add_declaration($1,$2); $<gtype>$ = $1; }
+          attribute_list 
           initializer_opt
-          { add_initializer($4); $$=$<gtype>3; }
+          { add_initializer($5); $$=$<gtype>3; }
         | type_specifier declarator
           { add_declaration($1,$2); $<gtype>$ = $1; }
+          attribute_list 
           initializer_opt
-          { add_initializer($4); $$=$<gtype>3; }
+          { add_initializer($5); $$=$<gtype>3; }
         | declaring_list ',' declarator
           { add_declaration($1,$3); }
           initializer_opt
@@ -626,15 +656,15 @@
 declaration_qualifier_list:  /* Parse_Type */ /* const/volatile, AND storage class */
         storage_class
         | type_qualifier_list storage_class
-          { $1->combine(*$2); $$=$1 }
+{ $1->combine(*$2); $$=$1; }
         | declaration_qualifier_list declaration_qualifier
-          { $1->combine(*$2); $$=$1 }
+{ $1->combine(*$2); $$=$1; }
         ;
 
 type_qualifier_list:  /* Parse_Type*  */
         type_qualifier
         | type_qualifier_list type_qualifier
-          { $1->combine(*$2); $$=$1 }
+{ $1->combine(*$2); $$=$1; }
         ;
 
 declaration_qualifier:  /*  Parse_Type*  */
diff -wru cmix-2.0.12/src/analyzer/lex.l ../cmix-2.0.12/src/analyzer/lex.l
--- cmix-2.0.12/src/analyzer/lex.l	2008-09-08 13:25:48.000000000 +0300
+++ ../cmix-2.0.12/src/analyzer/lex.l	2008-09-08 13:40:50.329849326 +0300
@@ -48,6 +48,13 @@
 
 %%
 
+"__restrict"		{ }
+"__extension__"		{ } 
+"__attribute__"		{ return (ATTRIBUTE); }
+"__THROW"		{ return (THROW); }
+"__nothrow"             { }
+"__nonnull"             { return (NONNULL); }
+"__const"               { return (CONST); }
 "auto"			{ return (AUTO); }
 "break"			{ return (BREAK); }
 "case"			{ return (CASE); }

