WONKY



LOG | FILES | OVERVIEW


F diff --git a/code_generation/js/transpile_to_js.c b/code_generation/js/transpile_to_js.c --- a/code_generation/js/transpile_to_js.c +++ b/code_generation/js/transpile_to_js.c
case OP_LVALUE:
to_js_print_lvalue_expression_tree(out,(struct AST_Lvalue_Expression*)tree,program);
break;
- case OP_RVALUE:
- to_js_print_rvalue_expression_tree(out,(struct AST_Rvalue_Expression*)tree,program);
- break;
case OP_NOP:
fprintf(out,"NOP");
break;
}
fprintf(out,")");
}
- void to_js_print_rvalue_expression_tree(FILE* out,struct AST_Rvalue_Expression *rval,struct Program *program)
- {
- print_token(out,rval->id);
- }
void to_js_print_lvalue_expression_tree(FILE* out,struct AST_Lvalue_Expression *lval,struct Program *program)
{
- print_token(out,lval->id);
+ print_denoted(out,lval->lvalue);
}
void to_js_print_unary_expression_tree(FILE* out,struct AST_Unary_Expression *unary,struct Program *program)
{
F diff --git a/code_generation/js/transpile_to_js.h b/code_generation/js/transpile_to_js.h --- a/code_generation/js/transpile_to_js.h +++ b/code_generation/js/transpile_to_js.h
void to_js_print_binary_expression_tree(FILE* out,struct AST_Binary_Expression *bin,struct Program *program);
void to_js_print_conditional_expression_tree(FILE* out,struct AST_Conditional_Expression *cond,struct Program *program);
void to_js_print_function_expression_tree(FILE* out,struct AST_Function_Expression *function_call,struct Program *program);
- void to_js_print_rvalue_expression_tree(FILE* out,struct AST_Rvalue_Expression *rval,struct Program *program);
void to_js_print_lvalue_expression_tree(FILE* out,struct AST_Lvalue_Expression *lval,struct Program *program);
void to_js_print_unary_expression_tree(FILE* out,struct AST_Unary_Expression *unary,struct Program *program);
void to_js_print_labeled_statement_tree(FILE* out,struct AST_Labeled_Statement *label,struct Program *program);
F diff --git a/frontend/lex/automatas/chonky.c b/frontend/lex/automatas/chonky.c new file mode 100644 --- /dev/null +++ b/frontend/lex/automatas/chonky.c
+ #ifndef GKEYWORDS_MENU_C
+ #define GKEYWORDS_MENU_C GKEYWORDS_MENU_C
+ #include"chonky.h"
+ #include<stddef.h>
+
+ int cmpr[256]={0,0,0,0,0,0,0,0,0,91,92,91,0,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,63,64,65,0,66,67,68,71,72,75,76,78,77,79,80,53,54,55,56,57,58,59,60,61,62,81,82,83,85,84,86,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,73,87,74,88,89,0,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,69,90,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
+ int uncmpr[256]={0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,33,34,35,37,38,39,123,125,40,41,91,93,42,43,45,44,46,47,58,59,60,62,61,63,92,94,95,124,32,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
+
+
+ struct automata_entry chonky[]={
+ {0,KW_NOTYPE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[56]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[61]),&(chonky[62]),&(chonky[63]),&(chonky[64]),&(chonky[65]),&(chonky[66]),&(chonky[67]),&(chonky[2]),&(chonky[68]),&(chonky[2]),&(chonky[2]),&(chonky[69]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[70]),&(chonky[71]),&(chonky[72]),&(chonky[73]),&(chonky[74]),&(chonky[75]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[11]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[76]),&(chonky[3]),&(chonky[77]),&(chonky[78]),&(chonky[79]),&(chonky[50]),&(chonky[80]),&(chonky[81]),&(chonky[82]),&(chonky[83]),&(chonky[84]),&(chonky[85]),&(chonky[86]),&(chonky[87]),&(chonky[88]),&(chonky[89]),&(chonky[39]),&(chonky[5]),&(chonky[90]),&(chonky[91]),&(chonky[92]),&(chonky[93]),&(chonky[94]),&(chonky[95]),&(chonky[96]),&(chonky[97]),&(chonky[98]),&(chonky[99]),NULL,NULL,} },
+ {1,KW_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,&(chonky[36]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[31]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[14]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[36]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[28]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[14]),NULL,NULL,NULL,NULL,NULL,&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),&(chonky[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[4]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),} },
+ {1,KW_STRING,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_FORWARD_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[6]),NULL,NULL,NULL,NULL,&(chonky[10]),NULL,NULL,NULL,NULL,&(chonky[9]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[7]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
+ {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[8]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
+ {1,KW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DIV_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_COMMENT,{&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),NULL,} },
+ {1,KW_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[30]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[15]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[27]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[15]),NULL,NULL,&(chonky[12]),NULL,NULL,&(chonky[11]),&(chonky[11]),&(chonky[11]),&(chonky[11]),&(chonky[11]),&(chonky[11]),&(chonky[11]),&(chonky[11]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HEXADECIMAL_CONSTANT,{NULL,&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),NULL,NULL,NULL,NULL,NULL,&(chonky[29]),NULL,NULL,NULL,&(chonky[44]),NULL,NULL,NULL,NULL,&(chonky[16]),NULL,NULL,NULL,NULL,NULL,&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),NULL,NULL,NULL,NULL,NULL,&(chonky[26]),NULL,NULL,NULL,&(chonky[44]),NULL,NULL,NULL,NULL,&(chonky[16]),NULL,NULL,NULL,NULL,NULL,&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),&(chonky[13]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[18]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[17]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[20]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[19]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[22]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[21]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_LONG_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_LONG_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED_LONG_LONG_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[32]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[33]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[34]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[32]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[33]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[34]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_LONG_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_LONG_OCTAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_LONG_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOUBLE_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,&(chonky[36]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[36]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[37]),&(chonky[37]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOUBLE_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[40]),NULL,NULL,NULL,NULL,NULL,&(chonky[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[40]),NULL,NULL,NULL,NULL,NULL,&(chonky[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),&(chonky[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_FLOAT_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_DOUBLE_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOUBLE_DECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,&(chonky[36]),&(chonky[40]),NULL,NULL,NULL,NULL,NULL,&(chonky[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[36]),&(chonky[40]),NULL,NULL,NULL,NULL,NULL,&(chonky[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),&(chonky[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOUBLE_HEXADECIMAL_CONSTANT,{NULL,&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),&(chonky[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[45]),&(chonky[45]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOUBLE_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[47]),NULL,NULL,NULL,NULL,NULL,&(chonky[48]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[47]),NULL,NULL,NULL,NULL,NULL,&(chonky[48]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),&(chonky[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_FLOAT_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LONG_DOUBLE_HEXADECIMAL_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),&(chonky[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[52]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[51]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),} },
+ {0,KW_NOTYPE,{NULL,&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),&(chonky[50]),} },
+ {1,KW_CHAR_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[55]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[54]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),} },
+ {0,KW_NOTYPE,{NULL,&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),&(chonky[53]),} },
+ {1,KW_WIDE_CHAR_CONSTANT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,&(chonky[57]),NULL,NULL,NULL,&(chonky[53]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[58]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),} },
+ {1,KW_WIDE_STRING,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{NULL,&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),} },
+ {0,KW_NOTYPE,{NULL,&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),&(chonky[57]),} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[100]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[101]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[102]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[103]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[104]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[105]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[106]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[107]),&(chonky[2]),&(chonky[108]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[109]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[110]),&(chonky[2]),&(chonky[2]),&(chonky[111]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[112]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[113]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[114]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[115]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[116]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[117]),&(chonky[118]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[119]),&(chonky[2]),&(chonky[2]),&(chonky[120]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[121]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[122]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[123]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[124]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_EXCLAMATION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[125]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HASHTAG,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[126]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PERCENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[127]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[128]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[129]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_OPEN_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_CLOSE_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_OPEN_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_CLOSE_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_OPEN_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_CLOSE_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_STAR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[130]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[131]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[132]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[133]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[134]),&(chonky[135]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_COMMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SEMI_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LESS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[136]),NULL,&(chonky[137]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MORE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[138]),&(chonky[139]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[140]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_QUESTION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_BACK_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HAT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[141]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_FLOOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[142]),NULL,NULL,NULL,NULL,&(chonky[143]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[144]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[145]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[146]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[147]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[148]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[149]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_DO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[150]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[151]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[152]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[153]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[154]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[155]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[156]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_IF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[157]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[158]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[159]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[160]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[161]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[162]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[163]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[164]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[165]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[166]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[167]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[168]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[169]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[170]),&(chonky[2]),&(chonky[2]),&(chonky[171]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[172]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_NOT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HASHTAG_HASHTAG,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PERCENT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AND_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AND_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_STAR_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PLUSPLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PLUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MINUSMINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ARROW,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MINUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SHIFT_LEFT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[173]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LESS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SHIFT_RIGHT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[174]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MORE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_EQEQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HAT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PIPE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PIPE_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[175]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[176]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[177]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[178]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[179]),&(chonky[180]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[181]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[182]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[183]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[184]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[185]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[186]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[187]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_FOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[188]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_INT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[189]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[190]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[191]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[192]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[193]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[194]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[195]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[196]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[197]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[198]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[199]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[200]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[201]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[202]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[203]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_SHIFT_LEFT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SHIFT_RIGHT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AUTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[204]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_CASE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_CHAR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[205]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[206]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[207]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[208]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[209]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ELSE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ENUM,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[210]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[211]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_GOTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_LONG,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[212]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[213]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[214]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[215]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[216]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[217]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[218]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[219]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[220]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[221]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[222]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_VOID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[223]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[224]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_BREAK,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_CONST,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[225]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[226]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[227]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[228]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[229]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_FLOAT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[230]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[231]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_SHORT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[232]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[233]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[234]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[235]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[236]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[237]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_UNION,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[238]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[239]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_WHILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[240]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[241]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[242]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_DOUBLE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_EXTERN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[243]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_RETURN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_SIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_SIZEOF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_STATIC,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_STRUCT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_SWITCH,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[244]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[245]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[246]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[247]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_DEFAULT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_DEFINED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[248]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_TYPEDEF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[249]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[250]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_CONTINUE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_REGISTER,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_UNSIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
+ {1,KW_VOLATILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },};
+
+ #endif /*#ifndef GKEYWORDS_MENU_C*/
F diff --git a/frontend/lex/automatas/chonky.h b/frontend/lex/automatas/chonky.h new file mode 100644 --- /dev/null +++ b/frontend/lex/automatas/chonky.h
+ #ifndef GKEYWORDS_MENU_H
+ #define GKEYWORDS_MENU_H GKEYWORDS_MENU_H
+ #include <stddef.h>
+
+
+
+ enum KEYWORDS{KW_AUTO,KW_DO,KW_DOUBLE,KW_INT,KW_STRUCT,KW_BREAK,KW_ELSE,KW_LONG,KW_SWITCH,KW_CASE,KW_ENUM,KW_REGISTER,KW_TYPEDEF,KW_CHAR,KW_EXTERN,KW_RETURN,KW_UNION,KW_CONST,KW_FLOAT,KW_SHORT,KW_UNSIGNED,KW_CONTINUE,KW_FOR,KW_SIGNED,KW_VOID,KW_DEFAULT,KW_GOTO,KW_SIZEOF,KW_VOLATILE,KW_IF,KW_STATIC,KW_WHILE,KW_DEFINED,KW_EXCLAMATION,KW_BACK_SLASH,KW_PERCENT,KW_AND,KW_AND_AND,KW_OPEN_NORMAL,KW_CLOSE_NORMAL,KW_STAR,KW_PLUS,KW_COMMA,KW_MINUS,KW_ARROW,KW_COLUMN,KW_SEMI_COLUMN,KW_LESS,KW_EQ,KW_EQEQ,KW_MORE,KW_QUESTION,KW_OPEN_SQUARE,KW_CLOSE_SQUARE,KW_HAT,KW_FLOOR,KW_OPEN_CURLY,KW_CLOSE_CURLY,KW_PIPE,KW_PIPE_PIPE,KW_TILDE,KW_PLUSPLUS,KW_MINUSMINUS,KW_SHIFT_RIGHT,KW_SHIFT_LEFT,KW_LESS_EQ,KW_MORE_EQ,KW_NOT_EQ,KW_PLUS_EQ,KW_MINUS_EQ,KW_STAR_EQ,KW_PERCENT_EQ,KW_SHIFT_LEFT_EQ,KW_SHIFT_RIGHT_EQ,KW_AND_EQ,KW_HAT_EQ,KW_PIPE_EQ,KW_DOT,KW_DIV_EQ,KW_FORWARD_SLASH,KW_NOTYPE,KW_HEXADECIMAL_CONSTANT,KW_DECIMAL_CONSTANT,KW_OCTAL_CONSTANT ,KW_UNSIGNED_DECIMAL_CONSTANT,KW_UNSIGNED_OCTAL_CONSTANT,KW_UNSIGNED_HEXADECIMAL_CONSTANT,KW_UNSIGNED_LONG_HEXADECIMAL_CONSTANT,KW_UNSIGNED_LONG_OCTAL_CONSTANT,KW_UNSIGNED_LONG_DECIMAL_CONSTANT,KW_UNSIGNED_LONG_LONG_DECIMAL_CONSTANT,KW_UNSIGNED_LONG_LONG_HEXADECIMAL_CONSTANT,KW_UNSIGNED_LONG_LONG_OCTAL_CONSTANT,KW_LONG_HEXADECIMAL_CONSTANT,KW_LONG_OCTAL_CONSTANT,KW_LONG_DECIMAL_CONSTANT,KW_LONG_LONG_HEXADECIMAL_CONSTANT,KW_LONG_LONG_OCTAL_CONSTANT,KW_LONG_LONG_DECIMAL_CONSTANT,KW_DOUBLE_DECIMAL_CONSTANT,KW_LONG_DOUBLE_DECIMAL_CONSTANT,KW_FLOAT_DECIMAL_CONSTANT,KW_DOUBLE_HEXADECIMAL_CONSTANT,KW_LONG_DOUBLE_HEXADECIMAL_CONSTANT,KW_FLOAT_HEXADECIMAL_CONSTANT,KW_COMMENT,KW_ID,KW_CHAR_CONSTANT,KW_WIDE_CHAR_CONSTANT,KW_STRING,KW_WIDE_STRING,PKW_IF,PKW_IFDEF,PKW_IFNDEF,PKW_ELIF,PKW_ELSE,PKW_ENDIF,PKW_INCLUDE,PKW_DEFINE,PKW_UNDEF,PKW_LINE,PKW_ERROR,PKW_PRAGMA,PKW_COMMENT,PKW_NOTYPE,KW_HASHTAG,KW_HASHTAG_HASHTAG};
+
+
+ struct automata_entry
+ {
+ unsigned char is_final;
+ enum KEYWORDS type;
+ struct automata_entry* delta[93];
+ };
+ extern struct automata_entry chonky[];
+ extern int cmpr[256];
+ extern int uncmpr[256];
+
+ #endif
F diff --git a/frontend/lex/automatas/chonky_jr.c b/frontend/lex/automatas/chonky_jr.c new file mode 100644 --- /dev/null +++ b/frontend/lex/automatas/chonky_jr.c
+ #ifndef GPREPROCESSING_KEYWORDS_MENU_C
+ #define GPREPROCESSING_KEYWORDS_MENU_C GPREPROCESSING_KEYWORDS_MENU_C
+ #include"chonky.h"
+ #include "chonky_jr.h"
+
+
+ struct automata_entry chonky_jr[]={
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[5]),&(chonky_jr[6]),NULL,NULL,NULL,&(chonky_jr[7]),NULL,NULL,&(chonky_jr[8]),NULL,NULL,NULL,&(chonky_jr[9]),NULL,NULL,NULL,NULL,&(chonky_jr[10]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[3]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
+ {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[4]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
+ {1,PKW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[11]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[12]),NULL,&(chonky_jr[13]),NULL,NULL,NULL,&(chonky_jr[14]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[15]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[16]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[17]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[18]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[19]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[20]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[21]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[22]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_IF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[26]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[27]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[28]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[29]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[30]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[31]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[32]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[33]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[34]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[36]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[37]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[39]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[40]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[42]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ELIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ELSE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[45]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[47]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_LINE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[48]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[50]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ENDIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ERROR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_IFDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[51]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[52]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[53]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_UNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_DEFINE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_IFNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[54]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_PRAGMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_INCLUDE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },};
+
+ #endif /*#ifndef GPREPROCESSING_KEYWORDS_MENU_C*/
F diff --git a/frontend/lex/automatas/chonky_jr.h b/frontend/lex/automatas/chonky_jr.h new file mode 100644 --- /dev/null +++ b/frontend/lex/automatas/chonky_jr.h
+ #ifndef GPREPROCESSING_KEYWORDS_MENU_H
+ #define GPREPROCESSING_KEYWORDS_MENU_H GPREPROCESSING_KEYWORDS_MENU_H
+ #include <chonky_jr.h>
+
+
+ extern struct automata_entry chonky_jr[];
+
+
+ #endif
F diff --git a/frontend/lex/lexer.c b/frontend/lex/lexer.c new file mode 100644 --- /dev/null +++ b/frontend/lex/lexer.c
+ #ifndef LEXER_C
+ #define LEXER_C LEXER_C
+ /*asdf*/#include <lexer.h>
+
+ char *well_known_locations_base[]={"","/usr/include/","/usr/include/x86_64-linux-gnu/",NULL};
+ void lex(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+
+
+ struct token *current_token;
+
+ while(src->src[src->where_in_src]!='\0')
+ {
+ if(has_new_errors(translation_data))
+ {
+ push_lexing_error("Fatal error",src,translation_data);
+ return;
+ }
+
+ current_token=get_next_token(src,&chonky[0],1);
+ if(current_token->type==KW_HASHTAG)
+ {
+ if(src->is_in_the_begining_of_line)
+ {
+ parse_preproc_line(src,translation_data);
+ free(current_token);
+ }else
+ {
+ push_lexing_error("preprocessing directive must be at the beggining of the line",src,translation_data);
+ free(current_token);
+ while((current_token=get_next_token(src,&chonky[0],0))->type!=KW_NOTYPE)
+ {
+ free(current_token);
+ }
+ free(current_token);
+ }
+
+ }else if(current_token->type!=KW_NOTYPE)
+ {
+
+ expand_macro(current_token,src,translation_data);
+ }else
+ {
+ if(src->where_in_src!=src->src_size)
+ push_lexing_error("unexpected character",src,translation_data);
+ free(current_token);
+ return;
+ }
+ }
+
+ }
+
+
+
+ /*hack*/
+ void handle_splicing(struct token *word)
+ {
+ size_t back;
+ size_t front;
+ if(word->data_size==0)
+ return;
+ front=0;
+ for(front;front<word->data_size-1;++front)
+ {
+ if(word->data[front]=='\\' && word->data[front+1]=='\n')
+ {
+ front+=2;
+ break;
+ }
+ }
+ if(front==word->data_size-1)
+ return;
+
+ for(back=front-2;front<word->data_size-1;)
+ {
+ if(word->data[front]=='\\' && word->data[front+1]=='\n')
+ {
+ front+=2;
+ }else
+ {
+ word->data[back]=word->data[front];
+ ++front;
+ ++back;
+ }
+ }
+ word->data[back]=word->data[front];
+ }
+ void goto_new_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ char hold_char;
+ while( (hold_char=src_getc(src,1,1,0)) != '\0' && hold_char != '\n');
+ src->is_in_the_begining_of_line=1;
+ ++src->where_in_src;
+ ++src->which_row;
+ src->which_column=0;
+ }
+ void chase_new_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ char hold_char;
+ for(hold_char=src_getc(src,1,1,0);hold_char!='\n' && hold_char!='\0';
+ hold_char=src_getc(src,1,1,0));
+
+ ++src->where_in_src;
+ ++src->which_row;
+ src->is_in_the_begining_of_line=1;
+ src->which_column=0;
+
+
+ }
+ /*returns the number of bytes skipped*/
+ size_t skip_line_splice(struct Source_File *src)
+ {
+ size_t current_size=0;
+ while(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='\\' && src->src[src->where_in_src+1]=='\n')
+ {
+ src->where_in_src+=2;
+ current_size+=2;
+ }
+ return current_size;
+ }
+
+ void skip_white_space(struct Source_File *src,char skip_new_line)
+ {
+ char hold_char;
+ while(hold_char=src_getc(src,1,1,skip_new_line))
+ {
+ if(hold_char=='\n' && !skip_new_line)
+ {
+ return ;
+ }
+ if(hold_char!=' ' && hold_char!='\t')
+ {
+ src_ungetc(src);
+ return ;
+ }
+ }
+ }
+ struct token_vector Lex_Queue_Condense(struct Queue *tokens)
+ {
+ size_t i;
+ struct token_vector ret;
+ struct token *hold;
+
+ ret.tokens=malloc(sizeof(struct token)*tokens->size);
+ ret.size=tokens->size;
+
+ for(i=0;tokens->size>0;++i)
+ {
+ hold=Queue_Pop(tokens);
+ ret.tokens[i]=*hold;
+ free(hold);
+ }
+
+ Queue_Destroy(tokens);
+
+ return ret;
+ }
+
+ char check(struct Translation_Data *translation_data,enum KEYWORDS kw,size_t ahead)
+ {
+ size_t i;
+ struct Queue_Node *current;
+ if(translation_data->tokens->size<=ahead)
+ {
+ return 0;
+ }else
+ {
+ for(i=0,current=translation_data->tokens->first;i<ahead;++i,current=current->prev);
+
+ if( ((struct token*)(current->data))->type == kw )
+ {
+ return 1;
+ }else
+ {
+ return 0;
+ }
+ }
+ }
+ char get_and_check(struct Translation_Data *translation_data,enum KEYWORDS kw)
+ {
+ struct token *hold_token;
+ if(translation_data->tokens->size==0)
+ {
+ return 0;
+ }else
+ {
+ hold_token=translation_data->tokens->first->data;
+ if(hold_token->type!=kw)
+ {
+ return 0;
+ }else
+ {
+ hold_token=Queue_Pop(translation_data->tokens);
+ free(hold_token);
+ return 1;
+ }
+ }
+ }
+ char get_and_check_unsafe(struct Translation_Data *translation_data,enum KEYWORDS kw)
+ {
+ struct token *hold_token;
+ hold_token=translation_data->tokens->first->data;
+ if(hold_token->type!=kw)
+ {
+ return 0;
+ }else
+ {
+ hold_token=Queue_Pop(translation_data->tokens);
+ free(hold_token);
+ return 1;
+ }
+ }
+ void chomp(struct Translation_Data *translation_data)
+ {
+ free(Queue_Pop(translation_data->tokens));
+ }
+
+ enum KEYWORDS kw_get(struct Translation_Data *translation_data)
+ {
+ if(translation_data->tokens->size==0)
+ return KW_NOTYPE;
+ return ((struct token*)(translation_data->tokens->first->data))->type;
+
+ }
+
+ struct token* get_next_token(struct Source_File *src,struct automata_entry *start_state,char skip_new_line)
+ {
+ int temp;
+ char hold_char;
+
+ struct token *ret;
+ struct automata_entry *current_state;
+ struct automata_entry *best_state;
+
+ /*ignore leading spaces,tabs and newlines*/
+ skip_white_space(src,skip_new_line);
+
+ src_reset_token_data(src,1);
+
+ best_state=current_state=start_state;
+
+
+ while( (hold_char=src_getc(src,1,0,0)) !='\0')
+ {
+ if(hold_char=='\n' && !skip_new_line)
+ {
+ break;
+ }
+ current_state=current_state->delta[cmpr[hold_char]];
+ if(current_state==NULL)
+ {
+ if(best_state->type==KW_COMMENT || best_state->type==PKW_COMMENT)
+ {
+ /*TODO account for new lines not counted in comment*/
+ src_reset_token_data(src,0);
+ best_state=current_state=start_state;
+ skip_white_space(src,1);
+ }else
+ {
+ return src_extract_token(src,best_state->type);
+ }
+
+ }else
+ {
+ if(current_state->is_final)
+ {
+ best_state=current_state;
+ src_assimilate_into_best_token(src);
+ }
+ }
+ }
+
+ if(best_state->type==KW_COMMENT || best_state->type==PKW_COMMENT)
+ {
+ return src_extract_token(src,KW_NOTYPE);
+ }else
+ {
+ return src_extract_token(src,best_state->type);
+ }
+ return ret;
+ }
+ /*here be dragons*/
+ char src_getc(struct Source_File *src,char skip_line_splice,char skip_comments,char skip_new_line)
+ {
+ superhack:
+ if(src->src[src->where_in_src]=='\\' && skip_line_splice)
+ {
+ if(src->where_in_src < src->src_size-1 && src->src[src->where_in_src+1]=='\n')
+ {
+ src->where_in_src+=2;
+ ++src->which_row;
+ src->token_size+=2;
+ src->which_column=0;
+ goto superhack;
+ }else
+ {
+ ++src->token_size;
+ ++src->which_column;
+ ++src->where_in_src;
+ src->is_in_the_begining_of_line=0;
+ return '\\';
+ }
+ }else
+ {
+ if(src->src[src->where_in_src]=='\n' && skip_new_line)
+ {
+ ++src->which_row;
+ src->which_column=0;
+ src->is_in_the_begining_of_line=1;
+
+ ++src->where_in_src;
+ goto superhack;
+ }else if(src->src[src->where_in_src]=='/' && skip_comments)
+ {
+ if(src->src[src->where_in_src+1]=='*')
+ {
+ char hold_char;
+
+
+ src->where_in_src+=2;
+ hold_char=src_getc(src,1,0,1);
+ while(hold_char)
+ {
+ if(hold_char=='*')
+ {
+ hold_char=src_getc(src,1,0,1);
+ if(hold_char=='\0')
+ {
+ src->where_in_src=src->src_size;
+ return '\0';
+ }
+ else if(hold_char=='/')
+ {
+ goto superhack;
+ }
+ }else
+ {
+ hold_char=src_getc(src,1,0,1);
+ }
+ }
+ src->where_in_src=src->src_size;
+ return '\0';
+
+ }
+ }else
+ {
+ ++src->which_column;
+ }
+ ++src->token_size;
+ if(src->src[src->where_in_src]!='#' || src->is_in_the_begining_of_line!=1)
+ src->is_in_the_begining_of_line=0;
+ if(src->src[src->where_in_src]=='\n')
+ {
+ return '\n';
+ }
+
+ if(src->src[src->where_in_src]=='\0')
+ return src->src[src->where_in_src];
+ else
+ return src->src[src->where_in_src++];
+ }
+ }
+ void src_ungetc(struct Source_File *src)
+ {
+ --src->where_in_src;
+ if(src->src[src->where_in_src]=='\n')
+ {
+ --src->which_row;
+ src->which_column=0;
+ }
+ }
+ struct token* copy_token(struct token *src)
+ {
+ struct token *cpy;
+ cpy=malloc(sizeof(struct token));
+ *cpy=*src;
+ return cpy;
+ }
+ struct token* src_extract_token(struct Source_File *src,enum KEYWORDS kw)
+ {
+ struct token *ret;
+ ret=malloc(sizeof(struct token));
+ ret->type=kw;
+
+ ret->data_size=src->best_token_size;
+ ret->column=src->best_token_column;
+ ret->line=src->best_token_line;
+ ret->data=src->src+src->best_token_where_in_src_start;
+ ret->filename=src->src_name->filename;
+ handle_splicing(ret);
+ src->where_in_src=src->best_token_where_in_src_end;
+ src->is_in_the_begining_of_line=src->best_token_beg_line;
+ return ret;
+ }
+
+ void src_reset_token_data(struct Source_File *src,char use_src_as_base)
+ {
+ src->token_size=0;
+ src->best_token_size=0;
+ src->best_token_line=src->which_row;
+ src->best_token_column=src->which_column;
+ if(use_src_as_base)
+ {
+ src->best_token_where_in_src_end=src->where_in_src;
+ }else
+ {
+ src->where_in_src=src->best_token_where_in_src_end;
+ }
+ src->best_token_where_in_src_start=src->where_in_src;
+ }
+ void src_assimilate_into_best_token(struct Source_File *src)
+ {
+ src->best_token_size=src->token_size;
+ src->best_token_line=src->which_row;
+ src->best_token_column=src->which_column;
+ src->best_token_where_in_src_end=src->where_in_src;
+ src->best_token_beg_line=src->is_in_the_begining_of_line;
+ }
+ void delete_source_file(struct Source_File *src)
+ {
+ delete_source_name(src->src_name);
+ free(src->src);
+ free(src);
+ }
+ void delete_source_name(struct Source_Name *name)
+ {
+ free(name->filename);
+ free(name->base);
+ free(name);
+ }
+ void flush_tokens(struct Queue *tokens)
+ {
+ while(tokens->size>0)
+ free(Queue_Pop(tokens));
+ }
+ #endif
F diff --git a/frontend/lex/lexer.h b/frontend/lex/lexer.h new file mode 100644 --- /dev/null +++ b/frontend/lex/lexer.h
+ #ifndef LEXER_H
+ #define LEXER_H LEXER_H
+ #include <lexer.hh>
+ #include <stdio.h>
+ #include <chonky.h>
+ #include <chonky_jr.h>
+ #include <queue.h>
+ #include <program.h>
+ #include <preprocessing.h>
+
+ extern char *well_known_locations_base[];
+ struct token
+ {
+ enum KEYWORDS type;
+ size_t data_size;
+ char *data;
+ size_t line,column;
+ /*:X*/
+ const char *filename;
+ };
+
+ struct token_vector
+ {
+ struct token *tokens;
+ size_t size;
+ };
+
+
+
+ struct Source_Name
+ {
+ char *filename;
+ char *base;
+ };
+
+ struct Source_File
+ {
+ struct Source_Name *src_name;
+
+ char *src;
+ size_t src_size;
+ size_t where_in_src;
+ size_t which_column;
+ size_t which_row;
+
+ size_t token_size;
+
+
+ size_t best_token_size;
+ size_t best_token_line;
+ size_t best_token_column;
+
+ size_t best_token_where_in_src_start;
+ size_t best_token_where_in_src_end;
+ char best_token_beg_line;
+
+
+ char is_in_the_begining_of_line;
+
+ };
+
+
+
+
+ void lex(struct Source_File *src,struct Translation_Data *translation_data);
+ struct token* get_next_token(struct Source_File *src,struct automata_entry *start_state,char skip_new_line);
+ struct token* copy_token(struct token *src);
+ struct token_vector Lex_Queue_Condense(struct Queue *tokens);
+ void handle_splicing(struct token *word);
+ void chase_new_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void goto_new_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void skip_white_space(struct Source_File *src,char skip_new_line);
+ size_t skip_line_splice(struct Source_File *src);
+
+
+ char check(struct Translation_Data *translation_data,enum KEYWORDS kw,size_t ahead);
+ char get_and_check(struct Translation_Data *translation_data,enum KEYWORDS kw);
+ char get_and_check_unsafe(struct Translation_Data *translation_data,enum KEYWORDS kw);
+ void chomp(struct Translation_Data *translation_data);
+ enum KEYWORDS kw_get(struct Translation_Data *translation_data);
+
+ char src_getc(struct Source_File *src,char skip_line_splice,char skip_comments,char skip_new_line);
+ void src_ungetc(struct Source_File *src);
+ struct token* src_extract_token(struct Source_File *src,enum KEYWORDS kw);
+ void src_reset_token_data(struct Source_File *src,char use_src_as_base);
+ void src_assimilate_into_best_token(struct Source_File *src);
+
+ void delete_source_file(struct Source_File *src);
+ void delete_source_name(struct Source_Name *name);
+ void flush_tokens(struct Queue *tokens);
+ #endif
F diff --git a/frontend/lex/lexer.hh b/frontend/lex/lexer.hh new file mode 100644 --- /dev/null +++ b/frontend/lex/lexer.hh
+ #ifndef LEXER_HH
+ #define LEXER_HH LEXER_HH
+
+ /*struct declarations. Definitions are in .h*/
+
+ struct token;
+ struct token_vector;
+ struct define_directive;
+ struct Source_Name;
+ struct Source_File;
+
+ #endif
F diff --git a/frontend/lex/preprocessing.c b/frontend/lex/preprocessing.c new file mode 100644 --- /dev/null +++ b/frontend/lex/preprocessing.c
+ #ifndef GCC_PREPROCESSING_C
+ #define GCC_PREPROCESSING_C GCC_PREPROCESSING_C
+ #include <preprocessing.h>
+
+
+ /*we have skipped the leading #*/
+ /*
+ #include string
+ #include <qchar>
+ #define [ id(list) replacement
+ #undef [ id ]
+ #if
+ #ifdef
+ #ifndef
+ #
+
+ #elif
+ #else
+ #endif
+
+
+ #error
+ #pragma
+ #line number [string]
+
+ */
+ void parse_preproc_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct token *hold;
+ hold=get_next_token(src,&chonky_jr[0],0);
+ switch(hold->type)
+ {
+ case PKW_INCLUDE:
+ free(hold);
+ parse_include_line(src,translation_data);
+ return;
+ case PKW_DEFINE:
+ free(hold);
+ parse_define_line(src,translation_data);
+ return;
+ case PKW_IF:
+ free(hold);
+ parse_preproc_if_line(src,translation_data);
+ return;
+ case PKW_IFDEF:
+ free(hold);
+ parse_preproc_ifdef_line(src,translation_data);
+ return;
+ case PKW_IFNDEF:
+ free(hold);
+ parse_preproc_ifndef_line(src,translation_data);
+ return;
+ case PKW_UNDEF:
+ free(hold);
+ parse_preproc_undef_line(src,translation_data);
+ return;
+ case PKW_ENDIF:
+ free(hold);
+ push_lexing_error("unmatched endif",src,translation_data);
+ return;
+ case PKW_ELSE:
+ free(hold);
+ push_lexing_error("unmatched else",src,translation_data);
+ return;
+ case PKW_ELIF:
+ free(hold);
+ push_lexing_error("unmatched elif",src,translation_data);
+ return;
+ case PKW_LINE:
+ free(hold);
+ parse_preproc_line_line(src,translation_data);
+ return;
+ case PKW_ERROR:
+ free(hold);
+ parse_preproc_error_line(src,translation_data);
+ return;
+ default:
+ /*TODO error*/
+ free(hold);
+ push_lexing_error("expected a preprocessing directive",src,translation_data);
+ return;
+
+ }
+ }
+ void parse_include_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct token *hold;
+ hold=get_next_token(src,&chonky[0],0);
+ if(hold->type==KW_STRING)
+ {
+ char *where_to_search[]={src->src_name->base,NULL};
+ struct Source_File *hold_file;
+
+ hold->data[hold->data_size-1]='\0';
+ hold->data_size-=2;
+ ++hold->data;
+ handle_splicing(hold);
+
+
+ /*search in the directory of the file from which we include*/
+ hold_file=get_source_file(hold->data,where_to_search);
+ /*fallback to well known locations == <>*/
+ if(hold_file==NULL)
+ {
+ hold_file=get_source_file(hold->data,well_known_locations_base);
+ if(hold_file==NULL)
+ {
+ /*TODO error*/
+ push_lexing_error("file in include directive not found",src,translation_data);
+ free(hold);
+ return;
+ }
+ }
+ lex_program(translation_data,hold_file);
+ free(hold);
+ }else if(hold->type==KW_LESS)/*hack*/
+ {
+ struct Source_File *hold_file;
+ ++hold->data;
+ while(src->src[src->where_in_src]!='>' && src->where_in_src<src->src_size)
+ {
+ ++src->where_in_src;
+ ++hold->data_size;
+ }
+ if(src->where_in_src==src->src_size)
+ {
+ /*TODO error*/
+ free(hold);
+ return;
+ }
+ /*skip the >*/
+ ++src->where_in_src;
+ hold->data[hold->data_size-1]='\0';
+ handle_splicing(hold);
+
+ hold_file=get_source_file(hold->data,well_known_locations_base);
+ if(hold_file==NULL)
+ {
+ /*TODO error*/
+ push_lexing_error("file in include directive not found",src,translation_data);
+ free(hold);
+ return;
+ }
+
+ lex_program(translation_data,hold_file);
+ free(hold);
+
+ }else
+ {
+ /*TODO error*/
+ push_lexing_error("include error",src,translation_data);
+ free(hold);
+ return;
+ }
+
+
+ chase_new_line(src,translation_data);
+ }
+
+ /*skipped # and 'define'*/
+ void parse_define_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct token *hold_token;
+ struct token *macro_name;
+ struct define_directive *new_macro;
+ struct Queue *hold_tokens;
+ size_t number_of_arguments=0;
+ int *hold_index;
+
+
+ macro_name=get_next_token(src,&chonky[0],0);
+ if(macro_name->type!=KW_ID)
+ {
+ free(macro_name);
+ push_lexing_error("expected id after #define",src,translation_data);
+ return;
+ }
+
+ new_macro=get_define_directive(macro_name);
+ /*white space*/
+ hold_token=get_next_token(src,&chonky[0],0);
+ if(hold_token->type==KW_OPEN_NORMAL)
+ {
+ free(hold_token);
+ while(1)
+ {
+ hold_token=get_next_token(src,&chonky[0],0);
+ if(hold_token->type!=KW_ID)
+ {
+ push_lexing_error("expected id in define argument list",src,translation_data);
+ free(hold_token);
+ break;
+ }
+ hold_index=malloc(sizeof(int));
+ *hold_index=number_of_arguments;
+ ++number_of_arguments;
+ Map_Push(new_macro->arguments,hold_token->data,hold_token->data_size,hold_index);
+ free(hold_token);
+ hold_token=get_next_token(src,&chonky[0],0);
+ if(hold_token->type!=KW_COMMA)
+ {
+ if(hold_token->type==KW_CLOSE_NORMAL)
+ {
+ free(hold_token);
+ break;
+ }else
+ {
+ push_lexing_error("expected ',' in define argument list",src,translation_data);
+ free(hold_token);
+ break;
+ }
+ }
+ free(hold_token);
+ }
+
+ }else if(hold_token->type==KW_NOTYPE)
+ {
+ free(hold_token);
+ }
+
+ /*push things*/
+
+ hold_tokens=translation_data->tokens;
+ translation_data->tokens=new_macro->macro_tokens;
+
+ new_macro->number_of_arguments=number_of_arguments;
+ /*there is something in hold_token*/
+ while( (hold_token=get_next_token(src,&chonky[0],0))->type != KW_NOTYPE)
+ {
+ expand_macro(hold_token,src,translation_data);
+ }
+
+ /*removing the notype token*/
+ free(hold_token);
+
+ translation_data->tokens=hold_tokens;
+ /*push the directive into the macro map*/
+ Map_Push(translation_data->macros,macro_name->data,macro_name->data_size,new_macro);
+ //free(macro_name);
+ chase_new_line(src,translation_data);
+
+ }
+ /*
+ id[(list)] tokens \n
+ */
+ struct define_directive* get_define_directive(struct token* macro_name)
+ {
+ struct define_directive *ret;
+ ret=malloc(sizeof(struct token));
+ ret->macro_name=macro_name;
+
+ ret->macro_tokens=malloc(sizeof(struct Queue));
+ Queue_Init(ret->macro_tokens);
+
+ ret->arguments=malloc(sizeof(struct Map));
+ Map_Init(ret->arguments);
+
+ ret->number_of_arguments=0;
+
+ return ret;
+ }
+
+ /*returns an array of queues*/
+ struct Queue* make_define_argument_list(size_t number_of_arguments)
+ {
+ size_t i;
+ struct Queue *ret;
+
+ if(number_of_arguments==0)
+ return NULL;
+
+ ret=malloc(sizeof(struct Queue)*number_of_arguments);
+
+ for(i=0;i<number_of_arguments;++i)
+ {
+ Queue_Init(ret+i);
+ }
+ return ret;
+ }
+ void delete_define_argument_list(size_t number_of_arguments,struct Queue *args)
+ {
+ if(number_of_arguments==0)
+ {
+ assert(args==NULL);
+ return;
+ }
+ flush_macro_arguments(number_of_arguments,args);
+ free(args);
+ }
+
+ void expand_macro_argument(struct Queue *replacement_tokens,struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct Queue_Node *it;
+ struct token *hold_token;
+ for(it=replacement_tokens->first;it!=NULL;it=it->prev)
+ {
+ hold_token=copy_token((struct token*)it->data);
+ hold_token->line=src->which_row;
+ hold_token->column=src->which_column;
+ Queue_Push(translation_data->tokens,hold_token);
+ //Queue_Push(translation_data->tokens,copy_token((struct token*)it->data));
+ }
+ }
+ void load_macro_arguments(struct Queue *args,size_t number_of_arguments,struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct token *hold;
+ struct Queue *hack;
+ size_t i;
+ size_t j;
+
+ if(number_of_arguments==0)
+ return;
+
+ hold=get_next_token(src,&chonky[0],1);
+ if(hold->type!=KW_OPEN_NORMAL)
+ {
+ push_lexing_error("expected '(' in macro expansion",src,translation_data);
+ free(hold);
+ return;
+ }
+ free(hold);
+
+ hack=translation_data->tokens;
+ for(i=0;i<number_of_arguments-1;++i)
+ {
+ translation_data->tokens=args+i;
+ for(
+ hold=get_next_token(src,&chonky[0],1),j=0;
+ hold->type!=KW_COMMA && hold->type!=KW_NOTYPE;
+ hold=get_next_token(src,&chonky[0],1),++j
+ )
+ {
+ expand_macro(hold,src,translation_data);
+ }
+ if(hold->type==KW_NOTYPE)
+ {
+ push_lexing_error("expected ',' in macro argument list",src,translation_data);
+ free(hold);
+ goto cleanup;
+ }
+ if(j==0)
+ {
+ push_lexing_error("expected argument in macro argument list",src,translation_data);
+ free(hold);
+ goto cleanup;
+ }
+
+ }
+ translation_data->tokens=args+i;
+ for(
+ hold=get_next_token(src,&chonky[0],1),j=0;
+ hold->type!=KW_CLOSE_NORMAL;
+ hold=get_next_token(src,&chonky[0],1),++j
+ )
+ {
+ if(hold->type==KW_NOTYPE)
+ {
+ push_lexing_error("expected ')' in macro argument list",src,translation_data);
+ free(hold);
+ goto cleanup;
+ }
+ expand_macro(hold,src,translation_data);
+ }
+ if(j==0)
+ {
+ push_lexing_error("expected argument in macro argument list",src,translation_data);
+ free(hold);
+ }
+
+ cleanup:
+ translation_data->tokens=hack;
+
+
+ }
+ void flush_macro_arguments(size_t number_of_arguments,struct Queue *args)
+ {
+ size_t i;
+ for(i=0;i<number_of_arguments;++i)
+ {
+ while(args[i].size>0)
+ free(Queue_Pop(args+i));
+ }
+ }
+ /*macro name token is freed on expansion , if it is not a macro name it is pushed into token queue*/
+ void expand_macro(struct token* macro_name,struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct define_directive *hold=NULL;
+ struct token *hold_token;
+ int *index;
+ struct Queue_Node *it;
+ struct Queue *argument_list;
+
+ if(macro_name->type==KW_ID)
+ hold=Map_Check(translation_data->macros,macro_name->data,macro_name->data_size);
+ if(hold!=NULL)
+ {
+ free(macro_name);
+ argument_list=make_define_argument_list(hold->number_of_arguments);
+ load_macro_arguments(argument_list,hold->number_of_arguments,src,translation_data);
+ if(translation_data->errors->size>0)
+ {
+ delete_define_argument_list(hold->number_of_arguments,argument_list);
+ return;
+ }
+
+
+ for(it=hold->macro_tokens->first;it!=NULL;it=it->prev)
+ {
+ hold_token=(struct token*)it->data;
+ index=Map_Check(hold->arguments,hold_token->data,hold_token->data_size);
+ if(index!=NULL)
+ {
+ expand_macro_argument(argument_list+*index,src,translation_data);
+ }else
+ {
+ hold_token=copy_token(hold_token);
+
+ hold_token->line=src->which_row;
+ hold_token->column=src->which_column;
+
+ Queue_Push(translation_data->tokens,hold_token);
+ }
+ }
+ delete_define_argument_list(hold->number_of_arguments,argument_list);
+ }else
+ {
+ /*this isn't a macro, so we just push it to the token queue*/
+ Queue_Push(translation_data->tokens,macro_name);
+ }
+ }
+ void preproc_lex_first_part(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct Source_File temp_src;
+ struct token *hold_token;
+ char just_in_case;
+
+ temp_src=*src;
+ hold_token=preproc_find_else(src,translation_data,1);
+
+
+ temp_src.src_size=src->where_in_src;
+ just_in_case=src->src[src->where_in_src];
+ src->src[src->where_in_src]='\0';
+
+ lex(&temp_src,translation_data);
+
+ src->src[src->where_in_src]=just_in_case;
+
+ if(hold_token!=NULL)
+ free(hold_token);
+ do
+ {
+ hold_token=preproc_find_else(src,translation_data,0);
+ if(hold_token)
+ free(hold_token);
+ else
+ break;
+ }while(!has_new_errors(translation_data));
+
+ if(hold_token!=NULL)
+ {
+ free(hold_token);
+ push_lexing_error("could not find matching #else, #elif or #endif",src,translation_data);
+ }
+ }
+ /*
+ we have skipped the #if part so this could be used for elif
+ */
+ void parse_preproc_if_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+
+ struct Queue *tokens;
+ struct Queue *swap;
+ struct AST *condition;
+ struct Scope *null_scope;
+ struct token *hold_token;
+ int result;
+
+ null_scope=get_normal_scope(NULL,FILE_SCOPE);
+
+ tokens=lex_line(src,translation_data,1);
+
+ swap=translation_data->tokens;
+ translation_data->tokens=tokens;
+
+ condition=parse_expression(translation_data,null_scope);
+ result=evaluate_const_expression_integer(condition,translation_data);
+ delete_normal_scope((struct Normal_Scope*)null_scope);
+ delete_ast(condition);
+
+ if(result)
+ {
+ preproc_lex_first_part(src,translation_data);
+ }else
+ {
+ hold_token=preproc_find_else(src,translation_data,0);
+ if(hold_token!=NULL && hold_token->type==PKW_ELIF)
+ {
+ parse_preproc_if_line(src,translation_data);
+ }
+ else if(hold_token!=NULL)
+ {
+ preproc_lex_first_part(src,translation_data);
+ }
+ }
+
+
+ }
+ struct token* preproc_find_else(struct Source_File *src,struct Translation_Data *translation_data,char jump_before)
+ {
+ struct token *hold_token;
+ struct Source_File temp_src;
+ int indentation=1;
+
+ temp_src=*src;
+ while(src->src[src->where_in_src]!='\0' && indentation)
+ {
+ /*BEWARE*/
+ temp_src=*src;
+ /*END BEWARE*/
+
+ hold_token=get_next_token(src,&chonky[0],1);
+ if(hold_token->type==KW_HASHTAG)
+ {
+ free(hold_token);
+ hold_token=get_next_token(src,&chonky_jr[0],0);
+ switch(hold_token->type)
+ {
+ case PKW_IF:
+ case PKW_IFDEF:
+ case PKW_IFNDEF:
+ ++indentation;
+ break;
+
+ case PKW_ENDIF:
+ --indentation;
+ break;
+
+ case PKW_ELSE:
+ case PKW_ELIF:
+ if(indentation==1)
+ {
+ if(jump_before)
+ *src=temp_src;
+ return hold_token;
+ }
+ else
+ {
+ break;
+ }
+ case PKW_NOTYPE:
+ free(hold_token);
+ goto_new_line(src,translation_data);
+ return NULL;
+ }
+ free(hold_token);
+
+ }else if(hold_token->type!=KW_NOTYPE)
+ {
+ free(hold_token);
+ }else
+ {
+ if(src->where_in_src!=src->src_size)
+ push_lexing_error("unexpected character",src,translation_data);
+ free(hold_token);
+ return NULL;
+ }
+ goto_new_line(src,translation_data);
+ }
+ /*BEWARE*/
+ //goto_new_line(src,translation_data);
+ /*END BEWARE*/
+ if(jump_before)
+ *src=temp_src;
+ return NULL;
+ }
+ void parse_preproc_ifdef_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct token *hold_token;
+ hold_token=get_next_token(src,&chonky[0],0);
+ if(hold_token==NULL || hold_token->type!=KW_ID)
+ {
+ free(hold_token);
+ push_lexing_error("expected an id here",src,translation_data);
+ chase_new_line(src,translation_data);
+ return;
+ }else
+ {
+ if(Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
+ {
+ preproc_lex_first_part(src,translation_data);
+ }else
+ {
+ free(hold_token);
+
+ hold_token=preproc_find_else(src,translation_data,1);
+
+ if(hold_token!=NULL && hold_token->type==PKW_ELIF)
+ {
+ parse_preproc_if_line(src,translation_data);
+ }else if(hold_token!=NULL)
+ {
+ preproc_find_else(src,translation_data,0);
+ preproc_lex_first_part(src,translation_data);
+ }
+
+ free(hold_token);
+ }
+
+ }
+ chase_new_line(src,translation_data);
+ }
+ void parse_preproc_ifndef_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct token *hold_token;
+ hold_token=get_next_token(src,&chonky[0],0);
+ if(hold_token==NULL || hold_token->type!=KW_ID)
+ {
+ push_lexing_error("expected an id here",src,translation_data);
+ chase_new_line(src,translation_data);
+ free(hold_token);
+ return;
+ }else
+ {
+ if(!Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
+ {
+ free(hold_token);
+ preproc_lex_first_part(src,translation_data);
+ }else
+ {
+ free(hold_token);
+
+ hold_token=preproc_find_else(src,translation_data,1);
+ if(hold_token!=NULL && hold_token->type==PKW_ELIF)
+ {
+ parse_preproc_if_line(src,translation_data);
+ }
+ else if(hold_token!=NULL)
+ {
+ preproc_find_else(src,translation_data,0);
+ preproc_lex_first_part(src,translation_data);
+ }
+ free(hold_token);
+ }
+
+ }
+ chase_new_line(src,translation_data);
+ }
+ void parse_preproc_undef_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct define_directive *hold_macro;
+ struct token *id;
+
+ id=get_next_token(src,&chonky[0],0);
+ if(id->type!=KW_ID)
+ {
+ push_lexing_error("expected an id here",src,translation_data);
+ }else
+ {
+ hold_macro=Map_Check(translation_data->macros,id->data,id->data_size);
+ if(hold_macro!=NULL)
+ {
+ delete_macro(hold_macro);
+ Map_Remove(translation_data->macros,id->data,id->data_size);
+ }
+ }
+ free(id);
+ chase_new_line(src,translation_data);
+ }
+ void parse_preproc_error_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ char *error;
+ size_t line,column;
+ error=src->src+src->where_in_src;
+ line=src->which_row+1;
+ column=src->which_column+1;
+
+
+ goto_new_line(src,translation_data);
+ src->src[src->where_in_src-1]='\0';
+
+ Queue_Push(translation_data->errors,get_translation_error(error,line,column,src->src_name->filename));
+
+ }
+ void parse_preproc_line_line(struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ struct Queue *tokens;
+ struct Translation_Data hack;
+ struct token *hold_line;
+ struct token *hold_name;
+
+ tokens=lex_line(src,translation_data,0);
+ hack=*translation_data;
+ hack.tokens=tokens;
+ /*TODO account for other types of integer constants*/
+ if(check(&hack,KW_DECIMAL_CONSTANT,0))
+ {
+ hold_line=(struct token*)Queue_Pop(tokens);
+ src->which_row=evaluate_integer_constant(hold_line,translation_data);
+ if(check(&hack,KW_STRING,0))
+ {
+ hold_name=(struct token*)Queue_Pop(tokens);
+ hold_name->data[hold_name->data_size]='\0';
+ if(tokens->size>0)
+ {
+ free(hold_line);
+ free(hold_name);
+ flush_tokens(tokens);
+ push_lexing_error("expected a new line in #line preprocessing directive here",src,translation_data);
+ return;
+ }else
+ {
+ delete_source_name(src->src_name);
+ src->src_name=get_source_name(hold_name->data,"");
+ return;
+ }
+
+ }else if(tokens->size>0)
+ {
+ free(hold_line);
+ flush_tokens(tokens);
+ push_lexing_error("expected a string or new line in #line preprocessing directive here",src,translation_data);
+ return;
+ }
+
+ }else
+ {
+ flush_tokens(tokens);
+ push_lexing_error("expected a line number in #line preprocessing directive here",src,translation_data);
+ return;
+ }
+ }
+ void delete_macro(void *macro)
+ {
+ #define AS_MACRO(x) ((struct define_directive*)macro)
+ free(AS_MACRO(macro)->macro_name);
+ flush_tokens(AS_MACRO(macro)->macro_tokens);
+ free(AS_MACRO(macro)->macro_tokens);
+ Map_Map(AS_MACRO(macro)->arguments,free);
+ free(AS_MACRO(macro)->arguments);
+ free(macro);
+ #undef AS_MACRO
+ }
+ struct Queue* lex_line(struct Source_File *src,struct Translation_Data *translation_data,char lex_defined_token)
+ {
+
+ struct Source_File temp_src;
+ struct token *hold_token;
+ struct Queue *tokens;
+ char just_in_case;
+
+ tokens=malloc(sizeof(struct Queue));
+ Queue_Init(tokens);
+
+
+ temp_src=*src;
+ goto_new_line(src,translation_data);
+ just_in_case=src->src[src->where_in_src];
+ src->src[src->where_in_src]='\0';
+
+ translation_data->tokens=tokens;
+
+ while((hold_token=get_next_token(&temp_src,&chonky[0],0))->type!=KW_NOTYPE)
+ {
+ if(lex_defined_token && hold_token->type==KW_ID && hold_token->data_size==7 && gstrn_cmp(hold_token->data,"defined",7))
+ {
+ free(hold_token);
+ hold_token=get_next_token(&temp_src,&chonky[0],0);
+ if(hold_token->type==KW_OPEN_NORMAL)
+ {
+ free(hold_token);
+ hold_token=get_next_token(&temp_src,&chonky[0],0);
+ if(hold_token->type!=KW_ID)
+ {
+ push_lexing_error("expected an id after '(' in defined",src,translation_data);
+ }else
+ {
+ struct token *hold_closing_token;
+ hold_closing_token=get_next_token(&temp_src,&chonky[0],0);
+ if(hold_closing_token->type!=KW_CLOSE_NORMAL)
+ {
+ push_lexing_error("expected an ')' after id in define",src,translation_data);
+ }else
+ {
+ if(!Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
+ {
+ hold_token->type=KW_DECIMAL_CONSTANT;
+ hold_token->data="0";
+ hold_token->data_size=1;
+ }else
+ {
+ hold_token->type=KW_DECIMAL_CONSTANT;
+ hold_token->data="1";
+ hold_token->data_size=1;
+ }
+
+ }
+ }
+ }else if(hold_token->type!=KW_ID)
+ {
+ push_lexing_error("expected an id after define",src,translation_data);
+ }else
+ {
+ if(!Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
+ {
+ hold_token->type=KW_DECIMAL_CONSTANT;
+ hold_token->data="0";
+ hold_token->data_size=1;
+ }else
+ {
+ hold_token->type=KW_DECIMAL_CONSTANT;
+ hold_token->data="1";
+ hold_token->data_size=1;
+ }
+ }
+ }
+ Queue_Push(tokens,hold_token);
+ }
+
+ free(hold_token);
+ src->src[src->where_in_src]=just_in_case;
+
+ return tokens;
+ }
+ #endif
F diff --git a/frontend/lex/preprocessing.h b/frontend/lex/preprocessing.h new file mode 100644 --- /dev/null +++ b/frontend/lex/preprocessing.h
+ #ifndef GCC_PREPROCESSING_H
+ #define GCC_PREPROCESSING_H GCC_PREPROCESSING_H
+ #include <preprocessing.hh>
+ #include <program.h>
+ #include <lexer.h>
+ #include <chonky.h>
+ #include <gcc_error.h>
+ #include <map.h>
+ #include <scope.h>
+
+ struct define_directive
+ {
+ struct token *macro_name;
+
+ /*the tokens of the macro*/
+ struct Queue *macro_tokens;
+
+ /*ints are stored here*/
+ struct Map *arguments;
+
+ /*put arguments here*/
+ /*an array of token queues*/
+ size_t number_of_arguments;
+ };
+
+ void parse_preproc_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_include_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_define_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_preproc_if_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_preproc_ifdef_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_preproc_ifndef_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_preproc_undef_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_preproc_error_line(struct Source_File *src,struct Translation_Data *translation_data);
+ void parse_preproc_line_line(struct Source_File *src,struct Translation_Data *translation_data);
+
+
+ struct Queue* lex_line(struct Source_File *src,struct Translation_Data *translation_data,char lex_defined_token);
+ /*preproc if stuff*/
+ /*returns an else or elif token, or if it hits matching endif before that return NULL*/
+ struct token* preproc_find_else(struct Source_File *src,struct Translation_Data *translation_data,char jump_before);
+
+ /*hack*/
+ void preproc_lex_first_part(struct Source_File *src,struct Translation_Data *translation_data);
+
+
+ /*define stuff*/
+ void expand_macro(struct token* macro_name,struct Source_File *src,struct Translation_Data *translation_data);
+
+
+
+ struct define_directive* get_define_directive(struct token* macro_name);
+ struct Queue* make_define_argument_list(size_t number_of_arguments);
+
+ void expand_macro_argument(struct Queue *replacement_tokens,struct Source_File *src,struct Translation_Data *translation_data);
+ void load_macro_arguments(struct Queue *args,size_t number_of_arguments,struct Source_File *src,struct Translation_Data *translation_data);
+ void flush_macro_arguments(size_t number_of_arguments,struct Queue *args);
+ void parse_define_line(struct Source_File *src,struct Translation_Data *translation_data);
+
+ void delete_define_argument_list(size_t number_of_arguments,struct Queue *args);
+ void delete_macro(void *macro);
+
+ #endif
F diff --git a/frontend/lex/preprocessing.hh b/frontend/lex/preprocessing.hh new file mode 100644 --- /dev/null +++ b/frontend/lex/preprocessing.hh
+ #ifndef GCC_PREPROCESSING_H
+ #define GCC_PREPROCESSING_H GCC_PREPROCESSING_H
+
+ struct define_directive;
+
+ #endif
F diff --git a/frontend/parse/parse.h b/frontend/parse/parse.h new file mode 100644 --- /dev/null +++ b/frontend/parse/parse.h
+ #ifndef GCC_PARSE_C
+ #define GCC_PARSE_C GCC_PARSE_C
+
+ #include <parse_expression.h>
+ #include <parse_statement.h>
+ #include <parse_declaration.h>
+ #include <parse_translation_unit.h>
+
+
+
+
+
+ #endif
F diff --git a/frontend/parse/parse_declaration.c b/frontend/parse/parse_declaration.c new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_declaration.c
+ #ifndef GCC_PARSE_DECLARATION_C
+ #define GCC_PARSE_DECLARATION_C GCC_PARSE_DECLARATION_C
+ #include"parse_declaration.h"
+
+ /*declaration-specifiers init-declarator (,init-declarator)* ;*/
+ /* init-declarator: declarator [ = initializer ] */
+ void parse_declaration(struct Translation_Data *translation_data,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions)
+ {
+ struct Denotation_Prototype *prototype;
+ struct Denoted *hold;
+
+ prototype=parse_declaration_specifiers(translation_data,scope);
+ while(!get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ hold=parse_declarator(translation_data,scope,prototype);
+
+ if(hold->denotation==DT_Function)
+ {
+ /*check if this is a function definition*/
+ if(parse_function_definitions && get_and_check(translation_data,KW_OPEN_CURLY))
+ {
+ ((struct Denoted_Function*)hold) ->body=
+ (struct AST_Compound_Statement*)parse_finish_compound_statement(translation_data,scope);
+ Queue_Push(where_to_push,get_function_definition_tree(scope,(struct Denoted_Function*)hold));
+ Scope_Push(scope,hold,translation_data);
+ break;
+ }
+ /*this is a function declaration*/
+ Queue_Push(where_to_push,get_function_declaration_tree(scope,(struct Denoted_Function*)hold));
+ }else if(hold->denotation==DT_Typedef)
+ {
+ Queue_Push(where_to_push,get_type_definition_tree((struct Denoted_Typedef*)hold));
+ }else if(hold->denotation==DT_Object)
+ {
+ Queue_Push(where_to_push,get_object_declaration_tree((struct Denoted_Object*)hold));
+ if(get_and_check(translation_data,KW_EQ))
+ ((struct Denoted_Object*)hold)->initializer=parse_initializer(translation_data,scope,(struct Denoted_Object*)hold);
+ }else
+ {
+ /*TODO error*/
+ Queue_Push(where_to_push,get_declaration_error_tree(hold));
+ push_translation_error("declaration expected",translation_data);
+
+ /*search for end of erronous declaration*/
+ break;
+ }
+
+ Scope_Push(scope,hold,translation_data);
+ parse_function_definitions=0;
+ if(!get_and_check(translation_data,KW_COMMA) && !check(translation_data,KW_SEMI_COLUMN,0))
+ {
+ /*TODO error*/
+ Queue_Push(where_to_push,get_declaration_error_tree(NULL));
+ push_translation_error("semi column expected",translation_data);
+ break;
+ }
+ }
+
+ free(prototype);
+
+ }
+
+
+ struct Denotation_Prototype* parse_specifier_qualifier_list(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ return parse_declaration_specifiers_inner(translation_data,scope,0);
+ }
+ struct Denotation_Prototype* parse_declaration_specifiers(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ return parse_declaration_specifiers_inner(translation_data,scope,1);
+ }
+
+ /*declaration-specifiers:
+ ( storage-class-specifier type-specifier type-qualifier function-specifier)* */
+ struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Translation_Data *translation_data,struct Scope *scope,char parse_storage_class)
+ {
+ enum KEYWORDS hold_kw;
+ struct Denotation_Prototype *ret;
+ ret=(struct Denotation_Prototype*)get_denotation_prototype(translation_data->types);
+
+ while(1)
+ {
+ hold_kw=kw_get(translation_data);
+ switch(hold_kw)
+ {
+ case KW_CONST:
+ chomp(translation_data);
+ ret->is_const=1;
+ break;
+ case KW_VOLATILE:
+ chomp(translation_data);
+ ret->is_volatile=1;
+ break;
+ case KW_INT:
+ chomp(translation_data);
+ if(ret->specifier!=TS_NONE)
+ {
+ push_translation_error("more than one type specifier given",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_INT;
+ break;
+ case KW_VOID:
+ chomp(translation_data);
+ if(ret->specifier!=TS_NONE)
+ {
+ push_translation_error("more than one type specifier given",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_VOID;
+ break;
+ case KW_CHAR:
+ chomp(translation_data);
+ if(ret->specifier!=TS_NONE)
+ {
+ push_translation_error("more than one type specifier given",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_CHAR;
+ break;
+ case KW_DOUBLE:
+ chomp(translation_data);
+ if(ret->specifier!=TS_NONE)
+ {
+ push_translation_error("more than one type specifier given",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_DOUBLE;
+ break;
+ case KW_FLOAT:
+ chomp(translation_data);
+ if(ret->specifier!=TS_NONE)
+ {
+ push_translation_error("more than one type specifier given",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_FLOAT;
+ break;
+ case KW_LONG:
+ chomp(translation_data);
+ if(ret->constraint!=TC_NONE)
+ {
+ if(ret->constraint==TC_LONG)
+ {
+ ret->constraint=TC_LONG_LONG;
+ break;
+ }else
+ {
+ if(ret->constraint==TC_LONG_LONG)
+ push_translation_error("yeah ... it's big",translation_data);
+ else if(ret->constraint==TC_SHORT)
+ push_translation_error("long and short constraints contradict",translation_data);
+ else
+ assert(0);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ }
+ ret->constraint=TC_LONG;
+ break;
+ case KW_SHORT:
+ chomp(translation_data);
+ if(ret->constraint!=TC_NONE)
+ {
+ switch(ret->constraint)
+ {
+ case TC_LONG:
+ push_translation_error("long and short constraints contradict",translation_data);
+ break;
+ case TC_SHORT:
+ push_translation_error("it's not about the size, it's about how you use it",translation_data);
+ break;
+ case TC_LONG_LONG:
+ push_translation_error("long long and short constraints contradict",translation_data);
+ break;
+ default:
+ /*should not be able to enter here*/
+ assert(0);
+ }
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->constraint=TC_SHORT;
+ break;
+ case KW_EXTERN:
+ if(!parse_storage_class)
+ goto exit;
+ chomp(translation_data);
+ if(ret->storage_class!=SCS_NONE)
+ {
+ switch(ret->storage_class)
+ {
+ case SCS_EXTERN:
+ push_translation_error("only one extern allowed >:|",translation_data);
+ break;
+
+ case SCS_TYPEDEF:
+ case SCS_STATIC:
+ push_translation_error("only one storage class allowed >:|",translation_data);
+ break;
+ default:
+ assert(0);
+ }
+
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->storage_class=SCS_EXTERN;
+ break;
+ case KW_STATIC:
+ if(!parse_storage_class)
+ goto exit;
+ chomp(translation_data);
+ if(ret->storage_class!=SCS_NONE)
+ {
+ switch(ret->storage_class)
+ {
+ case SCS_STATIC:
+ push_translation_error("only one static allowed >:|",translation_data);
+ break;
+
+ case SCS_EXTERN:
+ case SCS_TYPEDEF:
+ push_translation_error("only one storage class allowed >:|",translation_data);
+ break;
+ default:
+ assert(0);
+ }
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->storage_class=SCS_STATIC;
+ break;
+ case KW_TYPEDEF:
+ if(!parse_storage_class)
+ goto exit;
+ chomp(translation_data);
+ if(ret->storage_class!=SCS_NONE)
+ {
+ switch(ret->storage_class)
+ {
+ case SCS_STATIC:
+ case SCS_EXTERN:
+ case SCS_TYPEDEF:
+ push_translation_error("only one storage class allowed >:|",translation_data);
+ break;
+ default:
+ assert(0);
+ }
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->storage_class=SCS_TYPEDEF;
+ break;
+ case KW_STRUCT:
+ ret->specifier=TS_STRUCT;
+ goto hack;
+ case KW_UNION:
+ ret->specifier=TS_UNION;
+ hack:
+ chomp(translation_data);
+ if(check(translation_data,KW_ID,0))
+ {
+ struct token *id;
+ struct Denoted_Struct_Union *tag;
+ id=Queue_Pop(translation_data->tokens);
+ tag=(struct Denoted_Struct_Union*)check_tag(scope,id);
+
+ if(tag==NULL)
+ {
+ struct Struct_Union *body;
+ body=get_struct_union_base(scope,ret->specifier);
+ Scope_Push(scope,get_denoted_struct_union(id,body),translation_data);
+
+ parse_struct_union_specifier_finish(translation_data,scope,body);
+ ret->struct_union=body;
+ }else
+ {
+ ret->struct_union=tag->struct_union;
+ if(ret->struct_union->specifier!=ret->specifier)
+ {
+ push_translation_error("more than one type specifier",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ if(ret->struct_union->is_finished==0)
+ {
+ /*then this could be a definition*/
+ parse_struct_union_specifier_finish(translation_data,scope,ret->struct_union);
+ }
+ }
+
+ }else
+ {
+ ret->struct_union=get_struct_union_base(scope,ret->specifier);
+ parse_struct_union_specifier_finish(translation_data,scope,ret->struct_union);
+ if(ret->struct_union->is_finished==0)
+ {
+ push_translation_error("expected a struct tag or a struct definition",translation_data);
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ }
+ break;
+ case KW_ENUM:
+ chomp(translation_data);
+ ret->specifier=TS_ENUM;
+ if(check(translation_data,KW_ID,0))
+ {
+ struct token *id;
+ struct Denoted_Enum *enumerator;
+ id=Queue_Pop(translation_data->tokens);
+ enumerator=(struct Denoted_Enum*)check_tag(scope,id);
+ if(enumerator==NULL)
+ {
+ struct Enum *body;
+ body=get_enum_base();
+ Scope_Push(scope,get_denoted_enum(id,body),translation_data);
+ parse_enum_specifier_finish(translation_data,scope,body);
+ ret->enumerator=body;
+ }else
+ {
+ ret->enumerator=enumerator->enumeration;
+ if(enumerator->denotation!=DT_Enum)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ if(ret->enumerator->is_finished==0)
+ {
+ /*this could be an enum definition*/
+ parse_enum_specifier_finish(translation_data,scope,ret->enumerator);
+ }
+ }
+
+ }else
+ {
+ parse_enum_specifier_finish(translation_data,scope,ret->enumerator);
+ }
+ break;
+ case KW_ID:
+ if(ret->specifier==TS_NONE)
+ {
+ struct Denoted *hold;
+ hold=check_ordinary(scope,(struct token*)translation_data->tokens->first->data);
+ if(hold!=NULL && hold->denotation==DT_Typedef)
+ {
+ ret->type=((struct Denoted_Typedef*)hold)->type;
+ chomp(translation_data);
+ return ret;
+ }
+ /*falltrough - this has not been typedefed*/
+ }
+ /*falltrough (it is possible to overwrite typedef id from upper scope)*/
+ default:
+ exit:
+ if(ret->specifier==TS_ENUM)
+ {
+ ret->type=(struct Type*)get_enum_type(ret);
+ }else if(ret->specifier==TS_STRUCT || ret->specifier==TS_UNION)
+ {
+ ret->type=(struct Type*)get_struct_union_type(ret);
+ }else if(ret->type==NULL)
+ {
+ ret->type=(struct Type*)get_basic_type(ret);
+ }
+ return ret;
+ }
+ }
+ }
+
+
+
+
+
+ /*
+ declarator:
+ ( pointer ( type-qualifier )* )* direct-declarator
+ */
+ struct Denoted* parse_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype)
+ {
+ struct Denoted_Base *temp;
+ struct Denoted *ret;
+ temp=get_denoted_base(prototype);
+ parse_declarator_inner(translation_data,scope,temp);
+ ret=extract_denoted(temp,prototype,0);
+ delete_denoted_base(temp);
+ return ret;
+
+ }
+
+ void parse_declarator_inner(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base)
+ {
+ enum KEYWORDS hold;
+ char is_const;
+ char is_volatile;
+ while(get_and_check(translation_data,KW_STAR))
+ {
+ is_const=is_volatile=0;
+ while(1)
+ {
+ hold=kw_get(translation_data);
+ if(hold==KW_CONST)
+ {
+ chomp(translation_data);
+ is_const=1;
+ }else if(hold==KW_VOLATILE)
+ {
+ chomp(translation_data);
+ is_volatile=1;
+ }else
+ {
+ break;
+ }
+ }
+ base->type=(struct Type*)get_pointer_type(base->type,is_const,is_volatile);
+ }
+ parse_direct_declarator(translation_data,scope,base);
+
+ }
+ /*
+ direct-declarator:
+ id direct-declarator-finish
+ ( declarator ) direct-declarator-finish
+ */
+ void parse_direct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base)
+ {
+ if(check(translation_data,KW_ID,0))
+ {
+ base->id=Queue_Pop(translation_data->tokens);
+ parse_direct_declarator_finish(translation_data,scope,base);
+
+ }else if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ struct Queue *hack;
+ struct Queue *hold;
+ hack=malloc(sizeof(struct Queue));
+ Queue_Init(hack);
+
+ while(!check(translation_data,KW_CLOSE_NORMAL,0))
+ {
+ Queue_Push(hack,Queue_Pop(translation_data->tokens));
+ }
+ /*remove closing )*/
+ chomp(translation_data);
+ parse_direct_declarator_finish(translation_data,scope,base);
+
+
+
+ hold=translation_data->tokens;
+ translation_data->tokens=hack;
+ parse_declarator_inner(translation_data,scope,base);
+ translation_data->tokens=hold;
+ if(hack->size!=0)
+ {
+ /*TODO error*/
+ base->denotation=DT_Error;
+ while(hack->size)
+ {
+ free(Queue_Pop(hack));
+ }
+ free(hack);
+ push_translation_error("declarator error",translation_data);
+ return;
+ }
+ free(hack);
+
+ }else
+ {
+ /*this might be an abstract declarator*/
+ parse_direct_declarator_finish(translation_data,scope,base);
+ }
+ }
+
+ /*
+ direct-declarator-finish:
+ ( [ constant-expression ] | (parameter-list) | ( [id-list] ) )*
+ */
+ void parse_direct_declarator_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base)
+ {
+ struct AST *hold_expression;
+ while(1)
+ {
+ if(get_and_check(translation_data,KW_OPEN_SQUARE))
+ {
+ if(get_and_check(translation_data,KW_CLOSE_SQUARE))
+ {
+ hold_expression=NULL;
+ }else
+ {
+ hold_expression=parse_expression(translation_data,scope);
+ if(!get_and_check(translation_data,KW_CLOSE_SQUARE))
+ {
+ /*TODO error*/
+ push_translation_error("']' expected",translation_data);
+ base->type=(struct Type*)get_type_error(base->type);
+ delete_ast(hold_expression);
+ return;
+ }
+ }
+
+ parse_direct_declarator_finish(translation_data,scope,base);
+ base->type=get_array_type(base->type,hold_expression,translation_data);
+
+ }else if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ struct Queue *parameters;
+ struct Normal_Scope *function_prototype_scope;
+
+ function_prototype_scope=(struct Normal_Scope*)get_normal_scope(scope,FUNCTION_PROTOTYPE_SCOPE);
+
+ parameters=malloc(sizeof(struct Queue));
+ Queue_Init(parameters);
+
+ parse_paramenter_list(translation_data,function_prototype_scope,parameters);
+ base->type=(struct Type*)get_function_type(base->type,parameters,function_prototype_scope);
+
+ }else
+ {
+ break;
+ }
+
+ }
+
+ }
+
+
+ /*
+ struct-union-specifier-finish:
+ { ( struct-declaration )* }
+ */
+ void parse_struct_union_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Struct_Union *base)
+ {
+ if(get_and_check(translation_data,KW_OPEN_CURLY))
+ {
+ base->is_finished=1;
+ while(parse_struct_declaration(translation_data,(struct Scope*)base->inner_namespace,base->members))
+ if(get_and_check(translation_data,KW_CLOSE_CURLY))
+ return ;
+ /*TODO error*/
+ push_translation_error("expected closing curly bracket from struct declaration",translation_data);
+ return;
+ }
+ }
+ /*
+ struct-declaration:
+ specifier-qualifier-list ( struct-declarator )* ;
+ */
+ char parse_struct_declaration(struct Translation_Data *translation_data,struct Scope *struct_scope,struct Queue* members)
+ {
+ struct Denotation_Prototype *prototype;
+ struct Denoted *hold;
+ prototype=parse_specifier_qualifier_list(translation_data,struct_scope);
+ while(!get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ hold=parse_struct_declarator(translation_data,struct_scope,prototype);
+ if(hold!=NULL && hold->denotation!=DT_Error)
+ {
+ Scope_Push(struct_scope,hold,translation_data);
+ Queue_Push(members,hold);
+
+ }else
+ {
+ free(prototype);
+ push_translation_error("there is a problem with the declarator",translation_data);
+ return 0;
+ }
+
+ if(!get_and_check(translation_data,KW_COMMA) && !check(translation_data,KW_SEMI_COLUMN,0))
+ {
+ free(prototype);
+ push_translation_error("semi column expected in struct declaration",translation_data);
+ return 0;
+ }
+ }
+ free(prototype);
+ return 1;
+
+ }
+ /*
+ struct-declarator:
+ declarator
+ [ declarator ] : constant-expression
+ */
+ struct Denoted* parse_struct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype)
+ {
+ struct Denoted *hold;
+ if(get_and_check(translation_data,KW_COLUMN))
+ {
+ /*unnamed bitfields are possible*/
+ hold=get_denoted_object(NULL,SCS_NONE,prototype->type,NULL);
+
+ }else
+ {
+ hold=parse_declarator(translation_data,scope,prototype);
+ if(get_and_check(translation_data,KW_COLUMN))
+ {
+ /*TODO move error detection in get_type_bitfield*/
+ ((struct Denoted_Object*)hold)->object->type=(struct Type*)get_type_bitfield(prototype->type,parse_expression(translation_data,scope),translation_data);
+ }
+ }
+
+ return hold;
+ }
+ /*
+ enum-specifier-finish
+ { ( enumeration-constant [ = constant-expression ] , )* }
+ */
+ void parse_enum_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Enum *enumeration)
+ {
+ struct token *id;
+ struct Denoted_Enum_Const *hold;
+ int where_in_enumeration=0;
+ if(get_and_check(translation_data,KW_OPEN_CURLY))
+ {
+ enumeration->is_finished=1;
+ do
+ {
+ if(check(translation_data,KW_ID,0))
+ {
+ id=Queue_Pop(translation_data->tokens);
+ if(get_and_check(translation_data,KW_EQ))
+ {
+ hold=(struct Denoted_Enum_Const*)get_denoted_enum_const_expr(id,enumeration,parse_expression(translation_data,scope),translation_data);
+ Queue_Push(enumeration->consts,hold);
+ where_in_enumeration=hold->value+1;
+ }else
+ {
+ Queue_Push(enumeration->consts,get_denoted_enum_const_num(id,enumeration,where_in_enumeration));
+ ++where_in_enumeration;
+ }
+ if(!get_and_check(translation_data,KW_COMMA) && get_and_check(translation_data,KW_CLOSE_CURLY))
+ {
+ return;
+ }else
+ {
+ /*TODO error*/
+ push_translation_error("enum definition error",translation_data);
+ Queue_Push(enumeration->consts,get_denoted_error(NULL));
+ return ;
+ }
+ }else
+ {
+ /*TODO error*/
+ push_translation_error("enum definition error, expected an id",translation_data);
+ Queue_Push(enumeration->consts,get_denoted_error(NULL));
+ return ;
+ }
+ }while(!get_and_check(translation_data,KW_CLOSE_CURLY));
+
+ }
+ }
+
+ /*
+ parameter-list:
+ (declaratoion-specifiers (declarator | abstract-declarator),)+
+ */
+ void parse_paramenter_list(struct Translation_Data *translation_data,struct Normal_Scope *function_prototype_scope,struct Queue *parameters)
+ {
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ return;
+
+ struct Denotation_Prototype *prototype;
+ struct Denoted_Base *base;
+ struct Denoted *hold;
+ do
+ {
+
+
+ prototype=parse_declaration_specifiers(translation_data,(struct Scope*)function_prototype_scope);
+ base=get_denoted_base(prototype);
+
+
+ parse_declarator_inner(translation_data,(struct Scope*)function_prototype_scope,base);
+ if(base->denotation!=DT_Object)
+ {
+ /*TODO error*/
+ push_translation_error("expected object declaration in function prototype",translation_data);
+ // delete_denoted(hold);
+ delete_denoted_prototype(prototype);
+ delete_denoted_base(base);
+ return;
+ }
+
+ hold=extract_denoted(base,prototype,1);
+
+ if(((struct Denoted_Object*)hold)->id!=NULL)
+ Scope_Push((struct Scope*)function_prototype_scope,hold,translation_data);
+ Queue_Push(parameters,((struct Denoted_Object*)hold));
+
+ delete_denoted_prototype(prototype);
+ delete_denoted_base(base);
+
+ }while(get_and_check(translation_data,KW_COMMA));
+ if(!get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ /*TODO error*/
+ push_translation_error("expected a ')' finishing the parameter list",translation_data);
+ Queue_Push(parameters,get_denoted_error(NULL));
+ return;
+ }
+
+ }
+ /*
+ type-name:
+ specifier-qualifier-list [abstract-declarator]
+ */
+ struct Type* parse_type_name(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct Denotation_Prototype *prototype;
+ struct Type *ret;
+ prototype=parse_specifier_qualifier_list(translation_data,scope);
+ ret=parse_abstract_declarator(translation_data,scope,prototype);
+ delete_denoted_prototype(prototype);
+ return ret;
+ }
+ /*
+ abstract-declarator:
+ ( pointer )* abstract-direct-declarator
+ */
+ struct Type* parse_abstract_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype)
+ {
+ struct Denoted_Base *base;
+ struct Type *ret;
+
+
+ get_denoted_base(prototype);
+ parse_declarator_inner(translation_data,scope,base);
+
+ if(base->denotation==DT_Error || base->id!=NULL)
+ {
+ /*TODO error*/
+ push_translation_error("unexpedted id in abstract declarator",translation_data);
+ delete_denoted_prototype(prototype);
+ ret=base->type;
+ delete_denoted_base(base);
+ return ret;
+ }
+ delete_denoted_prototype(prototype);
+ ret=base->type;
+ delete_denoted_base(base);
+ return ret;
+
+ }
+
+ /*
+ initializer:
+ assignment-expression
+ { initializer , ... [,] }
+ */
+ struct AST* parse_initializer(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Object *base)
+ {
+ /*TODO add compound initialiser*/
+ return parse_assignment_expression(translation_data,scope);
+ }
+
+ const const const const const const const const const const const const const const const const const const const const const const const char const const const constant;
+ #endif
F diff --git a/frontend/parse/parse_declaration.h b/frontend/parse/parse_declaration.h new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_declaration.h
+ #ifndef GCC_PARSE_DECLARATION_H
+ #define GCC_PARSE_DECLARATION_H GCC_PARSE_DECLARATION_H
+ #include <ast.h>
+ #include <parse_expression.h>
+ #include <parse_statement.h>
+ #include <type.h>
+ #include <denoted.h>
+ #include <scope.h>
+ #include <queue.h>
+ #include <map.h>
+ #include <lexer.h>
+ #include <assert.h>
+ #include <linkage.h>
+
+
+
+ void parse_declaration(struct Translation_Data *translation_data,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions);
+ struct Denotation_Prototype* parse_specifier_qualifier_list(struct Translation_Data *translation_data,struct Scope *scope);
+ struct Denotation_Prototype* parse_declaration_specifiers(struct Translation_Data *translation_data,struct Scope *scope);
+ struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Translation_Data *translation_data,struct Scope *scope,char parse_storage_class);
+ struct Denoted* parse_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype);
+ void parse_declarator_inner(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base);
+ void parse_direct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base);
+ void parse_direct_declarator_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base);
+ void parse_struct_union_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Struct_Union *base);
+ char parse_struct_declaration(struct Translation_Data *translation_data,struct Scope *struct_scope,struct Queue* members);
+ struct Denoted* parse_struct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype);
+ void parse_enum_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Enum *enumeration);
+ void parse_paramenter_list(struct Translation_Data *translation_data,struct Normal_Scope *function_prototype_scope,struct Queue *parameters);
+ struct Type* parse_type_name(struct Translation_Data *translation_data,struct Scope *scope);
+ struct Type* parse_abstract_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype);
+ struct AST* parse_initializer(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Object *base);
+
+ #endif
F diff --git a/frontend/parse/parse_expression.c b/frontend/parse/parse_expression.c new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_expression.c
+ #ifndef GCC_PARSE_EXPR_C
+ #define GCC_PARSE_EXPR_C GCC_PARSE_EXPR_C
+ #include "parse_expression.h"
+
+
+
+ struct AST* parse_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ return parse_comma_expression(translation_data,scope);
+ }
+
+ struct AST* parse_const_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ return parse_comma_expression(translation_data,scope);
+ }
+ /*
+ primary-expression:
+ number
+ string
+ id
+ (e)
+ generic-selection
+
+ */
+ struct AST* parse_primary_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct token *hold_token;
+ struct AST *hold;
+
+ if(translation_data->tokens->size==0)
+ {
+ /*TODO error*/
+ push_translation_error("expected something here",translation_data);
+ return (struct AST*)get_error_tree(NULL);
+ }
+ hold_token=Queue_Pop(translation_data->tokens);
+ switch(hold_token->type)
+ {
+ case KW_STRING:
+ case KW_WIDE_STRING:
+ return (struct AST*)get_string_literal_tree(hold_token);
+ case KW_CHAR_CONSTANT:
+ case KW_WIDE_CHAR_CONSTANT:
+ case KW_HEXADECIMAL_CONSTANT:
+ case KW_DECIMAL_CONSTANT:
+ case KW_OCTAL_CONSTANT:
+ case KW_UNSIGNED_DECIMAL_CONSTANT:
+ case KW_UNSIGNED_OCTAL_CONSTANT:
+ case KW_UNSIGNED_HEXADECIMAL_CONSTANT:
+ case KW_UNSIGNED_LONG_HEXADECIMAL_CONSTANT:
+ case KW_UNSIGNED_LONG_OCTAL_CONSTANT:
+ case KW_UNSIGNED_LONG_DECIMAL_CONSTANT:
+ case KW_UNSIGNED_LONG_LONG_DECIMAL_CONSTANT:
+ case KW_UNSIGNED_LONG_LONG_HEXADECIMAL_CONSTANT:
+ case KW_UNSIGNED_LONG_LONG_OCTAL_CONSTANT:
+ case KW_LONG_HEXADECIMAL_CONSTANT:
+ case KW_LONG_OCTAL_CONSTANT:
+ case KW_LONG_DECIMAL_CONSTANT:
+ case KW_LONG_LONG_HEXADECIMAL_CONSTANT:
+ case KW_LONG_LONG_OCTAL_CONSTANT:
+ case KW_LONG_LONG_DECIMAL_CONSTANT:
+ case KW_DOUBLE_DECIMAL_CONSTANT:
+ case KW_LONG_DOUBLE_DECIMAL_CONSTANT:
+ case KW_FLOAT_DECIMAL_CONSTANT:
+ case KW_DOUBLE_HEXADECIMAL_CONSTANT:
+ case KW_LONG_DOUBLE_HEXADECIMAL_CONSTANT:
+ case KW_FLOAT_HEXADECIMAL_CONSTANT:
+ return (struct AST*)get_constant_tree(hold_token);
+
+ case KW_ID:
+ return (struct AST*)get_lvalue_expression_tree(hold_token,scope);
+ case KW_OPEN_NORMAL:
+ hold=parse_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ return (struct AST*)hold;
+ }else
+ {
+ /*TODO error*/
+ push_translation_error("expected ')' here",translation_data);
+ return (struct AST*)get_error_tree(hold);
+ }
+ default:
+ /*TODO error*/
+ push_translation_error("error in expression",translation_data);
+ return (struct AST*)get_error_tree(NULL);
+ }
+
+ /*just in case*/
+ assert(0);
+ return (struct AST*)get_error_tree(NULL);
+
+ }
+
+
+ /*
+ arglist:
+ (e)*\)
+
+ */
+ struct AST_Function_Expression* parse_arglist(struct Translation_Data *translation_data,struct Scope *scope,struct AST* id)
+ {
+ struct AST_Function_Expression *ret;
+ ret=get_function_expression_tree(id,scope);
+ ret->id=id;
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ return ret;
+ }
+ do
+ {
+ Queue_Push(&ret->arguments,parse_assignment_expression(translation_data,scope));
+ } while(get_and_check(translation_data,KW_COMMA));
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ return ret;
+ }else
+ {
+ push_translation_error("expected ')' here",translation_data);
+ return (struct AST_Function_Expression*)get_error_tree((struct AST*)ret);
+ }
+
+ }
+
+ /*
+ postfix_expression:
+ postfix_expression ++
+ postfix_expression --
+ postfix_expression [ expression ]
+ postfix_expression.id
+ postfix_expression->id
+ postfix_expression ( arglist )
+
+
+ primary_expression
+ postfix_expression:
+ primary_expression ( ++ | -- | \[ expression \] | .id | ->id | \( arglist \) )*
+
+ */
+ struct AST* parse_postfix_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ struct AST *hold_expr;
+
+
+ hold=parse_primary_expression(translation_data,scope);
+
+ while(translation_data->tokens->size!=0)
+ {
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_PLUSPLUS:
+ chomp(translation_data);
+ hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_INC);
+ break;
+ case KW_MINUSMINUS:
+ chomp(translation_data);
+ hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_DEC);
+ break;
+ case KW_DOT:
+ chomp(translation_data);
+ if(check(translation_data,KW_ID,0))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(translation_data->tokens),scope),OP_MEMBER);
+ }
+ break;
+ case KW_ARROW:
+ chomp(translation_data);
+ if(check(translation_data,KW_ID,0))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(translation_data->tokens),scope),OP_MEMBER_TROUGH_PTR);
+ }
+ break;
+ case KW_OPEN_SQUARE:
+
+ chomp(translation_data);
+ if(get_and_check(translation_data,KW_CLOSE_SQUARE))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,NULL,OP_ARR_SUBSCRIPT);
+ }else
+ {
+ hold_expr=parse_expression(translation_data,scope);
+ hold=(struct AST*)get_binary_expression_tree(hold,hold_expr,OP_ARR_SUBSCRIPT);
+ if(!get_and_check(translation_data,KW_CLOSE_SQUARE))
+ {
+ push_translation_error("expected ']' here",translation_data);
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ break;
+ case KW_OPEN_NORMAL:
+ chomp(translation_data);
+ return (struct AST*)parse_arglist(translation_data,scope,hold);
+ break;
+
+ default:
+ return hold;
+ }
+ }
+
+ return hold;
+ }
+
+ /*
+ cast-expression:
+ unary-expression
+ (type)cast-expression
+ */
+ struct AST* parse_cast_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST_Unary_Expression *ret;
+ if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ if(is_type(translation_data,scope))
+ {
+ ret=get_unary_expression_tree(NULL,OP_CAST);
+ ret->value_type=parse_type_name(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ ret->operand=parse_cast_expression(translation_data,scope);
+ return (struct AST*)ret;
+ }else
+ {
+ push_translation_error("expected ')' here",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)ret);
+
+ }
+
+ }else
+ {
+ ret=(struct AST_Unary_Expression*)parse_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ return (struct AST*)ret;
+ }else
+ {
+ push_translation_error("expected ')' here",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)ret);
+ }
+
+ }
+ }else
+ {
+
+ return parse_unary_expression(translation_data,scope);
+ }
+ }
+ /*
+ unary-expression:
+ ++unary-expression
+ --unary-expression
+ +unary-expression
+ -unary-expression
+ !cast-expression
+ ~cast-expression
+ *cast-expression
+ &cast-expression
+ sizeof ( typename )
+ sizeof unary-expression
+ postfix-expression
+
+ */
+
+ struct AST* parse_unary_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST_Unary_Expression *hold;
+
+ if(translation_data->tokens->size==0)
+ {
+ /*TODO error*/
+ push_translation_error("expected something here",translation_data);
+ return (struct AST*)get_error_tree(NULL);
+ }
+
+ /*TODO make it iterative*/
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_PLUSPLUS:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_unary_expression(translation_data,scope),OP_PREFIX_INC);
+ case KW_MINUSMINUS:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_unary_expression(translation_data,scope),OP_PREFIX_DEC);
+ case KW_PLUS:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_UNARY_PLUS);
+ case KW_MINUS:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_UNARY_MINUS);
+ case KW_EXCLAMATION:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_LOGICAL_NOT);
+ case KW_TILDE:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_BITWISE_NOT);
+ case KW_STAR:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_DEREFERENCE);
+ case KW_AND:
+ chomp(translation_data);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_ADDR_OF);
+ case KW_SIZEOF:
+ chomp(translation_data);
+ if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ hold=get_unary_expression_tree(NULL,OP_CAST);
+ hold->value_type=parse_type_name(translation_data,scope);
+ hold->operand=parse_unary_expression(translation_data,scope);
+ return (struct AST*)hold;
+ }else
+ {
+ return (struct AST*)get_unary_expression_tree(parse_unary_expression(translation_data,scope),OP_SIZEOF);
+ }
+ default:
+ return parse_postfix_expression(translation_data,scope);
+ }
+
+ }
+ /*
+ multiplicative-expression:
+ cast-expression ( ( * | / | % ) cast-expression )*
+ */
+ struct AST* parse_multiplicative_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_cast_expression(translation_data,scope);
+ while(translation_data->tokens->size!=0)
+ {
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_STAR:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(translation_data,scope),OP_MUL);
+ break;
+ case KW_FORWARD_SLASH:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(translation_data,scope),OP_DIV);
+ break;
+ case KW_PERCENT:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(translation_data,scope),OP_REMAINDER);
+ break;
+ default:
+ return hold;
+ }
+ }
+
+ return hold;
+ }
+ /*
+ additive-expression:
+ multiplicative-expression ( ( + | - ) multiplicative )*
+ */
+ struct AST* parse_additive_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_multiplicative_expression(translation_data,scope);
+
+ while(translation_data->tokens->size!=0)
+ {
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_PLUS:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(translation_data,scope),OP_ADDITION);
+ break;
+ case KW_MINUS:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(translation_data,scope),OP_SUBTRACTION);
+ break;
+ default:
+ return hold;
+ }
+ }
+
+ return hold;
+ }
+ /*
+ bitwise-shift:
+ additive-expression ( ( << | >> ) additive-expression)*
+ */
+ struct AST* parse_shift_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_additive_expression(translation_data,scope);
+
+ while(translation_data->tokens->size!=0)
+ {
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_SHIFT_LEFT:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(translation_data,scope),OP_SHIFT_LEFT);
+ break;
+ case KW_SHIFT_RIGHT:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(translation_data,scope),OP_SHIFT_RIGHT);
+ break;
+ default:
+ return hold;
+ }
+ }
+ return hold;
+ }
+
+ /*
+ relational-expression:
+ shift-expression ( ( < | > | <= | >= ) shift-expression )*
+ */
+
+ struct AST* parse_relational_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_shift_expression(translation_data,scope);
+
+ while(translation_data->tokens->size!=0)
+ {
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_LESS:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_LESS);
+ break;
+ case KW_LESS_EQ:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_LESS_EQ);
+ break;
+ case KW_MORE:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_GREATER);
+ break;
+ case KW_MORE_EQ:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_GREATER_EQ);
+ break;
+ default:
+ return hold;
+ }
+ }
+ return hold;
+ }
+
+
+ /*
+ equality-expression:
+ realtional-expression ( ( == | != ) relational-expression )*
+ */
+ struct AST* parse_equality_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_relational_expression(translation_data,scope);
+
+ while(translation_data->tokens->size!=0)
+ {
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_EQEQ:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(translation_data,scope),OP_EQUAL);
+ break;
+ case KW_NOT_EQ:
+ chomp(translation_data);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(translation_data,scope),OP_NOT_EQUAL);
+ break;
+ default:
+ return hold;
+ }
+ }
+ return hold;
+ }
+ /*
+ and-expression:
+ equality-expression ( & equality-expression ) *
+ */
+ struct AST* parse_and_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_equality_expression(translation_data,scope);
+ while(get_and_check(translation_data,KW_AND))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_equality_expression(translation_data,scope),OP_BITWISE_AND);
+ }
+ return hold;
+ }
+ /*
+ exclusive-or-expression:
+ and-expression (^ and-expression)*
+
+ */
+ struct AST* parse_exclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_and_expression(translation_data,scope);
+ while(get_and_check(translation_data,KW_HAT))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_and_expression(translation_data,scope),OP_BITWISE_XOR);
+ }
+ return hold;
+
+ }
+ /*
+ inclusive-or-expression:
+ exclusive-or-expression (|exclusive-or-expression)*
+ */
+ struct AST* parse_inclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_exclusive_or_expression(translation_data,scope);
+ while(get_and_check(translation_data,KW_PIPE))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_exclusive_or_expression(translation_data,scope),OP_BITWISE_OR);
+ }
+ return hold;
+ }
+ /*
+ logical-and-expression:
+ inclusive-or-expression(&&inclusive-or-expression)*
+ */
+ struct AST* parse_logical_and_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_inclusive_or_expression(translation_data,scope);
+ while(get_and_check(translation_data,KW_AND_AND))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_inclusive_or_expression(translation_data,scope),OP_LOGICAL_AND);
+ }
+ return hold;
+ }
+ /*
+ logical-or-expression:
+ logical-and-expression ( || logical-and-expression )*
+ */
+ struct AST* parse_logical_or_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_logical_and_expression(translation_data,scope);
+ while(get_and_check(translation_data,KW_PIPE_PIPE))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_logical_and_expression(translation_data,scope),OP_LOGICAL_OR);
+ }
+ return hold;
+ }
+
+ /*
+ conditional-expression:
+ logical-or-expression
+ logical-or-expression?expression:conditional-expression
+ */
+ struct AST* parse_conditional_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_logical_or_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_QUESTION))
+ {
+ hold=(struct AST*)get_conditional_expression_tree(hold,parse_expression(translation_data,scope),NULL);
+ if(get_and_check(translation_data,KW_COLUMN))
+ {
+ ((struct AST_Conditional_Expression*)hold)->right=parse_conditional_expression(translation_data,scope);
+ return hold;
+ }else
+ {
+ push_translation_error("expected ':' here",translation_data);
+ return (struct AST*)get_error_tree(hold);
+ }
+ }else
+ {
+ return hold;
+ }
+ }
+ /*
+ assignment-expression:
+ conditional-expression
+ unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
+ */
+ struct AST* parse_assignment_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+
+ if(translation_data->tokens->size==0)
+ {
+ /*TODO error*/
+ push_translation_error("expected something here",translation_data);
+ return (struct AST*)get_error_tree(NULL);
+ }
+
+ hold=parse_conditional_expression(translation_data,scope);
+ if(translation_data->tokens->size==0)
+ return hold;
+ /*TODO make it iterative*/
+ switch(((struct token*)translation_data->tokens->first->data)->type)
+ {
+ case KW_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_ASSIGN);
+ case KW_PLUS_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_ADD_ASSIGN);
+ case KW_MINUS_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_SUBTRACT_ASSIGN);
+ case KW_PERCENT_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_REMAINDER_ASSIGN);
+ case KW_DIV_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_DIV_ASSIGN);
+ case KW_STAR_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_MULTIPLY_ASSIGN);
+ case KW_SHIFT_RIGHT_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_SHIFT_RIGHT_ASSIGN);
+ case KW_SHIFT_LEFT_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_SHIFT_LEFT_ASSIGN);
+ case KW_AND_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_AND_ASSIGN);
+ case KW_PIPE_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_PIPE_ASSIGN);
+ case KW_HAT_EQ:
+ chomp(translation_data);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_XOR_ASSIGN);
+ default:
+ return hold;
+ }
+
+ }
+ /*
+ comma-expression:
+ assignment-expression(,assignment-expression)*
+ */
+ struct AST* parse_comma_expression(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_assignment_expression(translation_data,scope);
+ while(get_and_check(translation_data,KW_COMMA))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_COMMA);
+ }
+ return hold;
+ }
+
+ #endif
F diff --git a/frontend/parse/parse_expression.h b/frontend/parse/parse_expression.h new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_expression.h
+ #ifndef GCC_PARSE_EXPR_H
+ #define GCC_PARSE_EXPR_H GCC_PARSE_EXPR_H
+ #include <chonky.h>
+ #include <queue.h>
+ #include <lexer.h>
+ #include <parse_declaration.h>
+ #include <ast.h>
+ #include <limits.h>
+
+
+ struct AST* parse_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_const_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_primary_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+
+ struct AST_Function_Expression* parse_arglist(struct Translation_Data *translation_data,struct Scope *scope,struct AST* id);
+ struct AST* parse_postfix_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+ struct AST* parse_cast_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_unary_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+ struct AST* parse_multiplicative_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+ struct AST* parse_additive_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+ struct AST* parse_shift_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+
+ struct AST* parse_relational_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_equality_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_and_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_exclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_inclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_logical_and_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_logical_or_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_conditional_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_assignment_expression(struct Translation_Data *translation_data,struct Scope *scope);
+ struct AST* parse_comma_expression(struct Translation_Data *translation_data,struct Scope *scope);
+
+
+
+
+
+ /*
+
+ expression:
+ e15
+ comma-expression:
+ assignment-expression(,assignment-expression)*
+
+ assignment-expression:
+ unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
+
+ conditional-expression:
+ logical-or-expression
+ logical-or-expression?expression:conditional-expression
+ logical-or-expression:
+ logical-and-expression ( || logical-and-expression )*
+ logical-and-expression:
+ inclusive-or-expression(&&inclusive-or-expression)*
+ inclusive-or-expression:
+ exclusive-or-expression (|exclusive-or-expression)*
+ exclusive-or-expression:
+ and-expression (^ and-expression)*
+ and-expression:
+ equality-expression ( & equality-expression ) *
+ equality-expression:
+ realtional-expression ( ( == | != ) relational-expression )*
+ relational-expression:
+ shift-expression ( ( < | > | <= | >= ) shift-expression )*
+
+ shift-expression:
+ additive-expression ( ( << | >> ) additive-expression)*
+
+ additive-expression:
+ multiplicative-expression ( ( + | - ) multiplicative-expression )*
+
+ multiplicative-expression:
+ cast-expression ( ( * | / | % ) cast-expression )*
+
+ unary-expression:
+ ++unary-expression
+ --unary-expression
+ +unary-expression
+ -unary-expression
+ !cast-expression
+ ~cast-expression
+ *cast-expression
+ &cast-expression
+ sizeof ( typename )
+ sizeof unary-expression
+ postfix-expression
+
+ cast-expression:
+ unary-expression
+ (type)cast-expression
+
+
+ arglist:
+ epsilon
+ assignment-expression-list(,assignment-expression-list)*
+ postfix_expression:
+ postfix_expression ++
+ postfix_expression --
+ postfix_expression [ expression ]
+ postfix_expression.id
+ postfix_expression->id
+ postfix_expression ( arglist )
+
+
+ primary_expression
+
+ primary-expression:
+ number
+ string
+ id
+ (e)
+
+ */
+
+
+ #endif
F diff --git a/frontend/parse/parse_statement.c b/frontend/parse/parse_statement.c new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_statement.c
+ #ifndef PARSE_GCC_STATEMENT_C
+ #define PARSE_GCC_STATEMENT_C PARSE_GCC_STATEMENT_C
+ #include "parse_statement.h"
+
+
+ struct AST* parse_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+
+ if(translation_data->tokens->size==0)
+ return NULL;
+
+
+
+ switch(kw_get(translation_data))
+ {
+ case KW_NOTYPE:
+ push_translation_error("statement expected",translation_data);
+ return (struct AST*)get_error_tree(NULL);
+
+ case KW_OPEN_CURLY:
+ chomp(translation_data);
+ return parse_finish_compound_statement(translation_data,scope);
+ case KW_IF:
+ chomp(translation_data);
+ return parse_finish_if_statement(translation_data,scope);
+ case KW_SWITCH:
+ chomp(translation_data);
+ return parse_finish_switch_statement(translation_data,scope);
+ case KW_WHILE:
+ chomp(translation_data);
+ return parse_finish_while_statement(translation_data,scope);
+ case KW_DO:
+ chomp(translation_data);
+ return parse_finish_do_while_statement(translation_data,scope);
+ case KW_FOR:
+ chomp(translation_data);
+ return parse_finish_for_statement(translation_data,scope);
+ case KW_GOTO:
+ chomp(translation_data);
+ return parse_finish_goto_statement(translation_data,scope);
+ case KW_CASE:
+ chomp(translation_data);
+ return parse_finish_labeled_statement(translation_data,scope,ST_CASE);
+ case KW_DEFAULT:
+ chomp(translation_data);
+ return parse_finish_default_statement(translation_data,scope);
+ case KW_ID:
+ /*TODO check if id is in function scope*/
+ if(0)
+ {
+ return parse_finish_labeled_statement(translation_data,scope,ST_LABEL);
+ }else
+ {
+ return parse_expression_statement(translation_data,scope);
+ }
+ case KW_CONTINUE:
+ chomp(translation_data);
+ return parse_finish_continue_statement(translation_data);
+ case KW_BREAK:
+ chomp(translation_data);
+ return parse_finish_break_statement(translation_data);
+ case KW_RETURN:
+ chomp(translation_data);
+ return parse_finish_return_statement(translation_data,scope);
+ default:
+ return parse_expression_statement(translation_data,scope);
+
+ }
+
+ }
+ /*
+ ( declaration | statement )* }
+ */
+ struct AST* parse_finish_compound_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_Compound_Statement *hold;
+ hold=get_compound_statement_tree(scope);
+ while(!get_and_check(translation_data,KW_CLOSE_CURLY) && !has_no_tokens(translation_data))
+ {
+ if(is_type(translation_data,hold->scope))
+ {
+ parse_declaration(translation_data,hold->scope,&hold->components,0);
+ }else
+ {
+ Queue_Push(&hold->components,parse_statement(translation_data,hold->scope));
+ }
+ if(has_new_errors(translation_data))
+ chase_next_semicolumn(translation_data);
+ }
+
+ return (struct AST*)hold;
+ }
+ /*
+ ( expression ) statement
+ ( expression ) statement else statement
+ */
+ struct AST* parse_finish_if_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_If_Statement *hold;
+ hold=get_if_statement_tree();
+ if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ hold->body_statement=parse_statement(translation_data,scope);
+ }else
+ {
+ push_translation_error(" ')' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ if(get_and_check(translation_data,KW_ELSE))
+ {
+ hold->else_statement=parse_statement(translation_data,scope);
+ return (struct AST*)hold;
+ }else
+ {
+ hold->else_statement=NULL;
+ return (struct AST*)hold;
+ }
+ }else
+ {
+ push_translation_error(" '(' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ return (struct AST*)hold;
+ }
+ /*
+ ( expression ) statement
+ */
+ struct AST* parse_finish_switch_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_Switch_Statement *hold;
+ hold=get_switch_statement_tree();
+ if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ hold->body_statement=parse_statement(translation_data,scope);
+ }else
+ {
+ push_translation_error(" ')' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }else
+ {
+ push_translation_error(" '(' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ return (struct AST*)hold;
+ }
+ /*
+ ( expression ) statement
+
+ */
+ struct AST* parse_finish_while_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_While_Statement *hold;
+ hold=get_while_statement_tree();
+ if(get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ hold->body_statement=parse_statement(translation_data,scope);
+ }else
+ {
+ push_translation_error(" ')' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }else
+ {
+ push_translation_error(" '(' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ return (struct AST*)hold;
+ }
+ /*
+ statement while ( expression ) ;
+ */
+ struct AST* parse_finish_do_while_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_Do_While_Statement *hold;
+ hold=get_do_while_statement_tree();
+ hold->body_statement=parse_statement(translation_data,scope);
+ if(get_and_check(translation_data,KW_WHILE) && get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(translation_data,scope);
+
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL) && get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ return (struct AST*)hold;
+ }else
+ {
+ push_translation_error(" ';' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }else
+ {
+ push_translation_error("'do-while' statement is unfinished",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ }
+ /*
+ ( [ expression ] ; [ expression ] ; [ expression ] ) statement
+ */
+ struct AST* parse_finish_for_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_For_Statement *hold;
+ hold=get_for_statement_tree();
+ if(!get_and_check(translation_data,KW_OPEN_NORMAL))
+ {
+ push_translation_error(" '(' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ hold->initialisation=parse_expression_statement(translation_data,scope);
+ hold->condition=parse_expression_statement(translation_data,scope);
+ if(get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ hold->update=get_nop_tree();
+ }else
+ {
+ hold->update=parse_expression(translation_data,scope);
+ if(!get_and_check(translation_data,KW_CLOSE_NORMAL))
+ {
+ push_translation_error(" ')' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }
+ hold->body_statement=parse_statement(translation_data,scope);
+ return (struct AST*)hold;
+ }
+ /*
+ id ;
+ */
+ struct AST* parse_finish_goto_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST* ret;
+
+ if(check(translation_data,KW_ID,0))
+ {
+ ret=(struct AST*)get_goto_statement_tree(Queue_Pop(translation_data->tokens),scope);
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ return ret;
+ }else
+ {
+ push_translation_error(" ';' expected",translation_data);
+ return (struct AST*)get_error_tree(ret);
+ }
+ }
+ else
+ {
+ push_translation_error(" label expected in goto statement",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)get_goto_statement_tree(NULL,NULL));
+ }
+
+ }
+ /*
+ ;
+ */
+ struct AST* parse_finish_continue_statement(struct Translation_Data* translation_data)
+ {
+ struct AST *hold;
+ hold=malloc(sizeof(struct AST));
+ hold->type=ST_CONTINUE;
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ return hold;
+ }else
+ {
+ push_translation_error(" ';' expected",translation_data);
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ /*
+ ;
+ */
+ struct AST* parse_finish_break_statement(struct Translation_Data* translation_data)
+ {
+ struct AST *hold;
+ hold=malloc(sizeof(struct AST));
+ hold->type=ST_BREAK;
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ return hold;
+ }else
+ {
+ push_translation_error(" ';' expected",translation_data);
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ /*
+ id:
+ statement
+ */
+ struct AST* parse_finish_labeled_statement(struct Translation_Data* translation_data,struct Scope *scope,enum AST_Type type)
+ {
+ struct AST_Labeled_Statement *ret;
+ if(check(translation_data,KW_ID,0))
+ {
+ ret=get_labeled_statement_tree(Queue_Pop(translation_data->tokens),NULL,type);
+ if(get_and_check(translation_data,KW_COLUMN))
+ {
+ ret->statement=parse_statement(translation_data,scope);
+ return (struct AST*)ret;
+ }else
+ {
+ push_translation_error(" ':' expected in labeled statement",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)ret);
+ }
+ }else
+ {
+ push_translation_error(" label expected in labeled statement",translation_data);
+ return (struct AST*)get_error_tree(NULL);
+ }
+ }
+ /*
+ :
+ statement
+ */
+ struct AST* parse_finish_default_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_Labeled_Statement *ret;
+ ret=get_labeled_statement_tree(NULL,NULL,ST_DEFAULT);
+ if(get_and_check(translation_data,KW_COLUMN))
+ {
+ ret->statement=parse_statement(translation_data,scope);
+ return (struct AST*)ret;
+ }else
+ {
+ push_translation_error(" ':' expected in default statement",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)ret);
+ }
+ }
+ /*
+ [ expression ] ;
+
+ */
+ struct AST* parse_finish_return_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST_Return_Statement *hold;
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ hold=get_return_statement_tree(get_nop_tree());
+ return (struct AST*)hold;
+ }
+
+
+ hold=get_return_statement_tree(parse_expression(translation_data,scope));
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ return (struct AST*)hold;
+ }else
+ {
+ push_translation_error(" ';' expected",translation_data);
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }
+ /*
+
+ [ expression ] ;
+
+ */
+ struct AST* parse_expression_statement(struct Translation_Data* translation_data,struct Scope *scope)
+ {
+ struct AST *hold;
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ hold=get_nop_tree();
+ return (struct AST*)hold;
+ }
+ hold=parse_expression(translation_data,scope);
+ if(get_and_check(translation_data,KW_SEMI_COLUMN))
+ {
+ return hold;
+ }else
+ {
+ push_translation_error(" ';' expected",translation_data);
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ void chase_next_semicolumn(struct Translation_Data *translation_data)
+ {
+ /*chase ; and start parsing next declaration*/
+ while(!get_and_check(translation_data,KW_SEMI_COLUMN) && !check(translation_data,KW_CLOSE_CURLY,0) &&
+ translation_data->tokens->size>0)
+ {
+ chomp(translation_data);
+ }
+ }
+ #endif
F diff --git a/frontend/parse/parse_statement.h b/frontend/parse/parse_statement.h new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_statement.h
+ #ifndef PARSE_GCC_STATEMENT_H
+ #define PARSE_GCC_STATEMENT_H PARSE_GCC_STATEMENT_H
+ #include <scope.h>
+ #include <ast.h>
+ #include <queue.h>
+ #include <program.h>
+
+
+ struct AST* parse_finish_compound_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_op_e_cl_st(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_if_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_switch_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_do_while_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_while_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_for_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_goto_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_continue_statement(struct Translation_Data* translation_data);
+ struct AST* parse_finish_break_statement(struct Translation_Data* translation_data);
+ struct AST* parse_finish_return_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_expression_statement(struct Translation_Data* translation_data,struct Scope *scope);
+ struct AST* parse_finish_labeled_statement(struct Translation_Data* translation_data,struct Scope *scope,enum AST_Type type);
+ struct AST* parse_finish_default_statement(struct Translation_Data* translation_data,struct Scope *scope);
+
+ void chase_next_semicolumn(struct Translation_Data *translation_data);
+
+
+ #endif
F diff --git a/frontend/parse/parse_translation_unit.c b/frontend/parse/parse_translation_unit.c new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_translation_unit.c
+ #ifndef GCC_PARSE_TRANSLATION_C
+ #define GCC_PARSE_TRANSLATION_C GCC_PARSE_TRANSLATION_C
+ #include <parse_translation_unit.h>
+ #include <gcc_error.h>
+ /*
+ translation-unit:
+ declaration [ translation-unit ]
+ function-definition [ translation-unit ]
+ */
+ struct AST* parse_translation_unit(struct Translation_Data *translation_data)
+ {
+ size_t loop_preventer;
+ struct AST_Translation_Unit *hold;
+ hold=get_translation_unit_tree();
+
+ loop_preventer=0;
+ while(translation_data->tokens->size>0 && loop_preventer!=translation_data->tokens->size)
+ {
+ loop_preventer=translation_data->tokens->size;
+
+ if(is_type(translation_data,hold->file_scope) || kw_get(translation_data)==KW_ID)
+ {
+ parse_declaration(translation_data,hold->file_scope,&hold->components,1);
+ if(has_new_errors(translation_data))
+ {
+ chase_next_semicolumn(translation_data);
+ }
+ }else
+ {
+ push_translation_error("declaration expected",translation_data);
+ chase_next_semicolumn(translation_data);
+ }
+ }
+ return (struct AST*)hold;
+
+ }
+
+ #endif
F diff --git a/frontend/parse/parse_translation_unit.h b/frontend/parse/parse_translation_unit.h new file mode 100644 --- /dev/null +++ b/frontend/parse/parse_translation_unit.h
+ #ifndef GCC_PARSE_TRANSLATION_H
+ #define GCC_PARSE_TRANSLATION_H GCC_PARSE_TRANSLATION_H
+ #include <parse_declaration.h>
+ #include <parse_statement.h>
+ #include <error.h>
+
+ struct AST* parse_translation_unit(struct Translation_Data *translation_data);
+
+ #endif
F diff --git a/frontend/semantics/ast.c b/frontend/semantics/ast.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/ast.c
+ #ifndef GCC_AST_C
+ #define GCC_AST_C GCC_AST_C
+ #include <ast.h>
+
+ struct AST_Error* get_error_tree(struct AST *error)
+ {
+ struct AST_Error *ret;
+ ret=malloc(sizeof(struct AST_Error));
+ ret->type=ERROR;
+ ret->error=error;
+ return ret;
+ }
+ struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error)
+ {
+
+ struct AST_Declaration_Error *ret;
+ ret=malloc(sizeof(struct AST_Declaration_Error));
+ ret->type=ERROR_DECLARATION;
+ ret->error=error;
+ return ret;
+ }
+
+ struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type)
+ {
+ struct AST_Binary_Expression *ret;
+ ret=malloc(sizeof(struct AST_Binary_Expression));
+ ret->type=type;
+ ret->left=left;
+ ret->right=right;
+
+ return ret;
+ }
+ struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right)
+ {
+ struct AST_Conditional_Expression *ret;
+ ret=malloc(sizeof(struct AST_Conditional_Expression));
+ ret->type=OP_COND;
+ ret->left=left;
+ ret->center=center;
+ ret->right=right;
+ return ret;
+ }
+
+ struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope)
+ {
+ struct AST_Function_Expression *ret;
+ ret=malloc(sizeof(struct AST_Function_Expression));
+ ret->type=OP_FUNCTION;
+ ret->id=id;
+ Queue_Init(&ret->arguments);
+ return ret;
+ }
+ struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type)
+ {
+
+ struct AST_Unary_Expression *ret;
+ ret=malloc(sizeof(struct AST_Unary_Expression));
+ ret->operand=operand;
+ ret->type=type;
+
+ return ret;
+ }
+ struct AST_Constant* get_constant_tree(struct token *constant)
+ {
+ struct AST_Constant *ret;
+ ret=malloc(sizeof(struct AST_Constant));
+ ret->type=OP_CONSTANT;
+ ret->value=NULL;
+ ret->value_type=NULL;
+ /*TODO*/
+
+ free(constant);
+ return ret;
+
+ }
+ struct AST_String_Literal* get_string_literal_tree(struct token *string)
+ {
+ struct AST_String_Literal *ret;
+ ret=malloc(sizeof(struct AST_Constant));
+ ret->type=OP_STRING_LITERAL;
+ ret->string=string;
+
+ return ret;
+ }
+ struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope)
+ {
+ struct AST_Lvalue_Expression *ret;
+ ret=malloc(sizeof(struct AST_Lvalue_Expression));
+ ret->type=OP_LVALUE;
+ ret->lvalue=NULL;
+ return ret;
+ }
+
+
+
+
+
+ struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,enum AST_Type type)
+ {
+ struct AST_Labeled_Statement *ret;
+ ret=malloc(sizeof(struct AST_Labeled_Statement));
+ ret->type=type;
+ ret->label=label;
+ ret->statement=statement;
+
+ return ret;
+ }
+ struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope)
+ {
+ struct AST_Compound_Statement *ret;
+ ret=malloc(sizeof(struct AST_Compound_Statement));
+ ret->type=ST_COMPOUND;
+ Queue_Init(&ret->components);
+ ret->scope=get_normal_scope(parent_scope,BLOCK_SCOPE);
+ return ret;
+ }
+ struct AST_If_Statement* get_if_statement_tree()
+ {
+ struct AST_If_Statement *ret;
+ ret=malloc(sizeof(struct AST_If_Statement));
+ ret->type=ST_IF;
+
+ return ret;
+ }
+ struct AST_Switch_Statement* get_switch_statement_tree()
+ {
+ struct AST_Switch_Statement *ret;
+ ret=malloc(sizeof(struct AST_Switch_Statement));
+ ret->type=ST_SWITCH;
+ return ret;
+ }
+ struct AST_While_Statement* get_while_statement_tree()
+ {
+ struct AST_While_Statement *ret;
+ ret=malloc(sizeof(struct AST_While_Statement));
+ ret->type=ST_WHILE;
+ return ret;
+ }
+ struct AST_Do_While_Statement* get_do_while_statement_tree()
+ {
+ struct AST_Do_While_Statement *ret;
+ ret=malloc(sizeof(struct AST_Do_While_Statement));
+ ret->type=ST_DO_WHILE;
+ return ret;
+ }
+
+ struct AST_For_Statement* get_for_statement_tree()
+ {
+ struct AST_For_Statement *ret;
+ ret=malloc(sizeof(struct AST_For_Statement));
+ ret->type=ST_FOR;
+ return ret;
+ }
+ struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression)
+ {
+ struct AST_Return_Statement *ret;
+ ret=malloc(sizeof(struct AST_If_Statement));
+ ret->type=ST_RETURN;
+ ret->return_expression=return_expression;
+ return ret;
+ }
+
+ struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope)
+ {
+ struct AST_Goto_Statement *ret;
+ ret=malloc(sizeof(struct AST_Goto_Statement));
+ ret->type=ST_GOTO;
+ ret->label=label;
+ return ret;
+ }
+
+
+ struct AST* get_nop_tree()
+ {
+ struct AST* ret;
+ ret=malloc(sizeof(struct AST*));
+ ret->type=OP_NOP;
+ return ret;
+ }
+
+
+
+ struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition)
+ {
+ struct AST_Type_Definition *ret;
+ ret=malloc(sizeof(struct AST_Type_Definition));
+ ret->type=ST_TYPE_DEFINITION;
+ ret->definition=definition;
+
+ return ret;
+
+ }
+ struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object)
+ {
+ struct AST_Object_Declaration *ret;
+ ret=malloc(sizeof(struct AST_Object_Declaration));
+ ret->type=ST_OBJECT_DECLARATION;
+ ret->object=object;
+ return ret;
+ }
+
+ struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function)
+ {
+ struct AST_Function_Definition *ret;
+ ret=malloc(sizeof(struct AST_Function_Definition));
+ ret->type=ST_FUNCTION_DEFINITION;
+ ret->function=function;
+ return ret;
+ }
+
+ struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function)
+ {
+ struct AST_Function_Declaration *ret;
+ ret=malloc(sizeof(struct AST_Function_Declaration));
+ ret->type=ST_FUNCTION_DECLARATION;
+ ret->function=function;
+ return ret;
+ }
+ struct AST_Translation_Unit* get_translation_unit_tree()
+ {
+ struct AST_Translation_Unit *ret;
+ ret=malloc(sizeof(struct AST_Translation_Unit));
+
+ ret->internal_linkage=get_linkage();
+ ret->file_scope=get_normal_scope(NULL,FILE_SCOPE);
+
+
+
+ Queue_Init(&ret->components);
+ Queue_Init(&ret->static_objects);
+ ret->type=TRANSLATION_UNIT;
+
+ return ret;
+ }
+
+
+ void delete_ast(struct AST* ast)
+ {
+ switch(ast->type)
+ {
+ case OP_COMMA:
+ case OP_ADDITION:
+ case OP_SUBTRACTION:
+ case OP_MUL:
+ case OP_DIV:
+ case OP_REMAINDER:
+ case OP_ASSIGN:
+ case OP_ADD_ASSIGN:
+ case OP_SUBTRACT_ASSIGN:
+ case OP_MULTIPLY_ASSIGN:
+ case OP_REMAINDER_ASSIGN:
+ case OP_DIV_ASSIGN:
+ case OP_SHIFT_LEFT_ASSIGN:
+ case OP_AND_ASSIGN:
+ case OP_SHIFT_RIGHT_ASSIGN:
+ case OP_XOR_ASSIGN:
+ case OP_PIPE_ASSIGN:
+ case OP_LOGICAL_AND:
+ case OP_LOGICAL_OR:
+ case OP_BITWISE_OR:
+ case OP_BITWISE_AND:
+ case OP_BITWISE_XOR:
+ case OP_MEMBER_TROUGH_PTR:
+ case OP_MEMBER:
+ case OP_ARR_SUBSCRIPT:
+ case OP_SHIFT_LEFT:
+ case OP_LESS_EQ:
+ case OP_NOT_EQUAL:
+ case OP_EQUAL:
+ case OP_GREATER:
+ case OP_LESS:
+ case OP_GREATER_EQ:
+ case OP_SHIFT_RIGHT:
+ delete_ast_binary_expression((struct AST_Binary_Expression*)ast);
+ break;
+ case OP_COND:
+ delete_ast_conditional_expression((struct AST_Conditional_Expression*)ast);
+ break;
+ case OP_FUNCTION:
+ delete_ast_function_expression((struct AST_Function_Expression*)ast);
+ break;
+ case OP_NOP:
+ /*it is just a ast node*/
+ free(ast);
+ break;
+ case OP_LOGICAL_NOT:
+ case OP_BITWISE_NOT:
+ case OP_ADDR_OF:
+ case OP_DEREFERENCE:
+ case OP_POSTFIX_INC:
+ case OP_POSTFIX_DEC:
+ case OP_PREFIX_INC:
+ case OP_PREFIX_DEC:
+ case OP_UNARY_PLUS:
+ case OP_UNARY_MINUS:
+ case OP_CAST:
+ case OP_SIZEOF:
+ delete_ast_unary_expression((struct AST_Unary_Expression*)ast);
+ break;
+ case OP_LVALUE:
+ delete_ast_lvalue_expression((struct AST_Lvalue_Expression*)ast);
+ break;
+ case OP_CONSTANT:
+ delete_ast_constant((struct AST_Constant*)ast);
+ break;
+ case OP_STRING_LITERAL:
+ delete_ast_string_literal((struct AST_String_Literal*)ast);
+ break;
+ case ST_COMPOUND:
+ delete_ast_compound_statement((struct AST_Compound_Statement*)ast);
+ break;
+ case ST_SWITCH:
+ delete_ast_switch_statement((struct AST_Switch_Statement*)ast);
+ break;
+ case ST_IF:
+ delete_ast_if_statemtent((struct AST_If_Statement*)ast);
+ break;
+ case ST_WHILE:
+ delete_ast_while_statemtent((struct AST_While_Statement*)ast);
+ break;
+ case ST_DO_WHILE:
+ delete_ast_do_while_statement((struct AST_Do_While_Statement*)ast);
+ break;
+ case ST_GOTO:
+ delete_ast_goto_statemtent((struct AST_Goto_Statement*)ast);
+ break;
+ case ST_LABEL:
+ case ST_CASE:
+ delete_ast_labeled_statement((struct AST_Labeled_Statement*)ast);
+ break;
+ case ST_DEFAULT:
+ case ST_CONTINUE:
+ case ST_BREAK:
+ /*I think it doesnt come with anything*/
+ free(ast);
+ break;
+ case ST_RETURN:
+ delete_ast_return_statement((struct AST_Return_Statement*)ast);
+ break;
+ case ST_FOR:
+ delete_ast_for_statement((struct AST_For_Statement*)ast);
+ break;
+ case ST_OBJECT_DECLARATION:
+ delete_ast_object_declaration((struct AST_Object_Declaration*)ast);
+ break;
+ case ST_TYPE_DEFINITION:
+ delete_ast_type_definition((struct AST_Type_Definition*)ast);
+ break;
+ case ST_FUNCTION_DEFINITION:
+ delete_ast_function_definition((struct AST_Function_Definition*)ast);
+ break;
+ case ST_FUNCTION_DECLARATION:
+ delete_ast_function_declaration((struct AST_Function_Declaration*)ast);
+ break;
+ case TRANSLATION_UNIT:
+ delete_ast_translation_unit((struct AST_Translation_Unit*)ast);
+ break;
+ case ERROR:
+ delete_ast_error((struct AST_Error*)ast);
+ break;
+ case ERROR_DECLARATION:
+ delete_ast_declaration_error((struct AST_Declaration_Error*)ast);
+ break;
+ default:
+ assert(0);
+ }
+ }
+ void delete_ast_error(struct AST_Error *error)
+ {
+ if(error->error!=NULL)
+ delete_ast(error->error);
+ free(error);
+ }
+ void delete_ast_declaration_error(struct AST_Declaration_Error *error)
+ {
+ if(error->error!=NULL)
+ delete_denoted_error((struct Denoted_Error*)error->error);
+ free(error);
+ }
+ void delete_ast_binary_expression(struct AST_Binary_Expression *binary_expression)
+ {
+ if(binary_expression->left!=NULL)
+ delete_ast(binary_expression->left);
+ if(binary_expression->right!=NULL)
+ delete_ast(binary_expression->right);
+
+ free(binary_expression);
+ }
+ void delete_ast_conditional_expression(struct AST_Conditional_Expression *cond_expression)
+ {
+
+ if(cond_expression->left!=NULL)
+ delete_ast(cond_expression->left);
+ if(cond_expression->center!=NULL)
+ delete_ast(cond_expression->center);
+ if(cond_expression->right!=NULL)
+ delete_ast(cond_expression->right);
+
+ free(cond_expression);
+ }
+ void delete_ast_function_expression(struct AST_Function_Expression *function_expression)
+ {
+ struct Queue_Node *it;
+ if(function_expression->id!=NULL)
+ delete_ast(function_expression->id);
+ while(function_expression->arguments.size>0)
+ delete_ast(Queue_Pop(&function_expression->arguments));
+
+ free(function_expression);
+
+ }
+ void delete_ast_lvalue_expression(struct AST_Lvalue_Expression *lval_expression)
+ {
+ free(lval_expression);
+ }
+ void delete_ast_unary_expression(struct AST_Unary_Expression *unary_expression)
+ {
+ if(unary_expression->operand!=NULL)
+ delete_ast(unary_expression->operand);
+ free(unary_expression);
+ }
+ void delete_ast_labeled_statement(struct AST_Labeled_Statement *labeled_statement)
+ {
+ if(labeled_statement->label!=NULL)
+ free(labeled_statement->label);
+ if(labeled_statement->statement!=NULL)
+ delete_ast(labeled_statement->statement);
+ free(labeled_statement);
+ }
+ void delete_ast_compound_statement(struct AST_Compound_Statement *compound_statement)
+ {
+ if(compound_statement->scope!=NULL)
+ delete_scope(compound_statement->scope);
+ while(compound_statement->components.size>0)
+ delete_ast((struct AST*)Queue_Pop(&compound_statement->components));
+ free(compound_statement);
+ }
+ void delete_ast_for_statement(struct AST_For_Statement *for_statement)
+ {
+ if(for_statement->condition!=NULL)
+ delete_ast(for_statement->condition);
+ if(for_statement->initialisation!=NULL)
+ delete_ast(for_statement->initialisation);
+ if(for_statement->update!=NULL)
+ delete_ast(for_statement->update);
+ if(for_statement->body_statement!=NULL)
+ delete_ast(for_statement->body_statement);
+ free(for_statement);
+ }
+ void delete_ast_while_statemtent(struct AST_While_Statement *while_statement)
+ {
+ if(while_statement->condition!=NULL)
+ delete_ast(while_statement->condition);
+ if(while_statement->body_statement!=NULL)
+ delete_ast(while_statement->body_statement);
+ free(while_statement);
+ }
+ void delete_ast_do_while_statement(struct AST_Do_While_Statement *do_while_statement)
+ {
+ if(do_while_statement->condition!=NULL)
+ delete_ast(do_while_statement->condition);
+ if(do_while_statement->body_statement!=NULL)
+ delete_ast(do_while_statement->body_statement);
+ free(do_while_statement);
+ }
+ void delete_ast_if_statemtent(struct AST_If_Statement *if_statement)
+ {
+ if(if_statement->condition!=NULL)
+ delete_ast(if_statement->condition);
+ if(if_statement->body_statement!=NULL)
+ delete_ast(if_statement->body_statement);
+ if(if_statement->else_statement!=NULL)
+ delete_ast(if_statement->else_statement);
+ free(if_statement);
+ }
+ void delete_ast_goto_statemtent(struct AST_Goto_Statement *goto_statement)
+ {
+ if(goto_statement->label!=NULL)
+ free(goto_statement->label);
+ free(goto_statement);
+ }
+ void delete_ast_switch_statement(struct AST_Switch_Statement *switch_statement)
+ {
+ if(switch_statement->condition!=NULL)
+ delete_ast(switch_statement->condition);
+ if(switch_statement->body_statement!=NULL)
+ delete_ast(switch_statement->body_statement);
+ free(switch_statement);
+ }
+ void delete_ast_return_statement(struct AST_Return_Statement *return_statement)
+ {
+ if(return_statement->return_expression!=NULL)
+ delete_ast(return_statement->return_expression);
+ free(return_statement);
+ }
+ void delete_ast_type_definition(struct AST_Type_Definition *type_definition)
+ {
+ /*deleting denoted objects in scopes*/
+ free(type_definition);
+ }
+ void delete_ast_object_declaration(struct AST_Object_Declaration *object_declaration)
+ {
+ free(object_declaration);
+
+ }
+ void delete_ast_function_definition(struct AST_Function_Definition *function_definition)
+ {
+ free(function_definition);
+ }
+ void delete_ast_function_declaration(struct AST_Function_Declaration *function_declaration)
+ {
+ free(function_declaration);
+ }
+ void delete_ast_translation_unit(struct AST_Translation_Unit *translation_unit)
+ {
+ while(translation_unit->components.size>0)
+ delete_ast((struct AST*)Queue_Pop(&translation_unit->components));
+ if(translation_unit->file_scope!=NULL)
+ delete_scope(translation_unit->file_scope);
+ delete_linkage(translation_unit->internal_linkage);
+ free(translation_unit);
+ }
+ void delete_ast_constant(struct AST_Constant *constant)
+ {
+ if(constant->value!=NULL)
+ free(constant->value);
+ free(constant);
+ }
+ void delete_ast_string_literal(struct AST_String_Literal *string)
+ {
+ free(string->string);
+ free(string);
+ }
+
+
+
+
+
+ #endif
F diff --git a/frontend/semantics/ast.h b/frontend/semantics/ast.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/ast.h
+ #ifndef GCC_AST_H
+ #define GCC_AST_H GCC_AST_H
+ #include <ast.hh>
+ #include <scope.h>
+ #include <parse_declaration.h>
+ #include <denoted.h>
+ #include <linkage.h>
+
+
+
+ enum AST_Type;
+
+
+ struct AST
+ {
+ enum AST_Type type;
+ };
+ struct AST_Error
+ {
+ enum AST_Type type;
+ struct AST *error;
+ };
+ struct AST_Declaration_Error
+ {
+ enum AST_Type type;
+ struct Denoted *error;
+ };
+ struct AST_Binary_Expression
+ {
+ enum AST_Type type;
+
+ struct Type *value_type;
+ struct AST *left;
+ struct AST *right;
+
+ };
+ struct AST_Conditional_Expression
+ {
+ enum AST_Type type;
+
+ struct Type *value_type;
+
+ struct AST *left;
+ struct AST *center;
+ struct AST *right;
+
+ };
+ struct AST_Function_Expression
+ {
+ enum AST_Type type;
+ struct Type *value_type;
+
+ struct AST *id;
+ /*queue of astrees*/
+ struct Queue arguments;
+ };
+
+ struct AST_Constant
+ {
+ enum AST_Type type;
+
+ struct Type *value_type;
+ void *value;
+ };
+ /*TODO correct this*/
+ struct AST_String_Literal
+ {
+ enum AST_Type type;
+ struct token *string;
+ };
+ struct AST_Lvalue_Expression
+ {
+ enum AST_Type type;
+ struct Denoted *lvalue;
+ };
+ struct AST_Unary_Expression
+ {
+ enum AST_Type type;
+ struct Type *value_type;
+ struct AST *operand;
+ };
+
+ struct AST_Labeled_Statement
+ {
+ enum AST_Type type;
+ struct token *label;
+ struct AST *statement;
+ };
+ struct AST_Compound_Statement
+ {
+ enum AST_Type type;
+
+ struct Scope *scope;
+ struct Queue components;
+ };
+
+ struct AST_For_Statement
+ {
+ enum AST_Type type;
+ struct AST *condition;
+ struct AST *initialisation;
+ struct AST *update;
+ struct AST *body_statement;
+ };
+ struct AST_While_Statement
+ {
+ enum AST_Type type;
+ struct AST *condition;
+ struct AST *body_statement;
+ };
+ struct AST_Do_While_Statement
+ {
+ enum AST_Type type;
+ struct AST *body_statement;
+ struct AST *condition;
+ };
+ struct AST_If_Statement
+ {
+ enum AST_Type type;
+ struct AST* condition;
+ struct AST* body_statement;
+ struct AST* else_statement;
+
+ };
+ struct AST_Goto_Statement
+ {
+ enum AST_Type type;
+ struct token *label;
+ };
+ struct AST_Switch_Statement
+ {
+ enum AST_Type type;
+ struct AST* condition;
+ struct AST* body_statement;
+ };
+ struct AST_Return_Statement
+ {
+ enum AST_Type type;
+ struct AST* return_expression;
+
+ };
+
+
+ struct AST_Type_Definition
+ {
+ enum AST_Type type;
+ struct Denoted_Typedef *definition;
+ };
+ struct AST_Object_Declaration
+ {
+ enum AST_Type type;
+ struct Denoted_Object *object;
+ };
+ struct AST_Function_Definition
+ {
+ enum AST_Type type;
+ struct Denoted_Function *function;
+ };
+ struct AST_Function_Declaration
+ {
+ enum AST_Type type;
+ struct Denoted_Function *function;
+ };
+ struct AST_Translation_Unit
+ {
+ enum AST_Type type;
+ struct Queue components;
+
+ struct Scope *file_scope;
+ struct Linkage *internal_linkage;
+ struct Queue static_objects;
+ };
+
+
+
+
+ struct AST_Error* get_error_tree(struct AST *error);
+ struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error);
+ struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type);
+ struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right);
+ struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope);
+ struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type);
+ struct AST_Constant* get_constant_tree(struct token *constant);
+ struct AST_String_Literal* get_string_literal_tree(struct token *string);
+ struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope);
+ struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,enum AST_Type type);
+ struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope);
+ struct AST_If_Statement* get_if_statement_tree();
+ struct AST_Switch_Statement* get_switch_statement_tree();
+ struct AST_While_Statement* get_while_statement_tree();
+ struct AST_Do_While_Statement* get_do_while_statement_tree();
+ struct AST_For_Statement* get_for_statement_tree();
+ struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression);
+ struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope);
+ struct AST* get_nop_tree();
+ struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition);
+ struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object);
+ struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function);
+ struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function);
+ struct AST_Translation_Unit* get_translation_unit_tree();
+
+
+
+ void delete_ast(struct AST* ast);
+ void delete_ast_error(struct AST_Error *error);
+ void delete_ast_declaration_error(struct AST_Declaration_Error *error);
+ void delete_ast_binary_expression(struct AST_Binary_Expression *binary_expression);
+ void delete_ast_conditional_expression(struct AST_Conditional_Expression *cond_expression);
+ void delete_ast_function_expression(struct AST_Function_Expression *function_expression);
+ void delete_ast_constant(struct AST_Constant *constant);
+ void delete_ast_string_literal(struct AST_String_Literal *string);
+ void delete_ast_lvalue_expression(struct AST_Lvalue_Expression *lval_expression);
+ void delete_ast_unary_expression(struct AST_Unary_Expression *unary_expression);
+ void delete_ast_labeled_statement(struct AST_Labeled_Statement *labeled_statement);
+ void delete_ast_compound_statement(struct AST_Compound_Statement *compound_statement);
+ void delete_ast_for_statement(struct AST_For_Statement *for_statement);
+ void delete_ast_while_statemtent(struct AST_While_Statement *while_statement);
+ void delete_ast_do_while_statement(struct AST_Do_While_Statement *do_while_statement);
+ void delete_ast_if_statemtent(struct AST_If_Statement *if_statement);
+ void delete_ast_goto_statemtent(struct AST_Goto_Statement *goto_statement);
+ void delete_ast_switch_statement(struct AST_Switch_Statement *switch_statement);
+ void delete_ast_return_statement(struct AST_Return_Statement *return_statement);
+ void delete_ast_type_definition(struct AST_Type_Definition *type_definition);
+ void delete_ast_object_declaration(struct AST_Object_Declaration *object_declaration);
+ void delete_ast_function_definition(struct AST_Function_Definition *function_definition);
+ void delete_ast_function_declaration(struct AST_Function_Declaration *function_declaration);
+ void delete_ast_translation_unit(struct AST_Translation_Unit *translation_unit);
+
+
+
+
+
+
+
+
+
+
+ #endif
F diff --git a/frontend/semantics/ast.hh b/frontend/semantics/ast.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/ast.hh
+ #ifndef GCC_AST_HH
+ #define GCC_AST_HH GCC_AST_HH
+
+ #define BIN_EXPR_PTR(x) ((struct AST_Binary_Expression*)(x))
+ #define UN_EXPR_PTR(x) ((struct AST_Unary_Expression*)(x))
+ #define LVAL_EXPR_PTR(x) ((struct AST_Lvalue_Expression*)(x))
+ #define DECLR_PTR(x) ((struct AST_Declaration*)(x))
+ #define IF_ST_PTR(s) ((struct AST_If_Statement*)(x))
+
+ enum AST_Type{
+ OP_COMMA
+ ,OP_ADDITION,OP_SUBTRACTION,OP_MUL,OP_DIV,OP_REMAINDER
+ ,OP_COND,OP_FUNCTION
+ ,OP_ASSIGN,OP_ADD_ASSIGN,OP_SUBTRACT_ASSIGN,OP_MULTIPLY_ASSIGN,OP_REMAINDER_ASSIGN,OP_DIV_ASSIGN
+ ,OP_SHIFT_LEFT_ASSIGN,OP_SHIFT_RIGHT_ASSIGN
+ ,OP_AND_ASSIGN,OP_XOR_ASSIGN,OP_PIPE_ASSIGN
+ ,OP_NOP
+ ,OP_LOGICAL_OR,OP_LOGICAL_AND,OP_LOGICAL_NOT
+ ,OP_BITWISE_OR,OP_BITWISE_AND,OP_BITWISE_XOR,OP_BITWISE_NOT
+ ,OP_ADDR_OF,OP_DEREFERENCE,OP_MEMBER_TROUGH_PTR,OP_MEMBER,OP_ARR_SUBSCRIPT
+ ,OP_POSTFIX_INC,OP_POSTFIX_DEC
+ ,OP_PREFIX_INC,OP_PREFIX_DEC
+ ,OP_UNARY_PLUS,OP_UNARY_MINUS
+ ,OP_CAST,OP_SIZEOF
+ ,OP_SHIFT_LEFT,OP_SHIFT_RIGHT
+ ,OP_LESS_EQ,OP_GREATER_EQ
+ ,OP_LESS,OP_GREATER
+ ,OP_EQUAL,OP_NOT_EQUAL
+ ,OP_LVALUE,OP_CONSTANT,OP_STRING_LITERAL
+ ,ST_COMPOUND,ST_EXPRESSION,ST_SWITCH,ST_IF,ST_WHILE,ST_DO_WHILE,ST_GOTO,ST_LABEL,ST_CASE,ST_DEFAULT
+ ,ST_CONTINUE,ST_BREAK,ST_RETURN,ST_FOR
+ ,ST_OBJECT_DECLARATION,ST_TYPE_DEFINITION,ST_FUNCTION_DEFINITION
+ ,ST_FUNCTION_DECLARATION
+ ,TRANSLATION_UNIT
+ ,ERROR,ERROR_DECLARATION
+ };
+ struct AST;
+ struct AST_Error;
+ struct AST_Declaration_Error;
+ struct AST_Binary_Expression;
+ struct AST_Conditional_Expression;
+ struct AST_Function_Expression;
+ struct AST_Constant;
+ struct AST_String_Literal;
+ struct AST_Lvalue_Expression;
+ struct AST_Unary_Expression;
+ struct AST_Labeled_Statement;
+ struct AST_Compound_Statement;
+ struct AST_For_Statement;
+ struct AST_While_Statement;
+ struct AST_Do_While_Statement;
+ struct AST_If_Statement;
+ struct AST_Goto_Statement;
+ struct AST_Switch_Statement;
+ struct AST_Return_Statement;
+ struct AST_Type_Definition;
+ struct AST_Object_Declaration;
+ struct AST_Function_Definition;
+ struct AST_Function_Declaration;
+ struct AST_Translation_Unit;
+
+ #endif
F diff --git a/frontend/semantics/identifiers/denoted.c b/frontend/semantics/identifiers/denoted.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/denoted.c
+ #ifndef GCC_DENOTED_C
+ #define GCC_DENOTED_C GCC_DENOTED_C
+ #include <denoted.h>
+
+ struct Denoted* get_denoted_error(struct Denoted *error)
+ {
+ struct Denoted_Error *ret;
+ ret=malloc(sizeof(struct Denoted_Error));
+ ret->denotation=DT_Error;
+ ret->error=error;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted_Base* get_denoted_base(struct Denotation_Prototype *prototype)
+ {
+ struct Denoted_Base *ret;
+ ret=malloc(sizeof(struct Denoted_Base));
+ ret->denotation=prototype->denotation;
+ ret->id=NULL;
+ ret->type=prototype->type;
+
+ return ret;
+ }
+ struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs)
+ {
+ struct Denoted_Function *ret;
+ ret=malloc(sizeof(struct Denoted_Function));
+ ret->denotation=DT_Function;
+ ret->linkage=LINKAGE_NONE;
+ ret->id=id;
+ ret->type=return_type;
+ ret->function_specifier=fs;
+ ret->body=NULL;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_object(struct token *id, enum Storage_Class_Specifier sc,struct Type *type,struct AST *initializer)
+ {
+ struct Denoted_Object *ret;
+ ret=malloc(sizeof(struct Denoted_Object));
+ ret->denotation=DT_Object;
+ ret->linkage=LINKAGE_NONE;
+ ret->id=id;
+
+ ret->object=malloc(sizeof(struct Object));
+ ret->object->type=type;
+ ret->object->location=NULL;
+ ret->object->storage_class=sc;
+
+ ret->initializer=initializer;
+
+ return (struct Denoted*)ret;
+ }
+
+ struct Denoted* get_denoted_typedef(struct Denoted_Base *base)
+ {
+ struct Denoted_Typedef *ret;
+ ret=malloc(sizeof(struct Denoted_Typedef));
+ ret->denotation=DT_Typedef;
+ ret->type=base->type;
+ ret->id=base->id;
+
+ return (struct Denoted*)ret;
+
+ }
+ struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression,struct Translation_Data *translation_data)
+ {
+ struct Denoted_Enum_Const *ret;
+ ret=malloc(sizeof(struct Denoted_Enum_Const));
+ ret->denotation=DT_Enum_Constant;
+ ret->id=id;
+ ret->parent=parent;
+ ret->expression=expression;
+ ret->value=evaluate_const_expression_integer(expression,translation_data);
+
+ return (struct Denoted*)ret;
+
+ }
+ struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value)
+ {
+ struct Denoted_Enum_Const *ret;
+ ret=malloc(sizeof(struct Denoted_Enum_Const));
+ ret->denotation=DT_Enum_Constant;
+ ret->id=id;
+ ret->parent=parent;
+ ret->expression=NULL;
+ ret->value=value;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator)
+ {
+ struct Denoted_Enum *ret;
+ ret=malloc(sizeof(struct Denoted_Enum));
+ ret->denotation=DT_Enum;
+ ret->id=id;
+ ret->enumeration=enumerator;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union)
+ {
+ struct Denoted_Struct_Union *ret;
+ ret=malloc(sizeof(struct Denoted_Struct_Union));
+ ret->denotation=DT_Struct_Union_Tag;
+ ret->id=id;
+ ret->struct_union=struct_union;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denotation_prototype(struct Map *types)
+ {
+ struct Denotation_Prototype *ret;
+ ret=malloc(sizeof(struct Denotation_Prototype));
+ ret->denotation=DT_Prototype;
+ ret->type=NULL;
+ ret->node=types;
+ ret->storage_class=SCS_NONE;
+ ret->specifier=TS_NONE;
+ ret->constraint=TC_NONE;
+ ret->sign=TSIGN_NONE;
+ ret->function_specifier=FS_None;
+ ret->struct_union=NULL;
+ ret->enumerator=NULL;
+ ret->size=0;
+ ret->is_const=ret->is_volatile=0;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract)
+ {
+ if(base->type->specifier==TS_FUNC)
+ {
+ if(base->id==NULL && !allow_abstract)
+ {
+ return get_denoted_error(get_denoted_function(NULL,((struct Type_Function*)base->type)->return_type,prototype->function_specifier));
+ }else
+ {
+ struct Denoted_Function *hold_denoted_function;
+ hold_denoted_function=(struct Denoted_Function*)get_denoted_function(base->id,base->type,prototype->function_specifier);
+ /*hack*/
+ switch(prototype->storage_class)
+ {
+ case SCS_NONE:
+ hold_denoted_function->linkage=LINKAGE_NONE;
+ break;
+ case SCS_EXTERN:
+ hold_denoted_function->linkage=LINKAGE_EXTERNAL;
+ break;
+ case SCS_STATIC:
+ hold_denoted_function->linkage=LINKAGE_INTERNAL;
+ break;
+
+ }
+ return (struct Denoted*)hold_denoted_function;
+ }
+ }else if(prototype->storage_class==SCS_TYPEDEF)
+ {
+ if(base->id==NULL && !allow_abstract)
+ {
+ return get_denoted_error(get_denoted_typedef(base));
+ }else
+ {
+ return get_denoted_typedef(base);
+ }
+ }else
+ {
+ if(base->id==NULL && !allow_abstract)
+ {
+ return get_denoted_error(get_denoted_object(base->id,prototype->storage_class,base->type,NULL));
+ }else
+ {
+ return get_denoted_object(base->id,prototype->storage_class,base->type,NULL);
+ }
+ }
+ }
+
+ void delete_denoted(struct Denoted *denoted)
+ {
+ switch(denoted->denotation)
+ {
+ case DT_Label:
+ free(denoted);
+ break;
+ case DT_Object:
+ delete_denoted_object((struct Denoted_Object*)denoted);
+ break;
+ case DT_Typedef:
+ delete_denoted_typedef((struct Denoted_Typedef*)denoted);
+ break;
+ case DT_Function:
+ delete_denoted_function((struct Denoted_Function*)denoted);
+ break;
+ case DT_Enum:
+ delete_denoted_enum((struct Denoted_Enum*)denoted);
+ break;
+ case DT_Enum_Constant:
+ delete_denoted_enum_constant((struct Denoted_Enum_Const*)denoted);
+ break;
+ case DT_Struct_Union_Tag:
+ delete_denoted_struct_union((struct Denoted_Struct_Union*)denoted);
+ break;
+ case DT_Error:
+ delete_denoted_error((struct Denoted_Error*)denoted);
+ break;
+ case DT_Prototype:
+ default:
+ assert(0);
+ }
+ }
+ void delete_denoted_error(struct Denoted_Error *error)
+ {
+ if(error->error!=NULL)
+ delete_denoted(error->error);
+ free(error);
+ }
+ void delete_denoted_function(struct Denoted_Function *function)
+ {
+ if(function->id!=NULL)
+ free(function->id);
+ if(function->body!=NULL)
+ delete_ast_compound_statement(function->body);
+ free(function);
+ }
+ void delete_denoted_object(struct Denoted_Object *object)
+ {
+ if(object->id!=NULL)
+ free(object->id);
+ if(object->object!=NULL)
+ delete_object(object->object);
+ if(object->initializer!=NULL)
+ delete_ast(object->initializer);
+ free(object);
+ }
+ void delete_denoted_typedef(struct Denoted_Typedef *typedefed)
+ {
+ if(typedefed->id!=NULL)
+ free(typedefed->id);
+ free(typedefed);
+ }
+ void delete_denoted_enum(struct Denoted_Enum *enumeration)
+ {
+ if(enumeration->id!=NULL)
+ free(enumeration->id);
+ if(enumeration->enumeration!=NULL)
+ delete_enum(enumeration->enumeration);
+ free(enumeration);
+ }
+ void delete_denoted_enum_constant(struct Denoted_Enum_Const *enum_const)
+ {
+ if(enum_const->id!=NULL)
+ free(enum_const->id);
+ if(enum_const->expression!=NULL)
+ delete_ast(enum_const->expression);
+ free(enum_const);
+ }
+ void delete_denoted_struct_union(struct Denoted_Struct_Union *su)
+ {
+ if(su->id!=NULL)
+ free(su->id);
+ if(su->struct_union!=NULL)
+ delete_struct_union(su->struct_union);
+ free(su);
+ }
+ void delete_object(struct Object *object)
+ {
+ if(object->location!=NULL)
+ delete_location(object->location);
+ free(object);
+ }
+ void delete_denoted_prototype(struct Denotation_Prototype *prototype)
+ {
+ free(prototype);
+ }
+ void delete_denoted_base(struct Denoted_Base *base)
+ {
+ free(base);
+ }
+ void delete_denoted_wrapper(void *denoted)
+ {
+ delete_denoted(denoted);
+ }
+ void delete_denoted_with_no_linkage_wrapper(void *denoted)
+ {
+ if( ((struct Denoted*)denoted)->denotation == DT_Object )
+ {
+ if( AS_DENOTED_OBJECT_PTR(denoted)->linkage!=LINKAGE_NONE )
+ return;
+ }
+ delete_denoted(denoted);
+ }
+
+
+
+
+ #endif
F diff --git a/frontend/semantics/identifiers/denoted.h b/frontend/semantics/identifiers/denoted.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/denoted.h
+ #ifndef GCC_DENOTED_H
+ #define GCC_DENOTED_H GCC_DENOTED_H
+ #include <denoted.hh>
+ #include <type.h>
+ #include <scope.h>
+ #include <semantics.h>
+ #include <linkage.h>
+
+
+ enum Denotation_Type;
+ enum Function_Specifier;
+ enum Storage_Class_Specifier;
+
+
+ struct Denoted
+ {
+ enum Denotation_Type denotation;
+ };
+
+
+ struct Denoted_Error
+ {
+ enum Denotation_Type denotation;
+ struct Denoted *error;
+ };
+ struct Denoted_Base
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+ struct Type *type;
+ };
+ struct Denoted_Function
+ {
+ enum Denotation_Type denotation;
+ enum Linkage_Type linkage;
+ struct token *id;
+ struct Type *type;
+
+
+ enum Function_Specifier function_specifier;
+ struct AST_Compound_Statement *body;
+ };
+ struct Denoted_Object
+ {
+ enum Denotation_Type denotation;
+ enum Linkage_Type linkage;
+
+ struct token *id;
+ struct Object *object;
+ struct AST *initializer;
+ };
+ struct Denoted_Typedef
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+ struct Type *type;
+
+ };
+ struct Denoted_Enum
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Enum *enumeration;
+ };
+ struct Denoted_Enum_Const
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Enum *parent;
+ int value;
+ struct AST* expression;
+ };
+
+ struct Denoted_Struct_Union
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Struct_Union *struct_union;
+ };
+
+ struct Denotation_Prototype
+ {
+ enum Denotation_Type denotation;
+ struct Type *type;
+ struct Map *node;
+
+
+ enum Storage_Class_Specifier storage_class;
+ enum Type_Specifier specifier;
+ enum Type_Constraint constraint;
+ enum Type_Signedness sign;
+ enum Function_Specifier function_specifier;
+
+ struct Struct_Union *struct_union;
+ struct Enum *enumerator;
+
+ size_t size;
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Object
+ {
+ struct Type *type;
+ struct Location *location;
+ enum Storage_Class_Specifier storage_class;
+ };
+
+ struct Static_Object;
+ struct Automatic_Object;
+
+
+ struct Denoted_Base* get_denoted_base(struct Denotation_Prototype *prototype);
+ struct Denoted* get_denoted_error(struct Denoted *error);
+ struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs);
+ struct Denoted* get_denoted_object(struct token *id, enum Storage_Class_Specifier sc,struct Type *type,struct AST *initializer);
+ struct Denoted* get_denoted_typedef(struct Denoted_Base *base);
+ struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression,struct Translation_Data *translation_data);
+ struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value);
+ struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator);
+ struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union);
+
+ struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract);
+ struct Denoted* get_denotation_prototype(struct Map *types);
+
+
+ void delete_denoted_wrapper(void *denoted);
+ void delete_denoted_with_no_linkage_wrapper(void *denoted);
+ void delete_denoted(struct Denoted *denoted);
+ void delete_denoted_error(struct Denoted_Error *error);
+ void delete_denoted_function(struct Denoted_Function *function);
+ void delete_denoted_object(struct Denoted_Object *object);
+ void delete_denoted_typedef(struct Denoted_Typedef *typedefed);
+ void delete_denoted_enum(struct Denoted_Enum *enumeration);
+ void delete_denoted_enum_constant(struct Denoted_Enum_Const *enum_const);
+ void delete_denoted_struct_union(struct Denoted_Struct_Union *su);
+ void delete_object(struct Object *object);
+ void delete_denoted_prototype(struct Denotation_Prototype *prototype);
+ void delete_denoted_base(struct Denoted_Base *base);
+
+
+ enum Storage_Class_Specifier get_denoted_function_storage_class(struct Denoted_Function *function);
+ #endif
F diff --git a/frontend/semantics/identifiers/denoted.hh b/frontend/semantics/identifiers/denoted.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/denoted.hh
+ #ifndef GCC_DENOTED_HH
+ #define GCC_DENOTED_HH GCC_DENOTED_HH
+
+ #define AS_DENOTED_OBJECT_PTR(x) ((struct Denoted_Object*)x)
+ #define AS_DENOTED_FUNCTION(x) ((struct Denoted_Function*)x)
+ #define AS_DENOTED_TYPEDEF(x) ((struct Denoted_Typedef*)x)
+ #define AS_DENOTED_ENUM(x) ((struct Denoted_Enum*)x)
+ #define AS_DENOTED_ENUM_CONST(x) ((struct Denoted_Enum_Const*)x)
+ #define AS_DENOTED_STRUCT_UNION(x) ((struct Denoted_Struct_Union*)x)
+
+ enum Denotation_Type
+ {
+ DT_Macro,
+ DT_Macro_Parameter,
+ DT_Label,
+ DT_Object,
+ DT_Typedef,
+ DT_Function,
+ DT_Enum,
+ DT_Enum_Constant,
+ DT_Struct_Union_Member,
+ DT_Struct_Union_Tag,
+ DT_Error,
+ DT_Prototype
+ };
+
+ enum Function_Specifier
+ {
+ FS_Inline,
+ FS_None
+ };
+ enum Storage_Class_Specifier
+ {
+ SCS_EXTERN,
+ SCS_STATIC,
+ SCS_TYPEDEF,
+ SCS_REGISTER,
+ SCS_NONE
+
+ };
+
+ struct Denoted;
+ struct Denoted_Error;
+ struct Denoted_Base;
+ struct Denoted_Function;
+ struct Denoted_Object;
+ struct Denoted_Typedef;
+ struct Denoted_Enum;
+ struct Denoted_Enum_Const;
+ struct Denoted_Struct_Union;
+ struct Denotation_Prototype;
+ struct Object;
+
+
+ #endif
F diff --git a/frontend/semantics/identifiers/linkage.c b/frontend/semantics/identifiers/linkage.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/linkage.c
+ #ifndef GCC_LINKAGE_C
+ #define GCC_LINKAGE_C GCC_LINKAGE_C
+ #include<linkage.h>
+
+
+
+
+
+ struct Linkage* get_linkage()
+ {
+ struct Linkage *ret;
+ ret=malloc(sizeof(struct Linkage));
+ Map_Init(&ret->ids);
+
+ return ret;
+ }
+
+ /*denoted things are deleted here and left alone when deleting scopes*/
+ void delete_linkage(struct Linkage *linkage)
+ {
+ Map_Map(&linkage->ids,delete_denoted_wrapper);
+ Map_Destroy(&linkage->ids);
+ free(linkage);
+ }
+
+
+ /*TODO optimise when you know what should happen here*/
+
+ void account_for_upper_linkage_on_object(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object)
+ {
+ struct Denoted_Object *hold_object;
+ hold_object=check_ordinary(scope,denoted_object->id);
+ if(hold_object!=NULL && hold_object->denotation==DT_Object && types_are_identical(denoted_object->object->type,hold_object->object->type))
+ {
+ if(hold_object->linkage!=LINKAGE_NONE)
+ {
+ denoted_object->linkage=hold_object->linkage;
+ denoted_object->object->storage_class=SCS_STATIC;
+ }else
+ {
+ denoted_object->linkage=LINKAGE_EXTERNAL;
+ denoted_object->object->storage_class=SCS_STATIC;
+ }
+ }else
+ {
+ denoted_object->linkage=LINKAGE_EXTERNAL;
+ denoted_object->object->storage_class=SCS_STATIC;
+ }
+ }
+ void account_for_upper_linkage_on_function(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function)
+ {
+ struct Denoted_Function *hold_function;
+ hold_function=check_ordinary(scope,denoted_function->id);
+ if(hold_function!=NULL)
+ {
+ if(hold_function->denotation==DT_Function && types_are_identical(denoted_function->type,hold_function->type))
+ {
+ denoted_function->linkage=( (hold_function->linkage==LINKAGE_NONE) ? LINKAGE_EXTERNAL : hold_function->linkage);
+ }else
+ {
+ push_translation_error("linking mismatching things",translation_data);
+ return;
+ }
+ }else
+ {
+ denoted_function->linkage=LINKAGE_EXTERNAL;
+ }
+ }
+ void resolve_object_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object)
+ {
+ if(scope->type==FILE_SCOPE)
+ {
+ if(denoted_object->object->storage_class==SCS_NONE || denoted_object->object->storage_class==SCS_EXTERN)
+ {
+ denoted_object->linkage=LINKAGE_EXTERNAL;
+ denoted_object->object->storage_class=SCS_STATIC;
+ account_for_upper_linkage_on_object(scope,translation_data,denoted_object);
+
+ }else if(denoted_object->object->storage_class==SCS_STATIC)
+ {
+ denoted_object->linkage=LINKAGE_INTERNAL;
+ denoted_object->object->storage_class=SCS_STATIC;
+ }else
+ {
+ assert(0);
+ }
+ }else if(scope->type==FUNCTION_PROTOTYPE_SCOPE)
+ {
+ denoted_object->linkage=LINKAGE_NONE;
+ denoted_object->object->storage_class=SCS_NONE;
+ if(denoted_object->object->storage_class!=SCS_NONE && denoted_object->object->storage_class!=SCS_REGISTER)
+ {
+ push_translation_error("storage class specifier other than register in function prototype scope",translation_data);
+ return ;
+ }
+ }else if(scope->type==BLOCK_SCOPE)
+ {
+ denoted_object->linkage=LINKAGE_NONE;
+ /*here comes the spooky part*/
+ if(denoted_object->object->storage_class==SCS_EXTERN)
+ account_for_upper_linkage_on_object(scope,translation_data,denoted_object);
+ }else
+ {
+ assert(0);
+ }
+
+ /*check if id is linked oppositely*/
+ if(denoted_object->linkage==LINKAGE_EXTERNAL &&
+ Map_Check(&translation_data->internal_linkage->ids,denoted_object->id->data,denoted_object->id->data_size)!=NULL)
+ {
+ push_translation_error("linking id both internally and externally",translation_data);
+ }else if(denoted_object->linkage==LINKAGE_INTERNAL &&
+ Map_Check(&translation_data->external_linkage->ids,denoted_object->id->data,denoted_object->id->data_size)!=NULL)
+ {
+ push_translation_error("linking id both internally and externally",translation_data);
+ }
+ }
+ void resolve_function_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function)
+ {
+ if(scope->type==BLOCK_SCOPE)
+ {
+ if(denoted_function->linkage==LINKAGE_INTERNAL)
+ {
+ push_translation_error("static storage class specifier on function declaration in block scope",translation_data);
+ return;
+ }else
+ {
+ denoted_function->linkage=LINKAGE_EXTERNAL;
+ account_for_upper_linkage_on_function(scope,translation_data,denoted_function);
+
+ }
+ }else if(scope->type==FILE_SCOPE)
+ {
+ if(denoted_function->linkage==LINKAGE_NONE)
+ denoted_function->linkage=LINKAGE_EXTERNAL;
+ /*falltrough*/
+
+ if(denoted_function->linkage==LINKAGE_EXTERNAL)
+ account_for_upper_linkage_on_function(scope,translation_data,denoted_function);
+
+ }else
+ {
+ assert(0);
+ }
+
+ /*check if id is linked oppositely*/
+ if(denoted_function->linkage==LINKAGE_EXTERNAL &&
+ Map_Check(&translation_data->internal_linkage->ids,denoted_function->id->data,denoted_function->id->data_size)!=NULL)
+ {
+ push_translation_error("linking id both internally and externally",translation_data);
+ }else if(denoted_function->linkage==LINKAGE_INTERNAL &&
+ Map_Check(&translation_data->external_linkage->ids,denoted_function->id->data,denoted_function->id->data_size)!=NULL)
+ {
+ push_translation_error("linking id both internally and externally",translation_data);
+ }
+
+ }
+
+ #endif
F diff --git a/frontend/semantics/identifiers/linkage.h b/frontend/semantics/identifiers/linkage.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/linkage.h
+ #ifndef GCC_LINKAGE_H
+ #define GCC_LINKAGE_H GCC_LINKAGE_H
+ #include <linkage.hh>
+ #include <map.h>
+ #include <denoted.h>
+
+ enum Linkage_Type;
+
+ /*this can be external or internal depending on which structure it is located*/
+ struct Linkage
+ {
+ struct Map ids;
+ };
+
+
+ struct Linkage* get_linkage();
+ void delete_linkage();
+
+ /*these don't push the object into the linkage map*/
+ void resolve_object_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object);
+ void resolve_function_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function);
+ #endif
F diff --git a/frontend/semantics/identifiers/linkage.hh b/frontend/semantics/identifiers/linkage.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/linkage.hh
+ #ifndef GCC_LINKAGE_HH
+ #define GCC_LINKAGE_HH GCC_LINKAGE_HH
+
+
+ enum Linkage_Type
+ {
+ LINKAGE_EXTERNAL,
+ LINKAGE_INTERNAL,
+ LINKAGE_NONE
+ };
+
+ struct Linkage;
+
+
+
+ #endif
F diff --git a/frontend/semantics/identifiers/scope.c b/frontend/semantics/identifiers/scope.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/scope.c
+ #ifndef GCC_SCOPE_C
+ #define GCC_SCOPE_C GCC_SCOPE_C
+ #include "scope.h"
+
+
+ struct Scope* get_normal_scope(struct Scope *parent,enum Scope_Type type)
+ {
+ struct Normal_Scope *ret;
+ assert(type==BLOCK_SCOPE || type==FILE_SCOPE || type==FUNCTION_PROTOTYPE_SCOPE);
+ ret=malloc(sizeof(struct Normal_Scope));
+ ret->type=type;
+
+ assert((type!=FILE_SCOPE) || parent==NULL);
+ ret->parent=parent;
+
+ Map_Init(&ret->tags);
+ Map_Init(&ret->ordinary);
+
+ return (struct Scope*)ret;
+
+ }
+ struct Scope* get_function_scope(struct Scope *parent)
+ {
+ struct Function_Scope *ret;
+ assert(parent!=NULL && parent->type==FILE_SCOPE);
+
+ ret=malloc(sizeof(struct Function_Scope));
+ ret->type=FUNCTION_SCOPE;
+ ret->parent=parent;
+
+ Map_Init(&ret->labels);
+
+
+ return (struct Scope*)ret;
+ }
+
+ void delete_normal_scope(struct Normal_Scope *scope)
+ {
+ Map_Map(&scope->tags,delete_denoted_wrapper);
+ Map_Destroy(&scope->tags);
+ Map_Map(&scope->ordinary,delete_denoted_with_no_linkage_wrapper);
+ Map_Destroy(&scope->ordinary);
+ free(scope);
+ }
+
+ void delete_function_scope(struct Function_Scope *scope)
+ {
+ Map_Map(&scope->labels,delete_denoted_wrapper);
+ Map_Destroy(&scope->labels);
+ free(scope);
+ }
+
+ void delete_scope(struct Scope *scope)
+ {
+ switch(scope->type)
+ {
+ case BLOCK_SCOPE:
+ case FILE_SCOPE:
+ case FUNCTION_PROTOTYPE_SCOPE:
+ delete_normal_scope((struct Normal_Scope*)scope);
+ break;
+ case FUNCTION_SCOPE:
+ delete_function_scope((struct Function_Scope*)scope);
+ default:
+ assert(0);
+ }
+ }
+
+
+ void* check_label(struct Scope *current,struct token *id)
+ {
+ void *hold;
+ hold=NULL;
+ while(current!=NULL && current->type!=FUNCTION_SCOPE)
+ {
+ current=current->parent;
+ }
+
+ if(current!=NULL)
+ {
+ hold=Map_Check(&((struct Function_Scope*)current)->labels,id->data,id->data_size);
+ }
+ return hold;
+ }
+
+ struct Denoted* check_tag(struct Scope *current,struct token *id)
+ {
+ void *hold;
+ hold=NULL;
+ while(current!=NULL && hold==NULL && current->type!=FUNCTION_SCOPE)
+ {
+ hold=Map_Check(&((struct Normal_Scope*)current)->tags,id->data,id->data_size);
+ current=current->parent;
+ }
+ return hold;
+ }
+ void* check_ordinary(struct Scope *current,struct token *id)
+ {
+ void *hold;
+ hold=NULL;
+ while(current!=NULL && hold==NULL)
+ {
+ hold=Map_Check(&((struct Normal_Scope*)current)->ordinary,id->data,id->data_size);
+ current=current->parent;
+ }
+ return hold;
+ }
+
+ void Scope_Push(struct Scope *scope,struct Denoted *declarator,struct Translation_Data *translation_data)
+ {
+
+ switch(declarator->denotation)
+ {
+ case DT_Label:
+ /*perhaps lables should be denoted*/
+ assert(0);
+ case DT_Function:
+ push_function(scope,translation_data,AS_DENOTED_FUNCTION(declarator));
+ break;
+ case DT_Object:
+ push_object(scope,translation_data,AS_DENOTED_OBJECT_PTR(declarator));
+ break;
+ case DT_Typedef:
+ push_typedef(scope,translation_data,AS_DENOTED_TYPEDEF(declarator));
+ break;
+ case DT_Enum_Constant:
+ push_denoted_enum_constant(scope,translation_data,AS_DENOTED_ENUM_CONST(declarator));
+ break;
+ case DT_Struct_Union_Member:
+ assert(0);
+ break;
+ case DT_Enum:
+ push_denoted_enum_tag(scope,translation_data,AS_DENOTED_ENUM(declarator));
+ break;
+ case DT_Struct_Union_Tag:
+ push_denoted_struct_union_tag(scope,translation_data,AS_DENOTED_STRUCT_UNION(declarator));
+ break;
+ }
+
+
+ }
+ char check_if_typedefed(struct Scope* scope,struct token *id)
+ {
+ struct Denoted *hold;
+ hold=check_ordinary(scope,id);
+ if(hold==NULL || hold->denotation!=DT_Typedef)
+ return 0;
+ else
+ return 1;
+
+ }
+ #define CHECK_AND_PUSH(thing,scope) Map_Check_And_Push(scope,thing->id->data,thing->id->data_size,thing)
+
+ void push_object(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object)
+ {
+ #define PO_ERROR(msg) delete_denoted_object(denoted_object);push_translation_error(msg,translation_data);return;
+
+ struct Denoted_Object *hold_object;
+ struct Linkage *linkage;
+ resolve_object_linkage(current,translation_data,denoted_object);
+ if(has_new_errors(translation_data))
+ {PO_ERROR("in declaration");}
+
+ hold_object=CHECK_AND_PUSH(denoted_object,&AS_NORMAL_SCOPE(current)->ordinary);
+ if(hold_object!=NULL && hold_object->linkage==LINKAGE_NONE)
+ {PO_ERROR("redeclaration of identifier");}
+
+ if(denoted_object->linkage==LINKAGE_NONE)
+ {
+ if(hold_object!=NULL)
+ {PO_ERROR("redeclaration of identifier");}
+ }else if(denoted_object->linkage==LINKAGE_EXTERNAL || denoted_object->linkage==LINKAGE_INTERNAL)
+ {
+ linkage=(denoted_object->linkage==LINKAGE_EXTERNAL?translation_data->external_linkage:translation_data->internal_linkage);
+ hold_object=CHECK_AND_PUSH(denoted_object,&linkage->ids);
+ if(hold_object!=NULL)
+ {
+ if(hold_object->denotation!=DT_Object)
+ {PO_ERROR("linking an object to a function");}
+ if(!types_are_identical(hold_object->object->type,denoted_object->object->type))
+ {PO_ERROR("linking an objects with mismatching types");}
+ if(denoted_object->initializer!=NULL)
+ {
+ if(hold_object->initializer==NULL)
+ hold_object->initializer=denoted_object->initializer;
+ else
+ {PO_ERROR("two initialisers for static storage duration object");}
+ //delete_denoted_object(denoted_object);
+ }
+ }
+ }else
+ {
+ assert(0);
+ }
+
+ #undef PO_ERROR
+ }
+ void push_function(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function)
+ {
+ #define PF_ERROR(msg) delete_denoted_function(denoted_function);push_translation_error(msg,translation_data);return;
+
+ struct Denoted_Function *hold_function;
+ struct Linkage *linkage;
+ resolve_function_linkage(current,translation_data,denoted_function);
+ if(has_new_errors(translation_data))
+ {PF_ERROR("in declaration");}
+
+ if(denoted_function->linkage==LINKAGE_NONE)
+ {
+ hold_function=CHECK_AND_PUSH(denoted_function,&AS_NORMAL_SCOPE(current)->ordinary);
+ if(hold_function!=NULL)
+ {PF_ERROR("id with function type without linkage");}
+ }else if(denoted_function->linkage==LINKAGE_EXTERNAL || denoted_function->linkage==LINKAGE_INTERNAL)
+ {
+ linkage=(denoted_function->linkage==LINKAGE_EXTERNAL?translation_data->external_linkage:translation_data->internal_linkage);
+ hold_function=CHECK_AND_PUSH(denoted_function,&linkage->ids);
+ if(hold_function!=NULL)
+ {
+ if(hold_function->denotation!=DT_Function)
+ {PF_ERROR("linking an function to a object");}
+ if(!types_are_identical(hold_function->type,denoted_function->type))
+ {PF_ERROR("linking functions with mismatching types");}
+ if(hold_function->body!=NULL && denoted_function->body!=NULL)
+ {PF_ERROR("redefinition of a function");}
+ if(denoted_function->body!=NULL)
+ {
+ hold_function->body=denoted_function->body;
+ denoted_function->body=NULL;
+ // delete_denoted_function(denoted_function);
+ }
+ }
+ }else
+ {
+ assert(0);
+ }
+
+ #undef PF_ERROR
+ }
+ void push_typedef(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Typedef *denoted_typedef)
+ {
+ struct Denoted *hold_denotated;
+ hold_denotated=CHECK_AND_PUSH(denoted_typedef,&AS_NORMAL_SCOPE(current)->ordinary);
+ if(hold_denotated)
+ {
+ delete_denoted_typedef(denoted_typedef);
+ push_translation_error("redefinition of identifier",translation_data);
+ }
+ }
+ void push_denoted_enum_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum *denoted_enum)
+ {
+ struct Denoted *hold_denotated;
+ hold_denotated=CHECK_AND_PUSH(denoted_enum,&AS_NORMAL_SCOPE(current)->tags);
+ if(hold_denotated)
+ {
+ delete_denoted_enum(denoted_enum);
+ push_translation_error("redefinition of tag",translation_data);
+ }
+ }
+ void push_denoted_enum_constant(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum_Const *denoted_enum_constant)
+ {
+ struct Denoted *hold_denotated;
+ hold_denotated=CHECK_AND_PUSH(denoted_enum_constant,&AS_NORMAL_SCOPE(current)->ordinary);
+ if(hold_denotated)
+ {
+ delete_denoted_enum_constant(denoted_enum_constant);
+ push_translation_error("redefinition of identifier",translation_data);
+ }
+ }
+ void push_denoted_struct_union_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Struct_Union *denoted_struct_union)
+ {
+ struct Denoted *hold_denotated;
+ hold_denotated=CHECK_AND_PUSH(denoted_struct_union,&AS_NORMAL_SCOPE(current)->tags);
+ if(hold_denotated)
+ {
+ delete_denoted_struct_union(denoted_struct_union);
+ push_translation_error("redefinition of tag",translation_data);
+ }
+ }
+ #undef CHECK_AND_PUSH
+ #endif
F diff --git a/frontend/semantics/identifiers/scope.h b/frontend/semantics/identifiers/scope.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/scope.h
+ #ifndef GCC_SCOPE_H
+ #define GCC_SCOPE_H GCC_SCOPE_H
+ #include <scope.hh>
+ #include <map.h>
+ #include <denoted.h>
+ #include <location.h>
+
+
+ enum Scope_Type;
+ struct Scope
+ {
+ enum Scope_Type type;
+ struct Scope *parent;
+ };
+ struct Normal_Scope
+ {
+ enum Scope_Type type;
+ struct Scope *parent;
+
+ Map tags;
+ Map ordinary;
+ };
+ struct Function_Scope
+ {
+ enum Scope_Type type;
+ struct Scope *parent;
+ Map labels;
+ };
+
+
+ struct Scope* get_normal_scope(struct Scope *parent,enum Scope_Type type);
+ struct Scope* get_function_scope(struct Scope *parent);
+
+ void* check_label(struct Scope *current,struct token *id);
+ struct Denoted* check_tag(struct Scope *current,struct token *id);
+ void* check_ordinary(struct Scope *current,struct token *id);
+
+
+ void push_label(struct Scope *current,struct token *id);/*TODO*/
+ void push_object(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object);
+ void push_function(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function);
+ void push_typedef(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Typedef *denoted_typedef);
+ void push_denoted_enum_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum *denoted_enum);
+ void push_denoted_enum_constant(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum_Const *denoted_enum_constant);
+ void push_denoted_struct_union_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Struct_Union *denoted_struct_union);
+ void Scope_Push(struct Scope *scope,struct Denoted *declarator,struct Translation_Data *translation_data);
+
+
+ void delete_scope(struct Scope *scope);
+ void delete_normal_scope(struct Normal_Scope *scope);
+ void delete_function_scope(struct Function_Scope *scope);
+
+
+
+
+ char check_if_typedefed(struct Scope* scope,struct token *id);
+ #endif
F diff --git a/frontend/semantics/identifiers/scope.hh b/frontend/semantics/identifiers/scope.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/identifiers/scope.hh
+ #ifndef GCC_SCOPE_HH
+ #define GCC_SCOPE_HH GCC_SCOPE_HH
+
+ #define AS_NORMAL_SCOPE(x) ((struct Normal_Scope*)x)
+ #define AS_FUNCTION_SCOPE(x) ((struct Function_Scope*)x)
+ enum Scope_Type{
+ FILE_SCOPE,
+ BLOCK_SCOPE,
+ FUNCTION_PROTOTYPE_SCOPE,
+ FUNCTION_SCOPE
+ };
+ struct Scope;
+ struct Normal_Scope;
+ struct Function_Scope;
+ #endif
F diff --git a/frontend/semantics/memory/location.c b/frontend/semantics/memory/location.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/location.c
+ #ifndef GCC_LOCATION_C
+ #define GCC_LOCATION_C GCC_LOCATION_C
+ #include "location.h"
+
+
+ struct Location_Stack* get_location_on_stack(size_t offset)
+ {
+ struct Location_Stack *ret;
+ ret=malloc(sizeof(struct Location_Stack));
+ ret->type=LT_ON_STACK;
+ ret->offset=offset;
+
+ return ret;
+ }
+ struct Location_Raw* get_location_raw(size_t address)
+ {
+ struct Location_Raw *ret;
+ ret=malloc(sizeof(struct Location_Raw));
+ ret->type=LT_RAW;
+ ret->address=address;
+
+ return ret;
+ }
+
+ struct Location_Relative* get_relative_location(struct Location *base,size_t offset)
+ {
+ struct Location_Relative *ret;
+ ret=malloc(sizeof(struct Location_Relative));
+ ret->type=LT_RELATIVE;
+ ret->base=base;
+ ret->offset=offset;
+
+ return ret;
+ }
+ /*base is modified*/
+ struct Location *get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id)
+ {
+ if(base->type==LT_ON_STACK)
+ {
+ struct Location_Stack *hold;
+ hold=malloc(sizeof(struct Location_Stack));
+ *hold=*(struct Location_Stack*)base;
+ ((struct Location_Stack*)base)->offset+=get_type_size(type);
+
+ return (struct Location*)hold;
+ }else if(base->type==LT_RELATIVE)
+ {
+ struct Location_Relative *hold;
+
+ hold=malloc(sizeof(struct Location_Relative));
+ *hold=*(struct Location_Relative*)base;
+
+ return (struct Location*)hold;
+ }else if(base->type==LT_GLOBAL)
+ {
+ struct Location_Labeled *hold;
+ hold=malloc(sizeof(struct Location_Labeled));
+ hold->id=id;
+
+ return (struct Location*)hold;
+ }
+ }
+ struct Location *get_global_location()
+ {
+ struct Location *ret;
+ ret=malloc(sizeof(struct Location));
+ ret->type=LT_GLOBAL;
+
+ return ret;
+ }
+
+
+
+ void delete_location(struct Location *location)
+ {
+ free(location);
+ }
+ #endif
F diff --git a/frontend/semantics/memory/location.h b/frontend/semantics/memory/location.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/location.h
+ #ifndef GCC_LOCATION_H
+ #define GCC_LOCATION_H GCC_LOCATION_H
+ #include <location.hh>
+ #include <lexer.h>
+ #include <type.h>
+
+
+ enum Location_Type;
+ struct Location
+ {
+ enum Location_Type type;
+ };
+ struct Location_Stack
+ {
+ enum Location_Type type;
+ size_t offset;
+ };
+ struct Location_Raw
+ {
+ enum Location_Type type;
+ size_t address;
+ };
+
+ struct Location_Relative
+ {
+ enum Location_Type type;
+ struct Location *base;
+ size_t offset;
+ };
+
+ struct Location_Labeled
+ {
+ enum Location_Type type;
+ struct token *id;
+ };
+
+ struct Location_Stack* get_location_on_stack(size_t offset);
+ struct Location* get_global_location();
+ struct Location_Raw* get_location_raw(size_t address);
+ struct Location_Relative* get_relative_location(struct Location *base,size_t offset);
+ struct Location* get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id);
+
+
+ void delete_location(struct Location *location);
+
+ #endif
F diff --git a/frontend/semantics/memory/location.hh b/frontend/semantics/memory/location.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/location.hh
+ #ifndef GCC_LOCATION_HH
+ #define GCC_LOCATION_HH GCC_LOCATION_HH
+ enum Location_Type
+ {
+ LT_ON_STACK,
+ LT_RAW,
+ LT_RELATIVE,
+ LT_LABELED,
+ LT_GLOBAL
+ };
+ struct Location;
+ struct Location_Stack;
+ struct Location_Raw;
+ struct Location_Relative;
+ struct Location_Labeled;
+
+ #endif
F diff --git a/frontend/semantics/memory/semantics.c b/frontend/semantics/memory/semantics.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/semantics.c
+ #ifndef GCC_SEMANTICS_C
+ #define GCC_SEMANTICS_C GCC_SEMANTICS_C
+ #include"semantics.h"
+
+
+
+ long long int evaluate_const_expression_integer(struct AST *expression,struct Translation_Data *translation_data)
+ {
+ #define RET_BIN_EXPR(x,operator) return \
+ evaluate_const_expression_integer(BIN_EXPR_PTR(x)->left,translation_data)\
+ operator\
+ evaluate_const_expression_integer(BIN_EXPR_PTR(x)->right,translation_data);
+ #define RET_UNARY_EXPR(x,operator) return \
+ operator evaluate_const_expression_integer(UN_EXPR_PTR(x)->operand,translation_data);
+
+ switch(expression->type)
+ {
+ case OP_COMMA:
+ case OP_ADDITION:
+ RET_BIN_EXPR(expression,+);
+ case OP_SUBTRACTION:
+ RET_BIN_EXPR(expression,-);
+ case OP_MUL:
+ RET_BIN_EXPR(expression,*);
+ case OP_DIV:
+ RET_BIN_EXPR(expression,/);
+ case OP_REMAINDER:
+ RET_BIN_EXPR(expression,%);
+ case OP_COND:
+ return (
+ evaluate_const_expression_integer(((struct AST_Conditional_Expression*)expression)->left,translation_data)?
+ evaluate_const_expression_integer(((struct AST_Conditional_Expression*)expression)->center,translation_data):
+ evaluate_const_expression_integer(((struct AST_Conditional_Expression*)expression)->right,translation_data)
+ );
+
+ case OP_LOGICAL_OR:
+ RET_BIN_EXPR(expression,||);
+ case OP_LOGICAL_AND:
+ RET_BIN_EXPR(expression,&&);
+ case OP_LOGICAL_NOT:
+ RET_UNARY_EXPR(expression,!);
+ case OP_BITWISE_OR:
+ RET_BIN_EXPR(expression,|);
+ case OP_BITWISE_AND:
+ RET_BIN_EXPR(expression,&);
+ case OP_BITWISE_XOR:
+ RET_BIN_EXPR(expression,^);
+ case OP_BITWISE_NOT:
+ RET_UNARY_EXPR(expression,~);
+ case OP_UNARY_PLUS:
+ RET_UNARY_EXPR(expression,+);
+ case OP_UNARY_MINUS:
+ RET_UNARY_EXPR(expression,-);
+ case OP_SHIFT_LEFT:
+ RET_BIN_EXPR(expression,<<);
+ case OP_SHIFT_RIGHT:
+ RET_BIN_EXPR(expression,>>);
+ case OP_LESS_EQ:
+ RET_BIN_EXPR(expression,<=);
+ case OP_GREATER_EQ:
+ RET_BIN_EXPR(expression,>=);
+ case OP_LESS:
+ RET_BIN_EXPR(expression,<);
+ case OP_GREATER:
+ RET_BIN_EXPR(expression,>);
+ case OP_EQUAL:
+ RET_BIN_EXPR(expression,==);
+ case OP_NOT_EQUAL:
+ RET_BIN_EXPR(expression,!=);
+ }
+ /*shouldnt reach here*/
+ return 0;
+
+ }
+
+ unsigned long long int evaluate_literal_integer_dec(struct token *token,struct Translation_Data *translation_data)
+ {
+ unsigned long long int accumulate=0;
+ size_t i;
+ for(i=0;i<token->data_size;++i)
+ accumulate*=10 , accumulate+=token->data[i]-'0';
+ return accumulate;
+
+ }
+
+ unsigned long long int evaluate_literal_integer_hex(struct token *token,struct Translation_Data *translation_data)
+ {
+ unsigned long long int accumulate=0;
+ unsigned char digit;
+ size_t i;
+ /* skip the leading 0x */
+ for(i=2;i<token->data_size;++i)
+ {
+ if(token->data[i]<='9')
+ digit=token->data[i]-'0';
+ else if(token->data[i]<='f' && token->data[i]>='a')
+ digit=10+(token->data[i]-'a');
+ else
+ digit=10+(token->data[i]-'A');
+ accumulate|=digit,accumulate<<=4;
+ }
+ return accumulate;
+ }
+
+ /*Various flavours of TODO*/
+ long double evaluate_literal_double_dec(struct token *token,struct Translation_Data *translation_data)
+ {
+ return .0l;
+ }
+ long double evaluate_literal_double_hex(struct token *token,struct Translation_Data *translation_data)
+ {
+ return .0l;
+ }
+
+ char* evaluate_literal_string(struct token *token,struct Translation_Data *translation_data)
+ {
+ char *hold_data;
+ hold_data=token->data+1;
+ token->data[token->data_size]='\0';
+ return hold_data;
+ }
+ wchar_t* evaluate_literal_wide_string(struct token *token,struct Translation_Data *translation_data)
+ {
+ wchar_t *hold_data;
+ hold_data=(wchar_t*)(token->data+1);
+ token->data[token->data_size]='\0';
+ return hold_data;
+ }
+
+ char evaluate_literal_char(struct token *token,struct Translation_Data *translation_data)
+ {
+ return token->data[1];
+ }
+ wchar_t evaluate_literal_wide_char(struct token *token,struct Translation_Data *translation_data)
+ {
+ return *(wchar_t*)(token->data+1);
+ }
+
+ wchar_t resolve_char_escape_sequence(struct token *token,struct Translation_Data *translation_data)
+ {
+ return L'a';
+ }
+ /*TODO */
+ unsigned long long int evaluate_integer_constant(struct token *token,struct Translation_Data *translation_data)
+ {
+ return evaluate_literal_integer_dec(token,translation_data);
+ }
+ #endif
F diff --git a/frontend/semantics/memory/semantics.h b/frontend/semantics/memory/semantics.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/semantics.h
+ #ifndef GCC_SEMANTICS_H
+ #define GCC_SEMANTICS_H GCC_SEMANTICS_H
+ #include <ast.h>
+ #include <lexer.h>
+ #include <program.h>
+
+ long long int evaluate_const_expression_integer(struct AST *expression,struct Translation_Data *translation_data);
+
+
+ unsigned long long int evaluate_integer_constant(struct token *token,struct Translation_Data *translation_data);
+
+ unsigned long long int evaluate_literal_integer_dec(struct token *token,struct Translation_Data *translation_data);
+ unsigned long long int evaluate_literal_integer_hex(struct token *token,struct Translation_Data *translation_data);
+
+
+ long double evaluate_literal_double_dec(struct token *token,struct Translation_Data *translation_data);
+ long double evaluate_literal_double_hex(struct token *token,struct Translation_Data *translation_data);
+
+ char* evaluate_literal_string(struct token *token,struct Translation_Data *translation_data);
+ wchar_t* evaluate_literal_wide_string(struct token *token,struct Translation_Data *translation_data);
+
+ char evaluate_literal_char(struct token *token,struct Translation_Data *translation_data);
+ wchar_t evaluate_literal_wide_char(struct token *token,struct Translation_Data *translation_data);
+
+ wchar_t resolve_char_escape_sequence(struct token *token,struct Translation_Data *translation_data);
+ #endif
F diff --git a/frontend/semantics/memory/type.c b/frontend/semantics/memory/type.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/type.c
+ #ifndef GCC_TYPE_C
+ #define GCC_TYPE_C GCC_TYPE_C
+ #include "type.h"
+
+
+
+ struct Type* type_check_and_push(struct Type *type,struct Map *base,size_t struct_size)
+ {
+ struct Map *hold_node;
+ hold_node=Map_Check_And_Get(base,type,struct_size);
+
+ if(hold_node==NULL)
+ {
+ type->node=Map_Push_And_Get(base,type,struct_size,type);
+ return type;
+ }else
+ {
+ free(type);
+ return (struct Type*)hold_node->ID;
+ }
+ }
+
+ struct Type* get_type_error(struct Type *type)
+ {
+ struct Type_Error *ret;
+
+ ret=calloc(1,sizeof(struct Type_Error));
+ ret->specifier=TS_ERROR;
+ ret->error=type;
+ ret=(struct Type_Error*)type_check_and_push((struct Type*)ret,type->node,sizeof(struct Type_Error));
+ return (struct Type*)ret;
+
+ }
+ struct Type* get_struct_union_type(struct Denotation_Prototype *prototype)
+ {
+ struct Type_Struct_Union *ret;
+
+ assert(prototype->denotation=DT_Prototype);
+ prototype->denotation=DT_Object;
+
+ ret=calloc(1,sizeof(struct Type_Struct_Union));
+ ret->specifier=prototype->specifier;
+ ret->struct_union=prototype->struct_union;
+
+ ret->is_const=prototype->is_const;
+ ret->is_volatile=prototype->is_volatile;
+
+ ret=(struct Type_Struct_Union*)type_check_and_push((struct Type*)ret,prototype->node,sizeof(struct Type_Struct_Union));
+ if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE || (prototype->specifier!=TS_UNION && prototype->specifier!=TS_STRUCT))
+ {
+ return get_type_error((struct Type*)ret);
+ }else
+ {
+ return (struct Type*)ret;
+ }
+ }
+ struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union)
+ {
+ struct Struct_Union *ret;
+
+
+ ret=calloc(1,sizeof(struct Struct_Union));
+ ret->specifier=struct_or_union;
+ ret->members=malloc(sizeof(struct Queue));
+ Queue_Init(ret->members);
+
+ ret->inner_namespace=(struct Normal_Scope*)get_normal_scope(scope,BLOCK_SCOPE);
+ ret->is_finished=0;
+
+ return ret;
+ }
+ struct Enum *get_enum_base()
+ {
+ struct Enum *ret;
+ ret=malloc(sizeof(struct Enum));
+ ret->specifier=TS_ENUM;
+ ret->consts=malloc(sizeof(struct Queue));
+ Queue_Init(ret->consts);
+
+ ret->is_finished=0;
+
+ return ret;
+ }
+ struct Type* get_basic_type(struct Denotation_Prototype *prototype)
+ {
+ struct Type_Basic *ret;
+ ret=calloc(1,sizeof(struct Type_Basic));
+
+
+ assert(prototype->denotation=DT_Prototype);
+ prototype->denotation=DT_Object;
+
+ ret->size=prototype->size;
+ ret->is_const=prototype->is_const;
+ ret->is_volatile=prototype->is_volatile;
+ ret->constraint=prototype->constraint;
+ ret->sign=prototype->sign;
+
+
+ if(prototype->specifier==TS_NONE)
+ {
+ ret->specifier=TS_INT;
+ }else
+ {
+ ret->specifier=prototype->specifier;
+
+ }
+
+ ret=(struct Type_Basic*)type_check_and_push((struct Type*)ret,prototype->node,sizeof(struct Type_Basic));
+
+ switch(ret->specifier)
+ {
+ case TS_DOUBLE:
+ if(ret->constraint==TC_LONG_LONG
+ || prototype->constraint==TC_SHORT
+ || prototype->sign!=TSIGN_NONE)
+ {
+ return get_type_error((struct Type*)ret);
+ }
+ break;
+ case TS_CHAR:
+ if(prototype->constraint!=TC_NONE)
+ {
+ return get_type_error((struct Type*)ret);
+ }
+ break;
+ case TS_INT:
+ break;
+ default:
+ if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE)
+ {
+ return get_type_error((struct Type*)ret);
+ }
+
+ }
+ return (struct Type*)ret;
+
+ }
+ struct Type* get_pointer_type(struct Type *points_to,char is_const,char is_volatile)
+ {
+ struct Type_Pointer *ret;
+ ret=calloc(1,sizeof(struct Type_Pointer));
+ ret->specifier=TS_POINTER;
+ ret->size=PTR_SIZE;
+ ret->points_to=points_to;
+ ret->is_const=is_const;
+ ret->is_volatile=is_volatile;
+
+ ret=(struct Type_Pointer*)type_check_and_push((struct Type*)ret,points_to->node,sizeof(struct Type_Pointer));
+ return (struct Type*)ret;
+
+ }
+ struct Type* get_array_type(struct Type *array_of,struct AST* number_of_elements,struct Translation_Data *translation_data)
+ {
+ struct Type_Array *ret;
+ ret=calloc(1,sizeof(struct Type_Array));
+ ret->specifier=TS_ARRAY;
+ ret->size=0;
+ if(number_of_elements!=NULL)
+ {
+ ret->number_of_elements=evaluate_const_expression_integer(number_of_elements,translation_data);
+ delete_ast(number_of_elements);
+ }else
+ {
+ ret->number_of_elements=0;
+ }
+ ret->is_array_of=array_of;
+ ret=(struct Type_Array*)type_check_and_push((struct Type*)ret,array_of->node,sizeof(struct Type_Array));
+ return (struct Type*)ret;
+
+
+ }
+ struct Type* get_enum_type(struct Denotation_Prototype *prototype)
+ {
+ struct Type_Enum *ret;
+
+ assert(prototype->denotation=DT_Prototype);
+ prototype->denotation=DT_Object;
+
+ ret=calloc(1,sizeof(struct Type_Enum));
+ ret->specifier=TS_ENUM;
+ ret->enumeration=prototype->enumerator;
+ ret->is_const=prototype->is_const;
+ ret->is_volatile=prototype->is_volatile;
+
+ ret=(struct Type_Enum*)type_check_and_push((struct Type*)ret,prototype->node,sizeof(struct Type_Enum));
+ if(prototype->sign!=TSIGN_NONE || prototype->constraint!=TC_NONE)
+ {
+ return get_type_error((struct Type*)ret);
+ }
+ return (struct Type*)ret;
+ }
+ struct Type* get_type_bitfield(struct Type *base,struct AST* number_of_bits,struct Translation_Data *translation_data)
+ {
+ struct Type_Bit_Field *ret;
+ ret=calloc(1,sizeof(struct Type_Bit_Field));
+ ret->specifier=TS_BITFIELD;
+
+ assert(number_of_bits!=NULL);
+ ret->number_of_bits=evaluate_const_expression_integer(number_of_bits,translation_data);
+ delete_ast(number_of_bits);
+
+ ret->base=base;
+
+ ret=(struct Type_Bit_Field*)type_check_and_push((struct Type*)ret,base->node,sizeof(struct Type_Bit_Field));
+ return (struct Type*)ret;
+ }
+
+ struct Type* get_function_type(struct Type *return_type,struct Queue *parameters,struct Normal_Scope* function_prototype_scope)
+ {
+ struct Type_Function *ret;
+ size_t i;
+ struct Map *hold_node;
+
+ ret=calloc(1,sizeof(struct Type_Function));
+ ret->specifier=TS_FUNC;
+
+ ret->return_type=return_type;
+
+
+ ret->function_prototype_scope=function_prototype_scope;
+
+
+ ret->number_of_arguments=parameters->size;
+ ret->arguments=malloc(sizeof(struct Denoted_Object*)*ret->number_of_arguments);
+ for(i=0;parameters->size>0;++i)
+ {
+ ret->arguments[i]=(struct Denoted_Object*)Queue_Pop(parameters);
+ }
+ free(parameters);
+ ret=(struct Type_Function*)type_check_and_push((struct Type*)ret,return_type->node,sizeof(struct Type_Function));
+
+ }
+ char is_type(struct Translation_Data *translation_data,struct Scope *scope)
+ {
+ struct token *hold;
+ struct Denoted *thing;
+
+ hold=translation_data->tokens->first->data;
+
+ switch(hold->type)
+ {
+ case KW_ID:
+ thing=check_ordinary(scope,hold);
+ if(thing!=NULL && thing->denotation==DT_Typedef)
+ return 1;
+ else return 0;
+ case KW_CONST:
+ case KW_VOLATILE:
+ case KW_INT:
+ case KW_VOID:
+ case KW_CHAR:
+ case KW_DOUBLE:
+ case KW_FLOAT:
+ case KW_LONG:
+ case KW_SHORT:
+ case KW_EXTERN:
+ case KW_STATIC:
+ case KW_TYPEDEF:
+ case KW_STRUCT:
+ case KW_UNION:
+ case KW_ENUM:
+ return 1;
+ default:
+ return 0;
+
+ }
+ }
+ size_t get_type_size(struct Type *type)
+ {
+ switch(type->specifier)
+ {
+ case TS_VOID:
+ return 0;
+ case TS_CHAR:
+ return 1;
+ case TS_INT:
+ return INT_SIZE;
+ case TS_FLOAT:
+ return FLOAT_SIZE;
+ case TS_DOUBLE:
+ return FLOAT_SIZE*2;
+ case TS_STRUCT:
+ return ((struct Type_Struct_Union*)type)->struct_union->size;
+ case TS_ENUM:
+ return INT_SIZE;
+ case TS_UNION:
+ return ((struct Type_Struct_Union*)type)->struct_union->size;
+ case TS_POINTER:
+ return PTR_SIZE;
+ case TS_ARRAY:
+ return ((struct Type_Array*)type)->size;
+ case TS_FUNC:
+ return 0;
+ case TS_BITFIELD:
+ return ((struct Type_Bit_Field*)type)->number_of_bits;
+ case TS_NONE:
+ return 0;
+ case TS_ERROR:
+ return 0;
+
+ }
+ }
+
+
+ void delete_enum(struct Enum *enumeration)
+ {
+ while(enumeration->consts->size>0)
+ Queue_Pop(enumeration->consts);
+ free(enumeration);
+ }
+ void delete_struct_union(struct Struct_Union *su)
+ {
+ delete_scope((struct Scope*)su->inner_namespace);
+ while(su->members->size>0)
+ Queue_Pop(su->members);
+
+ free(su);
+ }
+
+ void delete_type(void *type)
+ {
+ if(((struct Type*)type)->specifier!=TS_FUNC)
+ {
+ free(type);
+ }else
+ {
+ delete_normal_scope(AS_TYPE_FUNC_PTR(type)->function_prototype_scope);
+ free(AS_TYPE_FUNC_PTR(type)->arguments);
+ free(type);
+ }
+ }
+ char types_are_identical(struct Type *a,struct Type *b)
+ {
+ return 1;
+ }
+ #endif
F diff --git a/frontend/semantics/memory/type.h b/frontend/semantics/memory/type.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/type.h
+ #ifndef GCC_TYPE_H
+ #define GCC_TYPE_H GCC_TYPE_H
+ #include <type.hh>
+ #include <denoted.h>
+ #include <scope.h>
+ #include <limits.h>
+ #include <program.h>
+ #include <map.h>
+ #include <ast.h>
+
+
+
+
+
+
+ enum Type_Specifier;
+ enum Type_Constraint;
+ enum Type_Signedness;
+
+ struct Type
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ };
+ struct Type_Error
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ struct Type *error;
+ };
+
+ struct Type_Struct_Union
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ struct Struct_Union *struct_union;
+
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Struct_Union
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ size_t size;
+ /*queue of denoted objects for preserving the order of the members*/
+ struct Queue *members;
+ struct Normal_Scope *inner_namespace;
+
+ char is_finished;
+ };
+ struct Type_Bit_Field
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ size_t number_of_bits;
+ struct Type *base;
+ };
+ struct Type_Basic
+ {
+ enum Type_Specifier specifier;
+ enum Type_Constraint constraint;
+ struct Map *node;
+ enum Type_Signedness sign;
+ size_t size;
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Type_Pointer
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ size_t size;
+ struct Type *points_to;
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Type_Array
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ size_t size;
+ size_t number_of_elements;
+ struct Type *is_array_of;
+ };
+ struct Type_Function
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ struct Type *return_type;
+ /*types*/
+ size_t number_of_arguments;
+
+ struct Denoted_Object** arguments;
+ struct Normal_Scope *function_prototype_scope;
+
+ };
+ struct Type_Enum
+ {
+ enum Type_Specifier specifier;
+ struct Map *node;
+ struct Enum *enumeration;
+
+ char is_const:1;
+ char is_volatile:1;
+
+ };
+ struct Enum
+ {
+ enum Type_Specifier specifier;
+ struct Queue *consts;
+ char is_finished;
+ };
+
+
+
+ struct Type* type_check_and_push(struct Type *type,struct Map *base,size_t struct_size);
+
+
+ struct Type* get_type_error(struct Type *type);
+ struct Type* get_struct_union_type(struct Denotation_Prototype *prototype);
+ struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union);
+ struct Enum *get_enum_base();
+ struct Type* get_basic_type(struct Denotation_Prototype *prototype);
+ struct Type* get_pointer_type(struct Type *points_to,char is_const,char is_volatile);
+ struct Type* get_array_type(struct Type *array_of,struct AST* number_of_elements,struct Translation_Data *translation_data);
+ struct Type* get_enum_type(struct Denotation_Prototype *prototype);
+ struct Type* get_type_bitfield(struct Type *base,struct AST* number_of_bits,struct Translation_Data *translation_data);
+ struct Type* get_function_type(struct Type *return_type,struct Queue *parameters,struct Normal_Scope* function_prototype_scope);
+
+ void delete_enum(struct Enum *enumeration);
+ void delete_struct_union(struct Struct_Union *su);
+ void delete_type(void *type);
+
+ char is_type(struct Translation_Data *translation_data,struct Scope *scope);
+ size_t get_type_size(struct Type *type);
+
+ char types_are_identical(struct Type *a,struct Type *b);
+
+
+
+
+
+
+ #endif
F diff --git a/frontend/semantics/memory/type.hh b/frontend/semantics/memory/type.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/memory/type.hh
+ #ifndef GCC_TYPE_HH
+ #define GCC_TYPE_HH GCC_TYPE_HH
+
+ #define PTR_SIZE 4
+ #define INT_SIZE 4
+ #define CHAR_SIZE 1
+ #define FLOAT_SIZE 4
+ #define DOUBLE_SIZE 8
+
+
+ #define AS_BASIC_TYPE_PTR(x) ((struct Type_Basic*)x)
+ #define AS_STRUCT_UNION_PTR(x) ((struct Type_Struct_Union*)x)
+ #define AS_TYPE_PTR_PTR(x) ((struct Type_Pointer*)x)
+ #define AS_TYPE_ARR_PTR(x) ((struct Type_Array*)x)
+ #define AS_TYPE_ENUM_PTR(x) ((struct Type_Enum*)x)
+ #define AS_TYPE_FUNC_PTR(x) ((struct Type_Function*)x)
+
+ /*this isn't just type-specifier :DD*/
+ enum Type_Specifier
+ {
+ TS_VOID,
+ TS_CHAR,
+ TS_INT,
+ TS_FLOAT,
+ TS_DOUBLE,
+ TS_STRUCT,
+ TS_ENUM,
+ TS_UNION,
+ TS_POINTER,
+ TS_ARRAY,
+ TS_FUNC,
+ TS_BITFIELD,
+ TS_NONE,
+ TS_ERROR
+ };
+ enum Type_Constraint
+ {
+ TC_LONG,
+ TC_LONG_LONG,
+ TC_SHORT,
+ TC_NONE
+ };
+ enum Type_Signedness
+ {
+ TSIGN_SIGNED,
+ TSIGN_UNSIGNED,
+ TSIGN_NONE
+ };
+ struct Type;
+ struct Type_Error;
+ struct Type_Struct_Union;
+ struct Struct_Union;
+ struct Type_Bit_Field;
+ struct Type_Basic;
+ struct Type_Pointer;
+ struct Type_Array;
+ struct Type_Function;
+ struct Type_Enum;
+ struct Enum;
+ struct Type_Map_Pair;
+
+ #endif
F diff --git a/frontend/semantics/program.c b/frontend/semantics/program.c new file mode 100644 --- /dev/null +++ b/frontend/semantics/program.c
+ #ifndef GCC_PROGRAM_C
+ #define GCC_PROGRAM_C GCC_PROGRAM_C
+ #/*Don't mind me*/include/*When I grow up I want to be a new line*/ <program.h>
+
+
+ struct Program* get_program()
+ {
+ struct Program *ret;
+ ret=malloc(sizeof(struct Program));
+ ret->translation_units=malloc(sizeof(struct Queue));
+ ret->source_files=malloc(sizeof(struct Queue));
+ ret->errors=malloc(sizeof(struct Queue));
+ ret->types=malloc(sizeof(struct Map));
+ ret->external_linkage=malloc(sizeof(struct Linkage));
+
+ Queue_Init(ret->translation_units);
+ Queue_Init(ret->source_files);
+ Queue_Init(ret->errors);
+
+
+
+ Map_Init(ret->types);
+
+ return ret;
+ }
+ struct Source_File* extract_source_file(FILE *in,struct Source_Name *name)
+ {
+ long file_size;
+ struct Source_File *src;
+
+
+ if(fseek(in,0,SEEK_END)==-1)
+ return NULL;
+ if((file_size=ftell(in))==-1)
+ return NULL;
+ if(fseek(in,0,SEEK_SET)==-1)
+ return NULL;
+
+ src=malloc(sizeof(struct Source_File));
+
+ src->src_name=name;
+
+ src->src=malloc(file_size+1);
+ src->src_size=file_size;
+
+ src->where_in_src=0;
+
+ src->which_column=0;
+ src->which_row=0;
+ src->is_in_the_begining_of_line=1;
+
+ src->src[file_size]='\0';
+
+ fread(src->src,1,file_size,in);
+ fclose(in);
+ return src;
+ }
+ struct Translation_Data* get_translation_data(struct Map *types,struct Linkage *internal_linkage,struct Linkage *external_linkage)
+ {
+ struct Translation_Data *ret;
+ ret=malloc(sizeof(struct Translation_Data));
+ ret->tokens=malloc(sizeof(struct Queue));
+ ret->errors=malloc(sizeof(struct Queue));
+ ret->source_files=malloc(sizeof(struct Queue));
+ Queue_Init(ret->tokens);
+ Queue_Init(ret->errors);
+ Queue_Init(ret->source_files);
+
+ ret->macros=malloc(sizeof(struct Map));
+ Map_Init(ret->macros);
+
+ ret->types=types;
+
+ ret->number_of_errors_when_last_checked=0;
+
+ ret->external_linkage=external_linkage;
+ ret->internal_linkage=internal_linkage;
+
+ return ret;
+ }
+ struct Source_Name* get_source_name(char *filename,char *base)
+ {
+ struct Source_Name *ret;
+ ret=malloc(sizeof(struct Source_Name));
+ ret->base=gstrcpy(base);
+ ret->filename=gstrcpy(filename);
+ normalise_source_name(ret);
+ return ret;
+ }
+ /*where_to_search ends in a NULL pointer*/
+ struct Source_File* get_source_file(char *filename,char **where_to_search)
+ {
+ FILE *in;
+ char *temp_name;
+ char is_directory=0;
+ struct Source_Name *name;
+ struct Source_File *file;
+
+ assert(where_to_search!=NULL);
+ assert(*where_to_search!=NULL);
+ do
+ {
+ temp_name=gstr_append(*where_to_search,filename);
+ in=fopen(temp_name,"r");
+ free(temp_name);
+ if(in==NULL)
+ continue;
+
+ name=get_source_name(filename,*where_to_search);
+ file=extract_source_file(in,name);
+ if(file!=NULL)
+ {
+ return file;
+ }else
+ {
+ delete_source_name(name);
+ }
+ }while(*(++where_to_search));
+ return NULL;
+ }
+
+ /*this might cause compatability issues TODO*/
+ void normalise_source_name(struct Source_Name *name)
+ {
+ size_t offset;
+ size_t i;
+ size_t last_slash;
+ char *hold_base;
+
+ for(last_slash=offset=0;name->filename[offset];++offset)
+ {
+ if(name->filename[offset]=='/')
+ {
+ last_slash=offset;
+ }
+ }
+
+ if(last_slash==0)
+ return;
+
+ if(name->base==NULL)
+ {
+ offset=0;
+ name->base=malloc(last_slash+1);
+ name->base[last_slash]='\0';
+ name->base[last_slash-1]='/';
+
+ }else
+ {
+ offset=gstrlen((char*)name->base);
+ hold_base=malloc(offset+last_slash+2);
+ strmv(hold_base,(char*)name->base);
+
+ hold_base[last_slash+offset]='/';
+ hold_base[last_slash+offset+1]='\0';
+ free((void*)name->base);
+
+ name->base=hold_base;
+ }
+
+ for(i=0;i<last_slash;++i)
+ name->base[offset+i]=name->filename[i];
+
+
+ ++i;
+ /*prune the filename*/
+ offset=gstrlen(name->filename+i);
+ hold_base=malloc(offset+1);
+ strmv(hold_base,name->filename+i);
+ free(name->filename);
+ name->filename=hold_base;
+
+
+ }
+
+ struct Program* parse_program(char **base_source_names)
+ {
+ struct Source_File *base_file;
+ struct Program *program;
+ struct Translation_Data *hold_translation_data;
+ char *this_directory[]={"./",NULL};
+
+ assert(base_source_names!=NULL);
+
+ if(*base_source_names==NULL)
+ {
+ return NULL;
+ }
+
+ program=get_program();
+ hold_translation_data=get_translation_data(program->types,get_linkage(),program->external_linkage);
+ do
+ {
+ base_file=get_source_file(*base_source_names,this_directory);
+ if(base_file==NULL)
+ {
+ /*TODO error*/
+ free(base_file);
+ continue;
+ }else
+ {
+ Queue_Push(hold_translation_data->source_files,base_file);
+ lex(base_file,hold_translation_data);
+ if(!has_new_errors(hold_translation_data))
+ {
+ Queue_Push(program->translation_units,parse_translation_unit(hold_translation_data));
+ }else
+ {
+ flush_tokens(hold_translation_data->tokens);
+ }
+ assimilate_translation_data(program,hold_translation_data);
+ }
+ }while(*(++base_source_names));
+
+ delete_translation_data(hold_translation_data);
+ return program;
+ }
+
+ void lex_program(struct Translation_Data *hold,struct Source_File *file)
+ {
+ Queue_Push(hold->source_files,file);
+ lex(file,hold);
+ }
+
+
+ char has_new_errors(struct Translation_Data *translation_data)
+ {
+ if(translation_data->errors->size != translation_data->number_of_errors_when_last_checked)
+ {
+ translation_data->number_of_errors_when_last_checked=translation_data->errors->size;
+ return 1;
+ }else
+ {
+ return 0;
+ }
+ }
+
+ void delete_program(struct Program *program)
+ {
+ while(program->translation_units->size>0)
+ delete_ast(Queue_Pop(program->translation_units));
+ free(program->translation_units);
+
+
+
+ while(program->source_files->size>0)
+ delete_source_file(Queue_Pop(program->source_files));
+ free(program->source_files);
+
+
+ while(program->errors->size>0)
+ delete_translation_error(Queue_Pop(program->errors));
+ free(program->errors);
+
+
+ delete_linkage(program->external_linkage);
+
+ /*BEWARE*/
+ Map_Map(program->types,delete_type);
+ Map_Destroy(program->types);
+ free(program->types);
+
+ free(program);
+
+ }
+ void delete_translation_data(struct Translation_Data *translation_data)
+ {
+ assert(translation_data->tokens->size==0 &&
+ translation_data->errors->size==0 &&
+ translation_data->source_files->size==0);
+ free(translation_data->tokens);
+ free(translation_data->errors);
+ free(translation_data->source_files);
+
+ Map_Map(translation_data->macros,delete_macro);
+ Map_Destroy(translation_data->macros);
+ free(translation_data->macros);
+
+ free(translation_data);
+
+ }
+ void assimilate_translation_data(struct Program *program,struct Translation_Data *translation_data)
+ {
+ Queue_Append(program->errors,translation_data->errors);
+ Queue_Append(program->source_files,translation_data->source_files);
+
+ flush_tokens(translation_data->tokens);
+
+ Queue_Init(translation_data->errors);
+ Queue_Init(translation_data->source_files);
+
+ translation_data->number_of_errors_when_last_checked=0;
+
+
+ }
+ char has_no_tokens(struct Translation_Data *translation_data)
+ {
+ return (translation_data->tokens->size)==0;
+ }
+ #endif
F diff --git a/frontend/semantics/program.h b/frontend/semantics/program.h new file mode 100644 --- /dev/null +++ b/frontend/semantics/program.h
+ #ifndef GCC_PROGRAM_H
+ #define GCC_PROGRAM_H GCC_PROGRAM_H
+
+
+ #include <program.hh>
+ #include <queue.h>
+ #include <scope.h>
+ #include <lexer.h>
+ #include <gcc_string.h>
+ #include <gcc_arguments.h>
+ #include <parse_translation_unit.h>
+
+
+ struct Program
+ {
+ struct Queue *translation_units;
+ struct Queue *source_files;
+ struct Queue *errors;
+
+ /*
+ we the type node structures from
+ all the translation units are stored here
+ */
+ struct Map *types;
+
+ struct Linkage *external_linkage;
+ };
+ struct Translation_Data
+ {
+ struct Queue *tokens;
+
+
+ struct Queue *errors;
+ size_t number_of_errors_when_last_checked;
+
+
+ struct Queue *source_files;
+
+ struct Map *macros;
+
+ /*passed from program struct*/
+ struct Map *types;
+ struct Linkage *external_linkage;
+ struct Linkage *internal_linkage;
+ /*end of passed from program struct*/
+ };
+
+ struct Program* get_program();
+ struct Source_Name* get_source_name(char *filename,char *base);
+
+ struct Source_File* extract_source_file(FILE *in,struct Source_Name *name);
+ struct Source_File* get_source_file(char *filename,char **where_to_search);
+ void normalise_source_name(struct Source_Name *name);
+
+ struct Translation_Data* get_translation_data(struct Map *types,struct Linkage *internal_linkage,struct Linkage *external_linkage);
+
+
+ struct Program* parse_program(char **base_source_names);
+ void lex_program(struct Translation_Data *hold,struct Source_File *file);
+ void entype_program(struct Program *program);
+
+
+ char has_new_errors(struct Translation_Data *translation_data);
+ char has_no_tokens(struct Translation_Data *translation_data);
+
+ void delete_program(struct Program *program);
+ void delete_translation_data(struct Translation_Data *translation_data);
+ void destroy_translation_data(struct Translation_Data *translation_data);
+ void assimilate_translation_data(struct Program *program,struct Translation_Data *translation_data);
+
+ #endif
F diff --git a/frontend/semantics/program.hh b/frontend/semantics/program.hh new file mode 100644 --- /dev/null +++ b/frontend/semantics/program.hh
+ #ifndef GCC_PROGRAM_HH
+ #define GCC_PROGRAM_HH GCC_PROGRAM_HH
+
+ struct Program;
+ struct Translation_Data;
+
+
+ #endif
F diff --git a/lex/chonky.c b/lex/chonky.c deleted file mode 100644 --- a/lex/chonky.c +++ /dev/null
- #ifndef GKEYWORDS_MENU_C
- #define GKEYWORDS_MENU_C GKEYWORDS_MENU_C
- #include"chonky.h"
- #include<stddef.h>
-
- int cmpr[256]={0,0,0,0,0,0,0,0,0,57,58,57,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,29,30,31,0,32,33,34,37,38,41,42,44,43,45,46,28,28,28,28,28,28,28,28,28,28,47,48,49,51,50,52,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,39,53,40,54,55,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,35,56,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
- int uncmpr[256]={0,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,57,33,34,35,37,38,39,123,125,40,41,91,93,42,43,45,44,46,47,58,59,60,62,61,63,92,94,95,124,32,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
-
-
- struct automata_entry chonky[]={
- {0,KW_NOTYPE,{NULL,&(chonky[2]),&(chonky[11]),&(chonky[12]),&(chonky[13]),&(chonky[14]),&(chonky[15]),&(chonky[16]),&(chonky[17]),&(chonky[2]),&(chonky[18]),&(chonky[2]),&(chonky[2]),&(chonky[19]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[20]),&(chonky[21]),&(chonky[22]),&(chonky[23]),&(chonky[24]),&(chonky[25]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[1]),&(chonky[26]),&(chonky[3]),&(chonky[27]),&(chonky[28]),&(chonky[29]),&(chonky[30]),&(chonky[31]),&(chonky[32]),&(chonky[33]),&(chonky[34]),&(chonky[35]),&(chonky[36]),&(chonky[37]),&(chonky[38]),&(chonky[39]),&(chonky[40]),&(chonky[41]),&(chonky[5]),&(chonky[42]),&(chonky[43]),&(chonky[44]),&(chonky[45]),&(chonky[46]),&(chonky[47]),&(chonky[48]),&(chonky[49]),&(chonky[50]),&(chonky[51]),NULL,NULL,} },
- {1,KW_NUMBER,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {0,KW_NOTYPE,{&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[4]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),} },
- {1,KW_STRING,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_FORWARD_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[6]),NULL,NULL,NULL,NULL,&(chonky[10]),NULL,NULL,NULL,NULL,&(chonky[9]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[7]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
- {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[8]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
- {1,KW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_DIV_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_COMMENT,{&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),&(chonky[10]),NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[52]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[53]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[54]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[55]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[56]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[57]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[58]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[59]),&(chonky[2]),&(chonky[60]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[61]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[62]),&(chonky[2]),&(chonky[2]),&(chonky[63]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[64]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[65]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[66]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[67]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[68]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[69]),&(chonky[70]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[71]),&(chonky[2]),&(chonky[2]),&(chonky[72]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[73]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[74]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[75]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[76]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_EXCLAMATION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[77]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_HASHTAG,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[78]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PERCENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[79]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[80]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[81]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_QUOTE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_OPEN_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_CLOSE_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_OPEN_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_CLOSE_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_OPEN_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_CLOSE_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_STAR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[82]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[83]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[84]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[85]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[86]),&(chonky[87]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_COMMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_DOT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SEMI_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_LESS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[88]),NULL,&(chonky[89]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MORE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[90]),&(chonky[91]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[92]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_QUESTION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_BACK_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_HAT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[93]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_FLOOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[94]),NULL,NULL,NULL,NULL,&(chonky[95]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[96]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[97]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[98]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[99]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[100]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[101]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_DO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[102]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[103]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[104]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[105]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[106]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[107]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[108]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_IF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[109]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[110]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[111]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[112]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[113]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[114]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[115]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[116]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[117]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[118]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[119]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[120]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[121]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[122]),&(chonky[2]),&(chonky[2]),&(chonky[123]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[124]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_NOT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_HASHTAG_HASHTAG,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PERCENT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AND_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AND_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_STAR_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PLUSPLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PLUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MINUSMINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ARROW,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MINUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SHIFT_LEFT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[125]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_LESS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SHIFT_RIGHT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[126]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MORE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_EQEQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_HAT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PIPE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PIPE_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[127]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[128]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[129]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[130]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[131]),&(chonky[132]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[133]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[134]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[135]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[136]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[137]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[138]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_FOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[139]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_INT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[140]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[141]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[142]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[143]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[144]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[145]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[146]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[147]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[148]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[149]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[150]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[151]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[152]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[153]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[154]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_SHIFT_LEFT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SHIFT_RIGHT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AUTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[155]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_CASE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_CHAR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[156]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[157]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[158]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[159]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ELSE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ENUM,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[160]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[161]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_GOTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_LONG,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[162]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[163]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[164]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[165]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[166]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[167]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[168]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[169]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[170]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[171]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[172]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_VOID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[173]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[174]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_BREAK,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_CONST,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[175]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[176]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[177]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[178]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_FLOAT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[179]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[180]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_SHORT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[181]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[182]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[183]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[184]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[185]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[186]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_UNION,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[187]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[188]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_WHILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[189]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[190]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_DOUBLE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_EXTERN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[191]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_RETURN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_SIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_SIZEOF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_STATIC,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_STRUCT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_SWITCH,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[192]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[193]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[194]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[195]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_DEFAULT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[196]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_TYPEDEF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[197]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[198]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_CONTINUE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_REGISTER,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_UNSIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },
- {1,KW_VOLATILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,NULL,} },};
-
- #endif /*#ifndef GKEYWORDS_MENU_C*/
F diff --git a/lex/chonky.h b/lex/chonky.h deleted file mode 100644 --- a/lex/chonky.h +++ /dev/null
- #ifndef GKEYWORDS_MENU_H
- #define GKEYWORDS_MENU_H GKEYWORDS_MENU_H
- #include <stddef.h>
-
-
-
- enum KEYWORDS{KW_AUTO,KW_DO,KW_DOUBLE,KW_INT,KW_STRUCT,KW_BREAK,KW_ELSE,KW_LONG,KW_SWITCH,KW_CASE,KW_ENUM,KW_REGISTER,KW_TYPEDEF,KW_CHAR,KW_EXTERN,KW_RETURN,KW_UNION,KW_CONST,KW_FLOAT,KW_SHORT,KW_UNSIGNED,KW_CONTINUE,KW_FOR,KW_SIGNED,KW_VOID,KW_DEFAULT,KW_GOTO,KW_SIZEOF,KW_VOLATILE,KW_IF,KW_STATIC,KW_WHILE,KW_EXCLAMATION,KW_BACK_SLASH,KW_PERCENT,KW_AND,KW_AND_AND,KW_QUOTE,KW_OPEN_NORMAL,KW_CLOSE_NORMAL,KW_STAR,KW_PLUS,KW_COMMA,KW_MINUS,KW_DOT,KW_ARROW,KW_COLUMN,KW_SEMI_COLUMN,KW_LESS,KW_EQ,KW_EQEQ,KW_MORE,KW_QUESTION,KW_OPEN_SQUARE,KW_CLOSE_SQUARE,KW_HAT,KW_FLOOR,KW_OPEN_CURLY,KW_CLOSE_CURLY,KW_PIPE,KW_PIPE_PIPE,KW_TILDE,KW_PLUSPLUS,KW_MINUSMINUS,KW_SHIFT_RIGHT,KW_SHIFT_LEFT,KW_LESS_EQ,KW_MORE_EQ,KW_NOT_EQ,KW_PLUS_EQ,KW_MINUS_EQ,KW_STAR_EQ,KW_PERCENT_EQ,KW_SHIFT_LEFT_EQ,KW_SHIFT_RIGHT_EQ,KW_AND_EQ,KW_HAT_EQ,KW_PIPE_EQ,KW_DIV_EQ,KW_FORWARD_SLASH,KW_NOTYPE,KW_NUMBER,KW_COMMENT,KW_ID,KW_STRING,PKW_IF,PKW_IFDEF,PKW_IFNDEF,PKW_ELIF,PKW_ELSE,PKW_ENDIF,PKW_INCLUDE,PKW_DEFINE,PKW_UNDEF,PKW_LINE,PKW_ERROR,PKW_PRAGMA,PKW_COMMENT,PKW_NOTYPE,KW_HASHTAG,KW_HASHTAG_HASHTAG};
-
-
- struct automata_entry
- {
- unsigned char is_final;
- enum KEYWORDS type;
- struct automata_entry* delta[59];
- };
- extern struct automata_entry chonky[];
- extern int cmpr[256];
- extern int uncmpr[256];
-
- #endif
F diff --git a/lex/chonky_jr.c b/lex/chonky_jr.c deleted file mode 100644 --- a/lex/chonky_jr.c +++ /dev/null
- #ifndef GPREPROCESSING_KEYWORDS_MENU_C
- #define GPREPROCESSING_KEYWORDS_MENU_C GPREPROCESSING_KEYWORDS_MENU_C
- #include"chonky.h"
- #include "chonky_jr.h"
-
-
- struct automata_entry chonky_jr[]={
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[5]),&(chonky_jr[6]),NULL,NULL,NULL,&(chonky_jr[7]),NULL,NULL,&(chonky_jr[8]),NULL,NULL,NULL,&(chonky_jr[9]),NULL,NULL,NULL,NULL,&(chonky_jr[10]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[3]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
- {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[4]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
- {1,PKW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[11]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[12]),NULL,&(chonky_jr[13]),NULL,NULL,NULL,&(chonky_jr[14]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[15]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[16]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[17]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[18]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[19]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[20]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[21]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[22]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_IF,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[26]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,&(chonky_jr[27]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[28]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,&(chonky_jr[29]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[30]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[31]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[32]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[33]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[34]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[36]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[37]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[39]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[40]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[42]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ELIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ELSE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[45]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[47]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_LINE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[48]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[49]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[50]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ENDIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ERROR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_IFDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[51]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[52]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,&(chonky_jr[53]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_UNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_DEFINE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_IFNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[54]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_PRAGMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_INCLUDE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },};
-
- #endif /*#ifndef GPREPROCESSING_KEYWORDS_MENU_C*/
F diff --git a/lex/chonky_jr.h b/lex/chonky_jr.h deleted file mode 100644 --- a/lex/chonky_jr.h +++ /dev/null
- #ifndef GPREPROCESSING_KEYWORDS_MENU_H
- #define GPREPROCESSING_KEYWORDS_MENU_H GPREPROCESSING_KEYWORDS_MENU_H
- #include <chonky_jr.h>
-
-
- extern struct automata_entry chonky_jr[];
-
-
- #endif
F diff --git a/lex/lexer.c b/lex/lexer.c deleted file mode 100644 --- a/lex/lexer.c +++ /dev/null
- #ifndef LEXER_C
- #define LEXER_C LEXER_C
- /*asdf*/#include <lexer.h>
-
- char *well_known_locations_base[]={"","/usr/include/","/usr/include/x86_64-linux-gnu/",NULL};
- void lex(struct Source_File *src,struct Translation_Data *translation_data)
- {
-
-
- struct token *current_token;
-
- while(src->src[src->where_in_src]!='\0')
- {
- if(has_new_errors(translation_data))
- {
- push_lexing_error("Fatal error",src,translation_data);
- return;
- }
-
- current_token=get_next_token(src,&chonky[0],1);
- if(current_token->type==KW_HASHTAG)
- {
- if(src->is_in_the_begining_of_line)
- {
- parse_preproc_line(src,translation_data);
- free(current_token);
- }else
- {
- push_lexing_error("preprocessing directive must be at the beggining of the line",src,translation_data);
- free(current_token);
- while((current_token=get_next_token(src,&chonky[0],0))->type!=KW_NOTYPE)
- {
- free(current_token);
- }
- free(current_token);
- }
-
- }else if(current_token->type!=KW_NOTYPE)
- {
-
- expand_macro(current_token,src,translation_data);
- }else
- {
- if(src->where_in_src!=src->src_size)
- push_lexing_error("unexpected character",src,translation_data);
- free(current_token);
- return;
- }
- }
-
- }
-
-
-
- /*hack*/
- void handle_splicing(struct token *word)
- {
- size_t back;
- size_t front;
- if(word->data_size==0)
- return;
- front=0;
- for(front;front<word->data_size-1;++front)
- {
- if(word->data[front]=='\\' && word->data[front+1]=='\n')
- {
- front+=2;
- break;
- }
- }
- if(front==word->data_size-1)
- return;
-
- for(back=front-2;front<word->data_size-1;)
- {
- if(word->data[front]=='\\' && word->data[front+1]=='\n')
- {
- front+=2;
- }else
- {
- word->data[back]=word->data[front];
- ++front;
- ++back;
- }
- }
- word->data[back]=word->data[front];
- }
- void goto_new_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- char hold_char;
- while( (hold_char=src_getc(src,1,1,0)) != '\0' && hold_char != '\n');
- src->is_in_the_begining_of_line=1;
- ++src->where_in_src;
- ++src->which_row;
- src->which_column=0;
- }
- void chase_new_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- char hold_char;
- for(hold_char=src_getc(src,1,1,0);hold_char!='\n' && hold_char!='\0';
- hold_char=src_getc(src,1,1,0));
-
- ++src->where_in_src;
- ++src->which_row;
- src->is_in_the_begining_of_line=1;
- src->which_column=0;
-
-
- }
- /*returns the number of bytes skipped*/
- size_t skip_line_splice(struct Source_File *src)
- {
- size_t current_size=0;
- while(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='\\' && src->src[src->where_in_src+1]=='\n')
- {
- src->where_in_src+=2;
- current_size+=2;
- }
- return current_size;
- }
-
- void skip_white_space(struct Source_File *src,char skip_new_line)
- {
- char hold_char;
- while(hold_char=src_getc(src,1,1,skip_new_line))
- {
- if(hold_char=='\n' && !skip_new_line)
- {
- return ;
- }
- if(hold_char!=' ' && hold_char!='\t')
- {
- src_ungetc(src);
- return ;
- }
- }
- }
- struct token_vector Lex_Queue_Condense(struct Queue *tokens)
- {
- size_t i;
- struct token_vector ret;
- struct token *hold;
-
- ret.tokens=malloc(sizeof(struct token)*tokens->size);
- ret.size=tokens->size;
-
- for(i=0;tokens->size>0;++i)
- {
- hold=Queue_Pop(tokens);
- ret.tokens[i]=*hold;
- free(hold);
- }
-
- Queue_Destroy(tokens);
-
- return ret;
- }
-
- char check(struct Translation_Data *translation_data,enum KEYWORDS kw,size_t ahead)
- {
- size_t i;
- struct Queue_Node *current;
- if(translation_data->tokens->size<=ahead)
- {
- return 0;
- }else
- {
- for(i=0,current=translation_data->tokens->first;i<ahead;++i,current=current->prev);
-
- if( ((struct token*)(current->data))->type == kw )
- {
- return 1;
- }else
- {
- return 0;
- }
- }
- }
- char get_and_check(struct Translation_Data *translation_data,enum KEYWORDS kw)
- {
- struct token *hold_token;
- if(translation_data->tokens->size==0)
- {
- return 0;
- }else
- {
- hold_token=translation_data->tokens->first->data;
- if(hold_token->type!=kw)
- {
- return 0;
- }else
- {
- hold_token=Queue_Pop(translation_data->tokens);
- free(hold_token);
- return 1;
- }
- }
- }
- char get_and_check_unsafe(struct Translation_Data *translation_data,enum KEYWORDS kw)
- {
- struct token *hold_token;
- hold_token=translation_data->tokens->first->data;
- if(hold_token->type!=kw)
- {
- return 0;
- }else
- {
- hold_token=Queue_Pop(translation_data->tokens);
- free(hold_token);
- return 1;
- }
- }
- void chomp(struct Translation_Data *translation_data)
- {
- free(Queue_Pop(translation_data->tokens));
- }
-
- enum KEYWORDS kw_get(struct Translation_Data *translation_data)
- {
- if(translation_data->tokens->size==0)
- return KW_NOTYPE;
- return ((struct token*)(translation_data->tokens->first->data))->type;
-
- }
-
- struct token* get_next_token(struct Source_File *src,struct automata_entry *start_state,char skip_new_line)
- {
- int temp;
- char hold_char;
-
- struct token *ret;
- struct automata_entry *current_state;
- struct automata_entry *best_state;
-
- /*ignore leading spaces,tabs and newlines*/
- skip_white_space(src,skip_new_line);
-
- src_reset_token_data(src,1);
-
- best_state=current_state=start_state;
-
-
- while( (hold_char=src_getc(src,1,0,0)) !='\0')
- {
- if(hold_char=='\n' && !skip_new_line)
- {
- break;
- }
- current_state=current_state->delta[cmpr[hold_char]];
- if(current_state==NULL)
- {
- if(best_state->type==KW_COMMENT || best_state->type==PKW_COMMENT)
- {
- /*TODO account for new lines not counted in comment*/
- src_reset_token_data(src,0);
- best_state=current_state=start_state;
- skip_white_space(src,1);
- }else
- {
- return src_extract_token(src,best_state->type);
- }
-
- }else
- {
- if(current_state->is_final)
- {
- best_state=current_state;
- src_assimilate_into_best_token(src);
- }
- }
- }
-
- if(best_state->type==KW_COMMENT || best_state->type==PKW_COMMENT)
- {
- return src_extract_token(src,KW_NOTYPE);
- }else
- {
- return src_extract_token(src,best_state->type);
- }
- return ret;
- }
- /*here be dragons*/
- char src_getc(struct Source_File *src,char skip_line_splice,char skip_comments,char skip_new_line)
- {
- superhack:
- if(src->src[src->where_in_src]=='\\' && skip_line_splice)
- {
- if(src->where_in_src < src->src_size-1 && src->src[src->where_in_src+1]=='\n')
- {
- src->where_in_src+=2;
- ++src->which_row;
- src->token_size+=2;
- src->which_column=0;
- goto superhack;
- }else
- {
- ++src->token_size;
- ++src->which_column;
- ++src->where_in_src;
- src->is_in_the_begining_of_line=0;
- return '\\';
- }
- }else
- {
- if(src->src[src->where_in_src]=='\n' && skip_new_line)
- {
- ++src->which_row;
- src->which_column=0;
- src->is_in_the_begining_of_line=1;
-
- ++src->where_in_src;
- goto superhack;
- }else if(src->src[src->where_in_src]=='/' && skip_comments)
- {
- if(src->src[src->where_in_src+1]=='*')
- {
- char hold_char;
-
-
- src->where_in_src+=2;
- hold_char=src_getc(src,1,0,1);
- while(hold_char)
- {
- if(hold_char=='*')
- {
- hold_char=src_getc(src,1,0,1);
- if(hold_char=='\0')
- {
- src->where_in_src=src->src_size;
- return '\0';
- }
- else if(hold_char=='/')
- {
- goto superhack;
- }
- }else
- {
- hold_char=src_getc(src,1,0,1);
- }
- }
- src->where_in_src=src->src_size;
- return '\0';
-
- }
- }else
- {
- ++src->which_column;
- }
- ++src->token_size;
- if(src->src[src->where_in_src]!='#' || src->is_in_the_begining_of_line!=1)
- src->is_in_the_begining_of_line=0;
- if(src->src[src->where_in_src]=='\n')
- {
- return '\n';
- }
-
- if(src->src[src->where_in_src]=='\0')
- return src->src[src->where_in_src];
- else
- return src->src[src->where_in_src++];
- }
- }
- void src_ungetc(struct Source_File *src)
- {
- --src->where_in_src;
- if(src->src[src->where_in_src]=='\n')
- {
- --src->which_row;
- src->which_column=0;
- }
- }
- struct token* copy_token(struct token *src)
- {
- struct token *cpy;
- cpy=malloc(sizeof(struct token));
- *cpy=*src;
- return cpy;
- }
- struct token* src_extract_token(struct Source_File *src,enum KEYWORDS kw)
- {
- struct token *ret;
- ret=malloc(sizeof(struct token));
- ret->type=kw;
-
- ret->data_size=src->best_token_size;
- ret->column=src->best_token_column;
- ret->line=src->best_token_line;
- ret->data=src->src+src->best_token_where_in_src_start;
- ret->filename=src->src_name->filename;
- handle_splicing(ret);
- src->where_in_src=src->best_token_where_in_src_end;
- src->is_in_the_begining_of_line=src->best_token_beg_line;
- return ret;
- }
-
- void src_reset_token_data(struct Source_File *src,char use_src_as_base)
- {
- src->token_size=0;
- src->best_token_size=0;
- src->best_token_line=src->which_row;
- src->best_token_column=src->which_column;
- if(use_src_as_base)
- {
- src->best_token_where_in_src_end=src->where_in_src;
- }else
- {
- src->where_in_src=src->best_token_where_in_src_end;
- }
- src->best_token_where_in_src_start=src->where_in_src;
- }
- void src_assimilate_into_best_token(struct Source_File *src)
- {
- src->best_token_size=src->token_size;
- src->best_token_line=src->which_row;
- src->best_token_column=src->which_column;
- src->best_token_where_in_src_end=src->where_in_src;
- src->best_token_beg_line=src->is_in_the_begining_of_line;
- }
- void delete_source_file(struct Source_File *src)
- {
- delete_source_name(src->src_name);
- free(src->src);
- free(src);
- }
- void delete_source_name(struct Source_Name *name)
- {
- free(name->filename);
- free(name->base);
- free(name);
- }
- void flush_tokens(struct Queue *tokens)
- {
- while(tokens->size>0)
- free(Queue_Pop(tokens));
- }
- #endif
F diff --git a/lex/lexer.h b/lex/lexer.h deleted file mode 100644 --- a/lex/lexer.h +++ /dev/null
- #ifndef LEXER_H
- #define LEXER_H LEXER_H
- #include <lexer.hh>
- #include <stdio.h>
- #include <chonky.h>
- #include <chonky_jr.h>
- #include <queue.h>
- #include <program.h>
- #include <preprocessing.h>
-
- extern char *well_known_locations_base[];
- struct token
- {
- enum KEYWORDS type;
- size_t data_size;
- char *data;
- size_t line,column;
- /*:X*/
- const char *filename;
- };
-
- struct token_vector
- {
- struct token *tokens;
- size_t size;
- };
-
-
-
- struct Source_Name
- {
- char *filename;
- char *base;
- };
-
- struct Source_File
- {
- struct Source_Name *src_name;
-
- char *src;
- size_t src_size;
- size_t where_in_src;
- size_t which_column;
- size_t which_row;
-
- size_t token_size;
-
-
- size_t best_token_size;
- size_t best_token_line;
- size_t best_token_column;
-
- size_t best_token_where_in_src_start;
- size_t best_token_where_in_src_end;
- char best_token_beg_line;
-
-
- char is_in_the_begining_of_line;
-
- };
-
-
-
-
- void lex(struct Source_File *src,struct Translation_Data *translation_data);
- struct token* get_next_token(struct Source_File *src,struct automata_entry *start_state,char skip_new_line);
- struct token* copy_token(struct token *src);
- struct token_vector Lex_Queue_Condense(struct Queue *tokens);
- void handle_splicing(struct token *word);
- void chase_new_line(struct Source_File *src,struct Translation_Data *translation_data);
- void goto_new_line(struct Source_File *src,struct Translation_Data *translation_data);
- void skip_white_space(struct Source_File *src,char skip_new_line);
- size_t skip_line_splice(struct Source_File *src);
-
-
- char check(struct Translation_Data *translation_data,enum KEYWORDS kw,size_t ahead);
- char get_and_check(struct Translation_Data *translation_data,enum KEYWORDS kw);
- char get_and_check_unsafe(struct Translation_Data *translation_data,enum KEYWORDS kw);
- void chomp(struct Translation_Data *translation_data);
- enum KEYWORDS kw_get(struct Translation_Data *translation_data);
-
- char src_getc(struct Source_File *src,char skip_line_splice,char skip_comments,char skip_new_line);
- void src_ungetc(struct Source_File *src);
- struct token* src_extract_token(struct Source_File *src,enum KEYWORDS kw);
- void src_reset_token_data(struct Source_File *src,char use_src_as_base);
- void src_assimilate_into_best_token(struct Source_File *src);
-
- void delete_source_file(struct Source_File *src);
- void delete_source_name(struct Source_Name *name);
- void flush_tokens(struct Queue *tokens);
- #endif
F diff --git a/lex/lexer.hh b/lex/lexer.hh deleted file mode 100644 --- a/lex/lexer.hh +++ /dev/null
- #ifndef LEXER_HH
- #define LEXER_HH LEXER_HH
-
- /*struct declarations. Definitions are in .h*/
-
- struct token;
- struct token_vector;
- struct define_directive;
- struct Source_Name;
- struct Source_File;
-
- #endif
F diff --git a/lex/preprocessing.c b/lex/preprocessing.c deleted file mode 100644 --- a/lex/preprocessing.c +++ /dev/null
- #ifndef GCC_PREPROCESSING_C
- #define GCC_PREPROCESSING_C GCC_PREPROCESSING_C
- #include <preprocessing.h>
-
-
- /*we have skipped the leading #*/
- /*
- #include string
- #include <qchar>
- #define [ id(list) replacement
- #undef [ id ]
- #if
- #ifdef
- #ifndef
- #
-
- #elif
- #else
- #endif
-
-
- #error
- #pragma
- #line number [string]
-
- */
- void parse_preproc_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct token *hold;
- hold=get_next_token(src,&chonky_jr[0],0);
- switch(hold->type)
- {
- case PKW_INCLUDE:
- free(hold);
- parse_include_line(src,translation_data);
- return;
- case PKW_DEFINE:
- free(hold);
- parse_define_line(src,translation_data);
- return;
- case PKW_IF:
- free(hold);
- parse_preproc_if_line(src,translation_data);
- return;
- case PKW_IFDEF:
- free(hold);
- parse_preproc_ifdef_line(src,translation_data);
- return;
- case PKW_IFNDEF:
- free(hold);
- parse_preproc_ifndef_line(src,translation_data);
- return;
- case PKW_UNDEF:
- free(hold);
- parse_preproc_undef_line(src,translation_data);
- return;
- case PKW_ENDIF:
- free(hold);
- push_lexing_error("unmatched endif",src,translation_data);
- return;
- case PKW_ELSE:
- free(hold);
- push_lexing_error("unmatched else",src,translation_data);
- return;
- case PKW_ELIF:
- free(hold);
- push_lexing_error("unmatched elif",src,translation_data);
- return;
- case PKW_LINE:
- free(hold);
- parse_preproc_line_line(src,translation_data);
- return;
- case PKW_ERROR:
- free(hold);
- parse_preproc_error_line(src,translation_data);
- return;
- default:
- /*TODO error*/
- free(hold);
- push_lexing_error("expected a preprocessing directive",src,translation_data);
- return;
-
- }
- }
- void parse_include_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct token *hold;
- hold=get_next_token(src,&chonky[0],0);
- if(hold->type==KW_STRING)
- {
- char *where_to_search[]={src->src_name->base,NULL};
- struct Source_File *hold_file;
-
- hold->data[hold->data_size-1]='\0';
- hold->data_size-=2;
- ++hold->data;
- handle_splicing(hold);
-
-
- /*search in the directory of the file from which we include*/
- hold_file=get_source_file(hold->data,where_to_search);
- /*fallback to well known locations == <>*/
- if(hold_file==NULL)
- {
- hold_file=get_source_file(hold->data,well_known_locations_base);
- if(hold_file==NULL)
- {
- /*TODO error*/
- push_lexing_error("file in include directive not found",src,translation_data);
- free(hold);
- return;
- }
- }
- lex_program(translation_data,hold_file);
- free(hold);
- }else if(hold->type==KW_LESS)/*hack*/
- {
- struct Source_File *hold_file;
- ++hold->data;
- while(src->src[src->where_in_src]!='>' && src->where_in_src<src->src_size)
- {
- ++src->where_in_src;
- ++hold->data_size;
- }
- if(src->where_in_src==src->src_size)
- {
- /*TODO error*/
- free(hold);
- return;
- }
- /*skip the >*/
- ++src->where_in_src;
- hold->data[hold->data_size-1]='\0';
- handle_splicing(hold);
-
- hold_file=get_source_file(hold->data,well_known_locations_base);
- if(hold_file==NULL)
- {
- /*TODO error*/
- push_lexing_error("file in include directive not found",src,translation_data);
- free(hold);
- return;
- }
-
- lex_program(translation_data,hold_file);
- free(hold);
-
- }else
- {
- /*TODO error*/
- push_lexing_error("include error",src,translation_data);
- free(hold);
- return;
- }
-
-
- chase_new_line(src,translation_data);
- }
-
- /*skipped # and 'define'*/
- void parse_define_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct token *hold_token;
- struct token *macro_name;
- struct define_directive *new_macro;
- struct Queue *hold_tokens;
- size_t number_of_arguments=0;
- int *hold_index;
-
-
- macro_name=get_next_token(src,&chonky[0],0);
- if(macro_name->type!=KW_ID)
- {
- free(macro_name);
- push_lexing_error("expected id after #define",src,translation_data);
- return;
- }
-
- new_macro=get_define_directive(macro_name);
- /*white space*/
- hold_token=get_next_token(src,&chonky[0],0);
- if(hold_token->type==KW_OPEN_NORMAL)
- {
- free(hold_token);
- while(1)
- {
- hold_token=get_next_token(src,&chonky[0],0);
- if(hold_token->type!=KW_ID)
- {
- push_lexing_error("expected id in define argument list",src,translation_data);
- free(hold_token);
- break;
- }
- hold_index=malloc(sizeof(int));
- *hold_index=number_of_arguments;
- ++number_of_arguments;
- Map_Push(new_macro->arguments,hold_token->data,hold_token->data_size,hold_index);
- free(hold_token);
- hold_token=get_next_token(src,&chonky[0],0);
- if(hold_token->type!=KW_COMMA)
- {
- if(hold_token->type==KW_CLOSE_NORMAL)
- {
- free(hold_token);
- break;
- }else
- {
- push_lexing_error("expected ',' in define argument list",src,translation_data);
- free(hold_token);
- break;
- }
- }
- free(hold_token);
- }
-
- }else if(hold_token->type==KW_NOTYPE)
- {
- free(hold_token);
- }
-
- /*push things*/
-
- hold_tokens=translation_data->tokens;
- translation_data->tokens=new_macro->macro_tokens;
-
- new_macro->number_of_arguments=number_of_arguments;
- /*there is something in hold_token*/
- while( (hold_token=get_next_token(src,&chonky[0],0))->type != KW_NOTYPE)
- {
- expand_macro(hold_token,src,translation_data);
- }
-
- /*removing the notype token*/
- free(hold_token);
-
- translation_data->tokens=hold_tokens;
- /*push the directive into the macro map*/
- Map_Push(translation_data->macros,macro_name->data,macro_name->data_size,new_macro);
- //free(macro_name);
- chase_new_line(src,translation_data);
-
- }
- /*
- id[(list)] tokens \n
- */
- struct define_directive* get_define_directive(struct token* macro_name)
- {
- struct define_directive *ret;
- ret=malloc(sizeof(struct token));
- ret->macro_name=macro_name;
-
- ret->macro_tokens=malloc(sizeof(struct Queue));
- Queue_Init(ret->macro_tokens);
-
- ret->arguments=malloc(sizeof(struct Map));
- Map_Init(ret->arguments);
-
- ret->number_of_arguments=0;
-
- return ret;
- }
-
- /*returns an array of queues*/
- struct Queue* make_define_argument_list(size_t number_of_arguments)
- {
- size_t i;
- struct Queue *ret;
-
- if(number_of_arguments==0)
- return NULL;
-
- ret=malloc(sizeof(struct Queue)*number_of_arguments);
-
- for(i=0;i<number_of_arguments;++i)
- {
- Queue_Init(ret+i);
- }
- return ret;
- }
- void delete_define_argument_list(size_t number_of_arguments,struct Queue *args)
- {
- if(number_of_arguments==0)
- {
- assert(args==NULL);
- return;
- }
- flush_macro_arguments(number_of_arguments,args);
- free(args);
- }
-
- void expand_macro_argument(struct Queue *replacement_tokens,struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct Queue_Node *it;
- struct token *hold_token;
- for(it=replacement_tokens->first;it!=NULL;it=it->prev)
- {
- hold_token=copy_token((struct token*)it->data);
- hold_token->line=src->which_row;
- hold_token->column=src->which_column;
- Queue_Push(translation_data->tokens,hold_token);
- //Queue_Push(translation_data->tokens,copy_token((struct token*)it->data));
- }
- }
- void load_macro_arguments(struct Queue *args,size_t number_of_arguments,struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct token *hold;
- struct Queue *hack;
- size_t i;
- size_t j;
-
- if(number_of_arguments==0)
- return;
-
- hold=get_next_token(src,&chonky[0],1);
- if(hold->type!=KW_OPEN_NORMAL)
- {
- push_lexing_error("expected '(' in macro expansion",src,translation_data);
- free(hold);
- return;
- }
- free(hold);
-
- hack=translation_data->tokens;
- for(i=0;i<number_of_arguments-1;++i)
- {
- translation_data->tokens=args+i;
- for(
- hold=get_next_token(src,&chonky[0],1),j=0;
- hold->type!=KW_COMMA && hold->type!=KW_NOTYPE;
- hold=get_next_token(src,&chonky[0],1),++j
- )
- {
- expand_macro(hold,src,translation_data);
- }
- if(hold->type==KW_NOTYPE)
- {
- push_lexing_error("expected ',' in macro argument list",src,translation_data);
- free(hold);
- goto cleanup;
- }
- if(j==0)
- {
- push_lexing_error("expected argument in macro argument list",src,translation_data);
- free(hold);
- goto cleanup;
- }
-
- }
- translation_data->tokens=args+i;
- for(
- hold=get_next_token(src,&chonky[0],1),j=0;
- hold->type!=KW_CLOSE_NORMAL;
- hold=get_next_token(src,&chonky[0],1),++j
- )
- {
- if(hold->type==KW_NOTYPE)
- {
- push_lexing_error("expected ')' in macro argument list",src,translation_data);
- free(hold);
- goto cleanup;
- }
- expand_macro(hold,src,translation_data);
- }
- if(j==0)
- {
- push_lexing_error("expected argument in macro argument list",src,translation_data);
- free(hold);
- }
-
- cleanup:
- translation_data->tokens=hack;
-
-
- }
- void flush_macro_arguments(size_t number_of_arguments,struct Queue *args)
- {
- size_t i;
- for(i=0;i<number_of_arguments;++i)
- {
- while(args[i].size>0)
- free(Queue_Pop(args+i));
- }
- }
- /*macro name token is freed on expansion , if it is not a macro name it is pushed into token queue*/
- void expand_macro(struct token* macro_name,struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct define_directive *hold=NULL;
- struct token *hold_token;
- int *index;
- struct Queue_Node *it;
- struct Queue *argument_list;
-
- if(macro_name->type==KW_ID)
- hold=Map_Check(translation_data->macros,macro_name->data,macro_name->data_size);
- if(hold!=NULL)
- {
- free(macro_name);
- argument_list=make_define_argument_list(hold->number_of_arguments);
- load_macro_arguments(argument_list,hold->number_of_arguments,src,translation_data);
- if(translation_data->errors->size>0)
- {
- delete_define_argument_list(hold->number_of_arguments,argument_list);
- return;
- }
-
-
- for(it=hold->macro_tokens->first;it!=NULL;it=it->prev)
- {
- hold_token=(struct token*)it->data;
- index=Map_Check(hold->arguments,hold_token->data,hold_token->data_size);
- if(index!=NULL)
- {
- expand_macro_argument(argument_list+*index,src,translation_data);
- }else
- {
- hold_token=copy_token(hold_token);
-
- hold_token->line=src->which_row;
- hold_token->column=src->which_column;
-
- Queue_Push(translation_data->tokens,hold_token);
- }
- }
- delete_define_argument_list(hold->number_of_arguments,argument_list);
- }else
- {
- /*this isn't a macro, so we just push it to the token queue*/
- Queue_Push(translation_data->tokens,macro_name);
- }
- }
- void preproc_lex_first_part(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct Source_File temp_src;
- struct token *hold_token;
- char just_in_case;
-
- temp_src=*src;
- hold_token=preproc_find_else(src,translation_data,1);
-
-
- temp_src.src_size=src->where_in_src;
- just_in_case=src->src[src->where_in_src];
- src->src[src->where_in_src]='\0';
-
- lex(&temp_src,translation_data);
-
- src->src[src->where_in_src]=just_in_case;
-
- if(hold_token!=NULL)
- free(hold_token);
- do
- {
- hold_token=preproc_find_else(src,translation_data,0);
- if(hold_token)
- free(hold_token);
- else
- break;
- }while(!has_new_errors(translation_data));
-
- if(hold_token!=NULL)
- {
- free(hold_token);
- push_lexing_error("could not find matching #else, #elif or #endif",src,translation_data);
- }
- }
- /*
- we have skipped the #if part so this could be used for elif
- */
- void parse_preproc_if_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
-
- struct Queue *tokens;
- struct Queue *swap;
- struct AST *condition;
- struct Scope *null_scope;
- struct token *hold_token;
- int result;
-
- null_scope=get_normal_scope(NULL,FILE_SCOPE);
-
- tokens=lex_line(src,translation_data,1);
-
- swap=translation_data->tokens;
- translation_data->tokens=tokens;
-
- condition=parse_expression(translation_data,null_scope);
- result=evaluate_const_expression_integer(condition);
- delete_normal_scope((struct Normal_Scope*)null_scope);
- delete_ast(condition);
-
- if(result)
- {
- preproc_lex_first_part(src,translation_data);
- }else
- {
- hold_token=preproc_find_else(src,translation_data,0);
- if(hold_token!=NULL && hold_token->type==PKW_ELIF)
- {
- parse_preproc_if_line(src,translation_data);
- }
- else if(hold_token!=NULL)
- {
- preproc_lex_first_part(src,translation_data);
- }
- }
-
-
- }
- struct token* preproc_find_else(struct Source_File *src,struct Translation_Data *translation_data,char jump_before)
- {
- struct token *hold_token;
- struct Source_File temp_src;
- int indentation=1;
-
- temp_src=*src;
- while(src->src[src->where_in_src]!='\0' && indentation)
- {
- /*BEWARE*/
- temp_src=*src;
- /*END BEWARE*/
-
- hold_token=get_next_token(src,&chonky[0],1);
- if(hold_token->type==KW_HASHTAG)
- {
- free(hold_token);
- hold_token=get_next_token(src,&chonky_jr[0],0);
- switch(hold_token->type)
- {
- case PKW_IF:
- case PKW_IFDEF:
- case PKW_IFNDEF:
- ++indentation;
- break;
-
- case PKW_ENDIF:
- --indentation;
- break;
-
- case PKW_ELSE:
- case PKW_ELIF:
- if(indentation==1)
- {
- if(jump_before)
- *src=temp_src;
- return hold_token;
- }
- else
- {
- break;
- }
- case PKW_NOTYPE:
- free(hold_token);
- goto_new_line(src,translation_data);
- return NULL;
- }
- free(hold_token);
-
- }else if(hold_token->type!=KW_NOTYPE)
- {
- free(hold_token);
- }else
- {
- if(src->where_in_src!=src->src_size)
- push_lexing_error("unexpected character",src,translation_data);
- free(hold_token);
- return NULL;
- }
- goto_new_line(src,translation_data);
- }
- /*BEWARE*/
- //goto_new_line(src,translation_data);
- /*END BEWARE*/
- if(jump_before)
- *src=temp_src;
- return NULL;
- }
- void parse_preproc_ifdef_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct token *hold_token;
- hold_token=get_next_token(src,&chonky[0],0);
- if(hold_token==NULL || hold_token->type!=KW_ID)
- {
- free(hold_token);
- push_lexing_error("expected an id here",src,translation_data);
- chase_new_line(src,translation_data);
- return;
- }else
- {
- if(Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
- {
- preproc_lex_first_part(src,translation_data);
- }else
- {
- free(hold_token);
-
- hold_token=preproc_find_else(src,translation_data,1);
-
- if(hold_token!=NULL && hold_token->type==PKW_ELIF)
- {
- parse_preproc_if_line(src,translation_data);
- }else if(hold_token!=NULL)
- {
- preproc_find_else(src,translation_data,0);
- preproc_lex_first_part(src,translation_data);
- }
-
- free(hold_token);
- }
-
- }
- chase_new_line(src,translation_data);
- }
- void parse_preproc_ifndef_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct token *hold_token;
- hold_token=get_next_token(src,&chonky[0],0);
- if(hold_token==NULL || hold_token->type!=KW_ID)
- {
- push_lexing_error("expected an id here",src,translation_data);
- chase_new_line(src,translation_data);
- free(hold_token);
- return;
- }else
- {
- if(!Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
- {
- free(hold_token);
- preproc_lex_first_part(src,translation_data);
- }else
- {
- free(hold_token);
-
- hold_token=preproc_find_else(src,translation_data,1);
- if(hold_token!=NULL && hold_token->type==PKW_ELIF)
- {
- parse_preproc_if_line(src,translation_data);
- }
- else if(hold_token!=NULL)
- {
- preproc_find_else(src,translation_data,0);
- preproc_lex_first_part(src,translation_data);
- }
- free(hold_token);
- }
-
- }
- chase_new_line(src,translation_data);
- }
- void parse_preproc_undef_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct define_directive *hold_macro;
- struct token *id;
-
- id=get_next_token(src,&chonky[0],0);
- if(id->type!=KW_ID)
- {
- push_lexing_error("expected an id here",src,translation_data);
- }else
- {
- hold_macro=Map_Check(translation_data->macros,id->data,id->data_size);
- if(hold_macro!=NULL)
- {
- delete_macro(hold_macro);
- Map_Remove(translation_data->macros,id->data,id->data_size);
- }
- }
- free(id);
- chase_new_line(src,translation_data);
- }
- void parse_preproc_error_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- char *error;
- size_t line,column;
- error=src->src+src->where_in_src;
- line=src->which_row+1;
- column=src->which_column+1;
-
-
- goto_new_line(src,translation_data);
- src->src[src->where_in_src-1]='\0';
-
- Queue_Push(translation_data->errors,get_translation_error(error,line,column,src->src_name->filename));
-
- }
- void parse_preproc_line_line(struct Source_File *src,struct Translation_Data *translation_data)
- {
- struct Queue *tokens;
- struct Translation_Data hack;
- struct token *hold_line;
- struct token *hold_name;
-
- tokens=lex_line(src,translation_data,0);
- hack=*translation_data;
- hack.tokens=tokens;
- if(check(&hack,KW_NUMBER,0))
- {
- hold_line=(struct token*)Queue_Pop(tokens);
- src->which_row=evaluate_number_literal(hold_line);
- if(check(&hack,KW_STRING,0))
- {
- hold_name=(struct token*)Queue_Pop(tokens);
- hold_name->data[hold_name->data_size]='\0';
- if(tokens->size>0)
- {
- free(hold_line);
- free(hold_name);
- flush_tokens(tokens);
- push_lexing_error("expected a new line in #line preprocessing directive here",src,translation_data);
- return;
- }else
- {
- delete_source_name(src->src_name);
- src->src_name=get_source_name(hold_name->data,"");
- return;
- }
-
- }else if(tokens->size>0)
- {
- free(hold_line);
- flush_tokens(tokens);
- push_lexing_error("expected a string or new line in #line preprocessing directive here",src,translation_data);
- return;
- }
-
- }else
- {
- flush_tokens(tokens);
- push_lexing_error("expected a line number in #line preprocessing directive here",src,translation_data);
- return;
- }
- }
- void delete_macro(void *macro)
- {
- #define AS_MACRO(x) ((struct define_directive*)macro)
- free(AS_MACRO(macro)->macro_name);
- flush_tokens(AS_MACRO(macro)->macro_tokens);
- free(AS_MACRO(macro)->macro_tokens);
- Map_Map(AS_MACRO(macro)->arguments,free);
- free(AS_MACRO(macro)->arguments);
- free(macro);
- #undef AS_MACRO
- }
- struct Queue* lex_line(struct Source_File *src,struct Translation_Data *translation_data,char lex_defined_token)
- {
-
- struct Source_File temp_src;
- struct token *hold_token;
- struct Queue *tokens;
- char just_in_case;
-
- tokens=malloc(sizeof(struct Queue));
- Queue_Init(tokens);
-
-
- temp_src=*src;
- goto_new_line(src,translation_data);
- just_in_case=src->src[src->where_in_src];
- src->src[src->where_in_src]='\0';
-
- translation_data->tokens=tokens;
-
- while((hold_token=get_next_token(&temp_src,&chonky[0],0))->type!=KW_NOTYPE)
- {
- if(lex_defined_token && hold_token->type==KW_ID && hold_token->data_size==7 && gstrn_cmp(hold_token->data,"defined",7))
- {
- free(hold_token);
- hold_token=get_next_token(&temp_src,&chonky[0],0);
- if(hold_token->type==KW_OPEN_NORMAL)
- {
- free(hold_token);
- hold_token=get_next_token(&temp_src,&chonky[0],0);
- if(hold_token->type!=KW_ID)
- {
- push_lexing_error("expected an id after '(' in defined",src,translation_data);
- }else
- {
- struct token *hold_closing_token;
- hold_closing_token=get_next_token(&temp_src,&chonky[0],0);
- if(hold_closing_token->type!=KW_CLOSE_NORMAL)
- {
- push_lexing_error("expected an ')' after id in define",src,translation_data);
- }else
- {
- if(!Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
- {
- hold_token->type=KW_NUMBER;
- hold_token->data="0";
- hold_token->data_size=1;
- }else
- {
- hold_token->type=KW_NUMBER;
- hold_token->data="1";
- hold_token->data_size=1;
- }
-
- }
- }
- }else if(hold_token->type!=KW_ID)
- {
- push_lexing_error("expected an id after define",src,translation_data);
- }else
- {
- if(!Map_Check(translation_data->macros,hold_token->data,hold_token->data_size))
- {
- hold_token->type=KW_NUMBER;
- hold_token->data="0";
- hold_token->data_size=1;
- }else
- {
- hold_token->type=KW_NUMBER;
- hold_token->data="1";
- hold_token->data_size=1;
- }
- }
- }
- Queue_Push(tokens,hold_token);
- }
-
- free(hold_token);
- src->src[src->where_in_src]=just_in_case;
-
- return tokens;
- }
- #endif
F diff --git a/lex/preprocessing.h b/lex/preprocessing.h deleted file mode 100644 --- a/lex/preprocessing.h +++ /dev/null
- #ifndef GCC_PREPROCESSING_H
- #define GCC_PREPROCESSING_H GCC_PREPROCESSING_H
- #include <preprocessing.hh>
- #include <program.h>
- #include <lexer.h>
- #include <chonky.h>
- #include <gcc_error.h>
- #include <map.h>
- #include <scope.h>
-
- struct define_directive
- {
- struct token *macro_name;
-
- /*the tokens of the macro*/
- struct Queue *macro_tokens;
-
- /*ints are stored here*/
- struct Map *arguments;
-
- /*put arguments here*/
- /*an array of token queues*/
- size_t number_of_arguments;
- };
-
- void parse_preproc_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_include_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_define_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_preproc_if_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_preproc_ifdef_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_preproc_ifndef_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_preproc_undef_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_preproc_error_line(struct Source_File *src,struct Translation_Data *translation_data);
- void parse_preproc_line_line(struct Source_File *src,struct Translation_Data *translation_data);
-
-
- struct Queue* lex_line(struct Source_File *src,struct Translation_Data *translation_data,char lex_defined_token);
- /*preproc if stuff*/
- /*returns an else or elif token, or if it hits matching endif before that return NULL*/
- struct token* preproc_find_else(struct Source_File *src,struct Translation_Data *translation_data,char jump_before);
-
- /*hack*/
- void preproc_lex_first_part(struct Source_File *src,struct Translation_Data *translation_data);
-
-
- /*define stuff*/
- void expand_macro(struct token* macro_name,struct Source_File *src,struct Translation_Data *translation_data);
-
-
-
- struct define_directive* get_define_directive(struct token* macro_name);
- struct Queue* make_define_argument_list(size_t number_of_arguments);
-
- void expand_macro_argument(struct Queue *replacement_tokens,struct Source_File *src,struct Translation_Data *translation_data);
- void load_macro_arguments(struct Queue *args,size_t number_of_arguments,struct Source_File *src,struct Translation_Data *translation_data);
- void flush_macro_arguments(size_t number_of_arguments,struct Queue *args);
- void parse_define_line(struct Source_File *src,struct Translation_Data *translation_data);
-
- void delete_define_argument_list(size_t number_of_arguments,struct Queue *args);
- void delete_macro(void *macro);
-
- #endif
F diff --git a/lex/preprocessing.hh b/lex/preprocessing.hh deleted file mode 100644 --- a/lex/preprocessing.hh +++ /dev/null
- #ifndef GCC_PREPROCESSING_H
- #define GCC_PREPROCESSING_H GCC_PREPROCESSING_H
-
- struct define_directive;
-
- #endif
F diff --git a/misc/gcc_error.c b/misc/gcc_error.c new file mode 100644 --- /dev/null +++ b/misc/gcc_error.c
+ #ifndef GCC_ERROR_C
+ #define GCC_ERROR_C GCC_ERROR_C
+ #include <gcc_error.h>
+
+
+
+ struct Translation_Error* get_translation_error(const char *error_message,size_t line,size_t column,const char *filename)
+ {
+ struct Translation_Error *ret;
+ ret=malloc(sizeof(struct Translation_Error));
+ ret->error_message=error_message;
+ ret->column=column;
+ ret->line=line;
+ ret->filename=filename;
+ }
+
+ struct Translation_Error* get_translation_error_by_token(const char *error_message,struct token *error_token)
+ {
+ if(error_token==NULL)
+ {
+ return get_translation_error(error_message,0,0,"");
+ }else
+ {
+ return get_translation_error(error_message,error_token->line+1,error_token->column+1,error_token->filename);
+ }
+ }
+
+ void push_translation_error(const char *error_message,struct Translation_Data *translation_data)
+ {
+ if(translation_data->tokens->size==0)
+ {
+ get_translation_error(error_message,0,0,"");
+ }else
+ {
+ Queue_Push(translation_data->errors,get_translation_error_by_token(error_message,(struct token*)translation_data->tokens->first->data));
+ }
+ }
+
+ void push_lexing_error(const char *error_message,struct Source_File *src,struct Translation_Data *translation_data)
+ {
+ Queue_Push(translation_data->errors,get_translation_error(error_message,src->which_row+1,src->which_column+1,src->src_name->filename));
+ }
+ void print_translation_error(FILE *out,struct Translation_Error *error)
+ {
+ fprintf(out,"Error ");
+ if(error->filename!=NULL)
+ {
+ fprintf(out,"(line %i column %i) ",error->line,error->column);
+ fprintf(out,"in %s ",error->filename);
+ }
+ fprintf(out,": %s\n",error->error_message);
+ }
+
+
+ void delete_translation_error(struct Translation_Error *translation_error)
+ {
+ free(translation_error);
+ }
+ #endif
F diff --git a/misc/gcc_error.h b/misc/gcc_error.h new file mode 100644 --- /dev/null +++ b/misc/gcc_error.h
+ #ifndef GCC_ERROR_H
+ #define GCC_ERROR_H GCC_ERROR_H
+ #include <gcc_error.hh>
+ #include <lexer.h>
+ #include <stdio.h>
+
+
+
+ struct Translation_Error
+ {
+ const char *error_message;
+ size_t line,column;
+ const char *filename;
+
+ };
+
+
+
+ struct Translation_Error* get_translation_error(const char *error_message,size_t line,size_t column,const char *filename);
+ struct Translation_Error* get_translation_error_by_token(const char *error_message,struct token *error_token);
+ void push_translation_error(const char *error_message,struct Translation_Data *translation_data);
+ void push_lexing_error(const char *error_message,struct Source_File *src,struct Translation_Data *translation_data);
+ void print_translation_error(FILE *out,struct Translation_Error *error);
+
+ void delete_translation_error(struct Translation_Error *translation_error);
+ #endif
F diff --git a/misc/gcc_error.hh b/misc/gcc_error.hh new file mode 100644 --- /dev/null +++ b/misc/gcc_error.hh
+ #ifndef GCC_ERROR_H
+ #define GCC_ERROR_H GCC_ERROR_H
+
+
+ struct Translation_Error;
+
+
+ #endif
F diff --git a/misc/print.c b/misc/print.c --- a/misc/print.c +++ b/misc/print.c
fprintf(out,"!=");break;
case OP_LVALUE:
fprintf(out,"LVALUE");break;
- case OP_RVALUE:
- fprintf(out,"RVALUE");break;
+ case OP_CONSTANT:
+ fprintf(out,"CONSTANT");break;
+ case OP_STRING_LITERAL:
+ fprintf(out,"STRING_LITERAL");break;
case ST_COMPOUND:
fprintf(out,"COMPOUND");break;
case ST_EXPRESSION:
}
print_ast(out,unary_expression->operand);
}
- void print_rvalue_expression_tree(FILE *out,struct AST_Rvalue_Expression *rval)
- {
- print_token(out,rval->id);
- }
void print_lvalue_expression_tree(FILE *out,struct AST_Lvalue_Expression *lval)
{
- print_token(out,lval->id);
+ fprintf(out,"LVALUE ");
+ print_denoted(out,lval->lvalue);
}
void print_labeled_statement_tree(FILE *out,struct AST_Labeled_Statement *lab)
{
case OP_LVALUE:
print_lvalue_expression_tree(out,(struct AST_Lvalue_Expression*)tree);
break;
- case OP_RVALUE:
- print_rvalue_expression_tree(out,(struct AST_Rvalue_Expression*)tree);
+ case OP_STRING_LITERAL:
+ print_string_literal(out,(struct AST_String_Literal*)tree);
+ break;
+ case OP_CONSTANT:
+ print_constant_tree(out,(struct AST_Constant*)tree);
break;
case OP_NOP:
fprintf(out,"NOP");
break;
-
case ST_SWITCH:
print_switch_statement_tree(out,(struct AST_Switch_Statement*)tree);
break;
{
switch(kw)
{
- case KW_AUTO :
- fprintf(out," KW_AUTO ");break;
- case KW_DO :
- fprintf(out," KW_DO ");break;
- case KW_DOUBLE :
- fprintf(out," KW_DOUBLE ");break;
- case KW_INT :
- fprintf(out," KW_INT ");break;
- case KW_STRUCT :
- fprintf(out," KW_STRUCT ");break;
- case KW_BREAK :
- fprintf(out," KW_BREAK ");break;
- case KW_ELSE :
- fprintf(out," KW_ELSE ");break;
- case KW_LONG :
- fprintf(out," KW_LONG ");break;
- case KW_SWITCH :
- fprintf(out," KW_SWITCH ");break;
- case KW_CASE :
- fprintf(out," KW_CASE ");break;
- case KW_ENUM :
- fprintf(out," KW_ENUM ");break;
- case KW_REGISTER :
- fprintf(out," KW_REGISTER ");break;
- case KW_TYPEDEF :
- fprintf(out," KW_TYPEDEF ");break;
- case KW_CHAR :
- fprintf(out," KW_CHAR ");break;
- case KW_EXTERN :
- fprintf(out," KW_EXTERN ");break;
- case KW_RETURN :
- fprintf(out," KW_RETURN ");break;
- case KW_UNION :
- fprintf(out," KW_UNION ");break;
- case KW_CONST :
- fprintf(out," KW_CONST ");break;
- case KW_FLOAT :
- fprintf(out," KW_FLOAT ");break;
- case KW_SHORT :
- fprintf(out," KW_SHORT ");break;
- case KW_UNSIGNED :
- fprintf(out," KW_UNSIGNED ");break;
- case KW_CONTINUE :
- fprintf(out," KW_CONTINUE ");break;
- case KW_FOR :
- fprintf(out," KW_FOR ");break;
- case KW_SIGNED :
- fprintf(out," KW_SIGNED ");break;
- case KW_VOID :
- fprintf(out," KW_VOID ");break;
- case KW_DEFAULT :
- fprintf(out," KW_DEFAULT ");break;
- case KW_GOTO :
- fprintf(out," KW_GOTO ");break;
- case KW_SIZEOF :
- fprintf(out," KW_SIZEOF ");break;
- case KW_VOLATILE :
- fprintf(out," KW_VOLATILE ");break;
- case KW_IF :
- fprintf(out," KW_IF ");break;
- case KW_STATIC :
- fprintf(out," KW_STATIC ");break;
- case KW_WHILE :
- fprintf(out," KW_WHILE ");break;
- case KW_EXCLAMATION :
- fprintf(out," KW_EXCLAMATION ");break;
- case KW_BACK_SLASH :
- fprintf(out," KW_BACK_SLASH ");break;
- case KW_PERCENT :
- fprintf(out," KW_PERCENT ");break;
- case KW_AND :
- fprintf(out," KW_AND ");break;
- case KW_AND_AND :
- fprintf(out," KW_AND_AND ");break;
- case KW_QUOTE :
- fprintf(out," KW_QUOTE ");break;
- case KW_OPEN_NORMAL :
- fprintf(out," KW_OPEN_NORMAL ");break;
- case KW_CLOSE_NORMAL :
- fprintf(out," KW_CLOSE_NORMAL ");break;
- case KW_STAR :
- fprintf(out," KW_STAR ");break;
- case KW_PLUS :
- fprintf(out," KW_PLUS ");break;
- case KW_COMMA :
- fprintf(out," KW_COMMA ");break;
- case KW_MINUS :
- fprintf(out," KW_MINUS ");break;
- case KW_DOT :
- fprintf(out," KW_DOT ");break;
- case KW_ARROW :
- fprintf(out," KW_ARROW ");break;
- case KW_COLUMN :
- fprintf(out," KW_COLUMN ");break;
- case KW_SEMI_COLUMN :
- fprintf(out," KW_SEMI_COLUMN ");break;
- case KW_LESS :
- fprintf(out," KW_LESS ");break;
- case KW_EQ :
- fprintf(out," KW_EQ ");break;
- case KW_EQEQ :
- fprintf(out," KW_EQEQ ");break;
- case KW_MORE :
- fprintf(out," KW_MORE ");break;
- case KW_QUESTION :
- fprintf(out," KW_QUESTION ");break;
- case KW_OPEN_SQUARE :
- fprintf(out," KW_OPEN_SQUARE ");break;
- case KW_CLOSE_SQUARE :
- fprintf(out," KW_CLOSE_SQUARE ");break;
- case KW_HAT :
- fprintf(out," KW_HAT ");break;
- case KW_FLOOR :
- fprintf(out," KW_FLOOR ");break;
- case KW_OPEN_CURLY :
- fprintf(out," KW_OPEN_CURLY ");break;
- case KW_CLOSE_CURLY :
- fprintf(out," KW_CLOSE_CURLY ");break;
- case KW_PIPE :
- fprintf(out," KW_PIPE ");break;
- case KW_PIPE_PIPE :
- fprintf(out," KW_PIPE_PIPE ");break;
- case KW_TILDE :
- fprintf(out," KW_TILDE ");break;
- case KW_PLUSPLUS :
- fprintf(out," KW_PLUSPLUS ");break;
- case KW_MINUSMINUS :
- fprintf(out," KW_MINUSMINUS ");break;
- case KW_SHIFT_RIGHT :
- fprintf(out," KW_SHIFT_RIGHT ");break;
- case KW_SHIFT_LEFT :
- fprintf(out," KW_SHIFT_LEFT ");break;
- case KW_LESS_EQ :
- fprintf(out," KW_LESS_EQ ");break;
- case KW_MORE_EQ :
- fprintf(out," KW_MORE_EQ ");break;
- case KW_NOT_EQ :
- fprintf(out," KW_NOT_EQ ");break;
- case KW_PLUS_EQ :
- fprintf(out," KW_PLUS_EQ ");break;
- case KW_MINUS_EQ :
- fprintf(out," KW_MINUS_EQ ");break;
- case KW_STAR_EQ :
- fprintf(out," KW_STAR_EQ ");break;
- case KW_PERCENT_EQ :
- fprintf(out," KW_PERCENT_EQ ");break;
- case KW_SHIFT_LEFT_EQ :
- fprintf(out," KW_SHIFT_LEFT_EQ ");break;
- case KW_SHIFT_RIGHT_EQ :
- fprintf(out," KW_SHIFT_RIGHT_EQ ");break;
- case KW_AND_EQ :
- fprintf(out," KW_AND_EQ ");break;
- case KW_HAT_EQ :
- fprintf(out," KW_HAT_EQ ");break;
- case KW_PIPE_EQ :
- fprintf(out," KW_PIPE_EQ ");break;
- case KW_DIV_EQ :
- fprintf(out," KW_DIV_EQ ");break;
- case KW_FORWARD_SLASH :
- fprintf(out," KW_FORWARD_SLASH ");break;
- case KW_NOTYPE :
- fprintf(out," KW_NOTYPE ");break;
- case KW_NUMBER :
- fprintf(out," KW_NUMBER ");break;
- case KW_COMMENT :
- fprintf(out," KW_COMMENT ");break;
- case KW_ID :
- fprintf(out," KW_ID ");break;
- case KW_STRING :
- fprintf(out," KW_STRING ");break;
- default:
- fprintf(out," KW_ERROR ");break;
+ case KW_AUTO:
+ fprintf(out,"KW_AUTO");break;
+ case KW_DO:
+ fprintf(out,"KW_DO");break;
+ case KW_DOUBLE:
+ fprintf(out,"KW_DOUBLE");break;
+ case KW_INT:
+ fprintf(out,"KW_INT");break;
+ case KW_STRUCT:
+ fprintf(out,"KW_STRUCT");break;
+ case KW_BREAK:
+ fprintf(out,"KW_BREAK");break;
+ case KW_ELSE:
+ fprintf(out,"KW_ELSE");break;
+ case KW_LONG:
+ fprintf(out,"KW_LONG");break;
+ case KW_SWITCH:
+ fprintf(out,"KW_SWITCH");break;
+ case KW_CASE:
+ fprintf(out,"KW_CASE");break;
+ case KW_ENUM:
+ fprintf(out,"KW_ENUM");break;
+ case KW_REGISTER:
+ fprintf(out,"KW_REGISTER");break;
+ case KW_TYPEDEF:
+ fprintf(out,"KW_TYPEDEF");break;
+ case KW_CHAR:
+ fprintf(out,"KW_CHAR");break;
+ case KW_EXTERN:
+ fprintf(out,"KW_EXTERN");break;
+ case KW_RETURN:
+ fprintf(out,"KW_RETURN");break;
+ case KW_UNION:
+ fprintf(out,"KW_UNION");break;
+ case KW_CONST:
+ fprintf(out,"KW_CONST");break;
+ case KW_FLOAT:
+ fprintf(out,"KW_FLOAT");break;
+ case KW_SHORT:
+ fprintf(out,"KW_SHORT");break;
+ case KW_UNSIGNED:
+ fprintf(out,"KW_UNSIGNED");break;
+ case KW_CONTINUE:
+ fprintf(out,"KW_CONTINUE");break;
+ case KW_FOR:
+ fprintf(out,"KW_FOR");break;
+ case KW_SIGNED:
+ fprintf(out,"KW_SIGNED");break;
+ case KW_VOID:
+ fprintf(out,"KW_VOID");break;
+ case KW_DEFAULT:
+ fprintf(out,"KW_DEFAULT");break;
+ case KW_GOTO:
+ fprintf(out,"KW_GOTO");break;
+ case KW_SIZEOF:
+ fprintf(out,"KW_SIZEOF");break;
+ case KW_VOLATILE:
+ fprintf(out,"KW_VOLATILE");break;
+ case KW_IF:
+ fprintf(out,"KW_IF");break;
+ case KW_STATIC:
+ fprintf(out,"KW_STATIC");break;
+ case KW_WHILE:
+ fprintf(out,"KW_WHILE");break;
+ case KW_DEFINED:
+ fprintf(out,"KW_DEFINED");break;
+ case KW_EXCLAMATION:
+ fprintf(out,"KW_EXCLAMATION");break;
+ case KW_BACK_SLASH:
+ fprintf(out,"KW_BACK_SLASH");break;
+ case KW_PERCENT:
+ fprintf(out,"KW_PERCENT");break;
+ case KW_AND:
+ fprintf(out,"KW_AND");break;
+ case KW_AND_AND:
+ fprintf(out,"KW_AND_AND");break;
+ case KW_OPEN_NORMAL:
+ fprintf(out,"KW_OPEN_NORMAL");break;
+ case KW_CLOSE_NORMAL:
+ fprintf(out,"KW_CLOSE_NORMAL");break;
+ case KW_STAR:
+ fprintf(out,"KW_STAR");break;
+ case KW_PLUS:
+ fprintf(out,"KW_PLUS");break;
+ case KW_COMMA:
+ fprintf(out,"KW_COMMA");break;
+ case KW_MINUS:
+ fprintf(out,"KW_MINUS");break;
+ case KW_ARROW:
+ fprintf(out,"KW_ARROW");break;
+ case KW_COLUMN:
+ fprintf(out,"KW_COLUMN");break;
+ case KW_SEMI_COLUMN:
+ fprintf(out,"KW_SEMI_COLUMN");break;
+ case KW_LESS:
+ fprintf(out,"KW_LESS");break;
+ case KW_EQ:
+ fprintf(out,"KW_EQ");break;
+ case KW_EQEQ:
+ fprintf(out,"KW_EQEQ");break;
+ case KW_MORE:
+ fprintf(out,"KW_MORE");break;
+ case KW_QUESTION:
+ fprintf(out,"KW_QUESTION");break;
+ case KW_OPEN_SQUARE:
+ fprintf(out,"KW_OPEN_SQUARE");break;
+ case KW_CLOSE_SQUARE:
+ fprintf(out,"KW_CLOSE_SQUARE");break;
+ case KW_HAT:
+ fprintf(out,"KW_HAT");break;
+ case KW_FLOOR:
+ fprintf(out,"KW_FLOOR");break;
+ case KW_OPEN_CURLY:
+ fprintf(out,"KW_OPEN_CURLY");break;
+ case KW_CLOSE_CURLY:
+ fprintf(out,"KW_CLOSE_CURLY");break;
+ case KW_PIPE:
+ fprintf(out,"KW_PIPE");break;
+ case KW_PIPE_PIPE:
+ fprintf(out,"KW_PIPE_PIPE");break;
+ case KW_TILDE:
+ fprintf(out,"KW_TILDE");break;
+ case KW_PLUSPLUS:
+ fprintf(out,"KW_PLUSPLUS");break;
+ case KW_MINUSMINUS:
+ fprintf(out,"KW_MINUSMINUS");break;
+ case KW_SHIFT_RIGHT:
+ fprintf(out,"KW_SHIFT_RIGHT");break;
+ case KW_SHIFT_LEFT:
+ fprintf(out,"KW_SHIFT_LEFT");break;
+ case KW_LESS_EQ:
+ fprintf(out,"KW_LESS_EQ");break;
+ case KW_MORE_EQ:
+ fprintf(out,"KW_MORE_EQ");break;
+ case KW_NOT_EQ:
+ fprintf(out,"KW_NOT_EQ");break;
+ case KW_PLUS_EQ:
+ fprintf(out,"KW_PLUS_EQ");break;
+ case KW_MINUS_EQ:
+ fprintf(out,"KW_MINUS_EQ");break;
+ case KW_STAR_EQ:
+ fprintf(out,"KW_STAR_EQ");break;
+ case KW_PERCENT_EQ:
+ fprintf(out,"KW_PERCENT_EQ");break;
+ case KW_SHIFT_LEFT_EQ:
+ fprintf(out,"KW_SHIFT_LEFT_EQ");break;
+ case KW_SHIFT_RIGHT_EQ:
+ fprintf(out,"KW_SHIFT_RIGHT_EQ");break;
+ case KW_AND_EQ:
+ fprintf(out,"KW_AND_EQ");break;
+ case KW_HAT_EQ:
+ fprintf(out,"KW_HAT_EQ");break;
+ case KW_PIPE_EQ:
+ fprintf(out,"KW_PIPE_EQ");break;
+ case KW_DOT:
+ fprintf(out,"KW_DOT");break;
+ case KW_DIV_EQ:
+ fprintf(out,"KW_DIV_EQ");break;
+ case KW_FORWARD_SLASH:
+ fprintf(out,"KW_FORWARD_SLASH");break;
+ case KW_NOTYPE:
+ fprintf(out,"KW_NOTYPE");break;
+ case KW_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_HEXADECIMAL_CONSTANT");break;
+ case KW_DECIMAL_CONSTANT:
+ fprintf(out,"KW_DECIMAL_CONSTANT");break;
+ case KW_OCTAL_CONSTANT:
+ fprintf(out,"KW_OCTAL_CONSTANT");break;
+ case KW_UNSIGNED_DECIMAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_DECIMAL_CONSTANT");break;
+ case KW_UNSIGNED_OCTAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_OCTAL_CONSTANT");break;
+ case KW_UNSIGNED_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_HEXADECIMAL_CONSTANT");break;
+ case KW_UNSIGNED_LONG_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_LONG_HEXADECIMAL_CONSTANT");break;
+ case KW_UNSIGNED_LONG_OCTAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_LONG_OCTAL_CONSTANT");break;
+ case KW_UNSIGNED_LONG_DECIMAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_LONG_DECIMAL_CONSTANT");break;
+ case KW_UNSIGNED_LONG_LONG_DECIMAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_LONG_LONG_DECIMAL_CONSTANT");break;
+ case KW_UNSIGNED_LONG_LONG_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_LONG_LONG_HEXADECIMAL_CONSTANT");break;
+ case KW_UNSIGNED_LONG_LONG_OCTAL_CONSTANT:
+ fprintf(out,"KW_UNSIGNED_LONG_LONG_OCTAL_CONSTANT");break;
+ case KW_LONG_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_LONG_HEXADECIMAL_CONSTANT");break;
+ case KW_LONG_OCTAL_CONSTANT:
+ fprintf(out,"KW_LONG_OCTAL_CONSTANT");break;
+ case KW_LONG_DECIMAL_CONSTANT:
+ fprintf(out,"KW_LONG_DECIMAL_CONSTANT");break;
+ case KW_LONG_LONG_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_LONG_LONG_HEXADECIMAL_CONSTANT");break;
+ case KW_LONG_LONG_OCTAL_CONSTANT:
+ fprintf(out,"KW_LONG_LONG_OCTAL_CONSTANT");break;
+ case KW_LONG_LONG_DECIMAL_CONSTANT:
+ fprintf(out,"KW_LONG_LONG_DECIMAL_CONSTANT");break;
+ case KW_DOUBLE_DECIMAL_CONSTANT:
+ fprintf(out,"KW_DOUBLE_DECIMAL_CONSTANT");break;
+ case KW_LONG_DOUBLE_DECIMAL_CONSTANT:
+ fprintf(out,"KW_LONG_DOUBLE_DECIMAL_CONSTANT");break;
+ case KW_FLOAT_DECIMAL_CONSTANT:
+ fprintf(out,"KW_FLOAT_DECIMAL_CONSTANT");break;
+ case KW_DOUBLE_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_DOUBLE_HEXADECIMAL_CONSTANT");break;
+ case KW_LONG_DOUBLE_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_LONG_DOUBLE_HEXADECIMAL_CONSTANT");break;
+ case KW_FLOAT_HEXADECIMAL_CONSTANT:
+ fprintf(out,"KW_FLOAT_HEXADECIMAL_CONSTANT");break;
+ case KW_COMMENT:
+ fprintf(out,"KW_COMMENT");break;
+ case KW_ID:
+ fprintf(out,"KW_ID");break;
+ case KW_CHAR_CONSTANT:
+ fprintf(out,"KW_CHAR_CONSTANT");break;
+ case KW_WIDE_CHAR_CONSTANT:
+ fprintf(out,"KW_WIDE_CHAR_CONSTANT");break;
+ case KW_STRING:
+ fprintf(out,"KW_STRING");break;
+ case KW_WIDE_STRING:
+ fprintf(out,"KW_WIDE_STRING");break;
+ case PKW_IF:
+ fprintf(out,"PKW_IF");break;
+ case PKW_IFDEF:
+ fprintf(out,"PKW_IFDEF");break;
+ case PKW_IFNDEF:
+ fprintf(out,"PKW_IFNDEF");break;
+ case PKW_ELIF:
+ fprintf(out,"PKW_ELIF");break;
+ case PKW_ELSE:
+ fprintf(out,"PKW_ELSE");break;
+ case PKW_ENDIF:
+ fprintf(out,"PKW_ENDIF");break;
+ case PKW_INCLUDE:
+ fprintf(out,"PKW_INCLUDE");break;
+ case PKW_DEFINE:
+ fprintf(out,"PKW_DEFINE");break;
+ case PKW_UNDEF:
+ fprintf(out,"PKW_UNDEF");break;
+ case PKW_LINE:
+ fprintf(out,"PKW_LINE");break;
+ case PKW_ERROR:
+ fprintf(out,"PKW_ERROR");break;
+ case PKW_PRAGMA:
+ fprintf(out,"PKW_PRAGMA");break;
+ case PKW_COMMENT:
+ fprintf(out,"PKW_COMMENT");break;
+ case PKW_NOTYPE:
+ fprintf(out,"PKW_NOTYPE");break;
+ case KW_HASHTAG:
+ fprintf(out,"KW_HASHTAG");break;
+ case KW_HASHTAG_HASHTAG:
+ fprintf(out,"KW_HASHTAG_HASHTAG");break;
+ default:
+ fprintf(out,"KW_ERROR");
}
}
void print_errors(FILE *out,struct Queue *errors)
fprintf(out,"error");
}
}
+
+
+ void print_constant_tree(FILE *out,struct AST_Constant *constant)
+ {
+ fprintf(out,"CONSTANT of type ");
+ print_type(out,constant->value_type,1);
+ }
+ void print_string_literal(FILE *out,struct AST_String_Literal *string)
+ {
+ fprintf(out,"STRING LITERAL of type");
+ print_token(out,string->string);
+ }
+
#undef TOK
#undef INDENT
F diff --git a/misc/print.h b/misc/print.h --- a/misc/print.h +++ b/misc/print.h
void print_conditional_expression_tree(FILE *out,struct AST_Conditional_Expression *cond);
void print_function_expression_tree(FILE *out,struct AST_Function_Expression *function_call);
void print_unary_expression_tree(FILE *out,struct AST_Unary_Expression *unary_expression);
- void print_rvalue_expression_tree(FILE *out,struct AST_Rvalue_Expression *rval);
+ void print_constant_tree(FILE *out,struct AST_Constant *constant);
+ void print_string_literal(FILE *out,struct AST_String_Literal *string);
void print_lvalue_expression_tree(FILE *out,struct AST_Lvalue_Expression *lval);
void print_labeled_statement_tree(FILE *out,struct AST_Labeled_Statement *lab);
void print_compound_statement_tree(FILE *out,struct AST_Compound_Statement *comp);
F diff --git a/parse/parse.h b/parse/parse.h deleted file mode 100644 --- a/parse/parse.h +++ /dev/null
- #ifndef GCC_PARSE_C
- #define GCC_PARSE_C GCC_PARSE_C
-
- #include <parse_expression.h>
- #include <parse_statement.h>
- #include <parse_declaration.h>
- #include <parse_translation_unit.h>
-
-
-
-
-
- #endif
F diff --git a/parse/parse_declaration.c b/parse/parse_declaration.c deleted file mode 100644 --- a/parse/parse_declaration.c +++ /dev/null
- #ifndef GCC_PARSE_DECLARATION_C
- #define GCC_PARSE_DECLARATION_C GCC_PARSE_DECLARATION_C
- #include"parse_declaration.h"
-
- /*declaration-specifiers init-declarator (,init-declarator)* ;*/
- /* init-declarator: declarator [ = initializer ] */
- void parse_declaration(struct Translation_Data *translation_data,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions)
- {
- struct Denotation_Prototype *prototype;
- struct Denoted *hold;
-
- prototype=parse_declaration_specifiers(translation_data,scope);
- while(!get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- hold=parse_declarator(translation_data,scope,prototype);
-
- if(hold->denotation==DT_Function)
- {
- /*check if this is a function definition*/
- if(parse_function_definitions && get_and_check(translation_data,KW_OPEN_CURLY))
- {
- ((struct Denoted_Function*)hold) ->body=
- (struct AST_Compound_Statement*)parse_finish_compound_statement(translation_data,scope);
- Queue_Push(where_to_push,get_function_definition_tree(scope,(struct Denoted_Function*)hold));
- Scope_Push(scope,hold,translation_data);
- break;
- }
- /*this is a function declaration*/
- Queue_Push(where_to_push,get_function_declaration_tree(scope,(struct Denoted_Function*)hold));
- }else if(hold->denotation==DT_Typedef)
- {
- Queue_Push(where_to_push,get_type_definition_tree((struct Denoted_Typedef*)hold));
- }else if(hold->denotation==DT_Object)
- {
- Queue_Push(where_to_push,get_object_declaration_tree((struct Denoted_Object*)hold));
- if(get_and_check(translation_data,KW_EQ))
- ((struct Denoted_Object*)hold)->initializer=parse_initializer(translation_data,scope,(struct Denoted_Object*)hold);
- }else
- {
- /*TODO error*/
- Queue_Push(where_to_push,get_declaration_error_tree(hold));
- push_translation_error("declaration expected",translation_data);
-
- /*search for end of erronous declaration*/
- break;
- }
-
- Scope_Push(scope,hold,translation_data);
- parse_function_definitions=0;
- if(!get_and_check(translation_data,KW_COMMA) && !check(translation_data,KW_SEMI_COLUMN,0))
- {
- /*TODO error*/
- Queue_Push(where_to_push,get_declaration_error_tree(NULL));
- push_translation_error("semi column expected",translation_data);
- break;
- }
- }
-
- free(prototype);
-
- }
-
-
- struct Denotation_Prototype* parse_specifier_qualifier_list(struct Translation_Data *translation_data,struct Scope *scope)
- {
- return parse_declaration_specifiers_inner(translation_data,scope,0);
- }
- struct Denotation_Prototype* parse_declaration_specifiers(struct Translation_Data *translation_data,struct Scope *scope)
- {
- return parse_declaration_specifiers_inner(translation_data,scope,1);
- }
-
- /*declaration-specifiers:
- ( storage-class-specifier type-specifier type-qualifier function-specifier)* */
- struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Translation_Data *translation_data,struct Scope *scope,char parse_storage_class)
- {
- enum KEYWORDS hold_kw;
- struct Denotation_Prototype *ret;
- ret=(struct Denotation_Prototype*)get_denotation_prototype(translation_data->types);
-
- while(1)
- {
- hold_kw=kw_get(translation_data);
- switch(hold_kw)
- {
- case KW_CONST:
- chomp(translation_data);
- ret->is_const=1;
- break;
- case KW_VOLATILE:
- chomp(translation_data);
- ret->is_volatile=1;
- break;
- case KW_INT:
- chomp(translation_data);
- if(ret->specifier!=TS_NONE)
- {
- push_translation_error("more than one type specifier given",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_INT;
- break;
- case KW_VOID:
- chomp(translation_data);
- if(ret->specifier!=TS_NONE)
- {
- push_translation_error("more than one type specifier given",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_VOID;
- break;
- case KW_CHAR:
- chomp(translation_data);
- if(ret->specifier!=TS_NONE)
- {
- push_translation_error("more than one type specifier given",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_CHAR;
- break;
- case KW_DOUBLE:
- chomp(translation_data);
- if(ret->specifier!=TS_NONE)
- {
- push_translation_error("more than one type specifier given",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_DOUBLE;
- break;
- case KW_FLOAT:
- chomp(translation_data);
- if(ret->specifier!=TS_NONE)
- {
- push_translation_error("more than one type specifier given",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_FLOAT;
- break;
- case KW_LONG:
- chomp(translation_data);
- if(ret->constraint!=TC_NONE)
- {
- if(ret->constraint==TC_LONG)
- {
- ret->constraint=TC_LONG_LONG;
- break;
- }else
- {
- if(ret->constraint==TC_LONG_LONG)
- push_translation_error("yeah ... it's big",translation_data);
- else if(ret->constraint==TC_SHORT)
- push_translation_error("long and short constraints contradict",translation_data);
- else
- assert(0);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- }
- ret->constraint=TC_LONG;
- break;
- case KW_SHORT:
- chomp(translation_data);
- if(ret->constraint!=TC_NONE)
- {
- switch(ret->constraint)
- {
- case TC_LONG:
- push_translation_error("long and short constraints contradict",translation_data);
- break;
- case TC_SHORT:
- push_translation_error("it's not about the size, it's about how you use it",translation_data);
- break;
- case TC_LONG_LONG:
- push_translation_error("long long and short constraints contradict",translation_data);
- break;
- default:
- /*should not be able to enter here*/
- assert(0);
- }
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->constraint=TC_SHORT;
- break;
- case KW_EXTERN:
- if(!parse_storage_class)
- goto exit;
- chomp(translation_data);
- if(ret->storage_class!=SCS_NONE)
- {
- switch(ret->storage_class)
- {
- case SCS_EXTERN:
- push_translation_error("only one extern allowed >:|",translation_data);
- break;
-
- case SCS_TYPEDEF:
- case SCS_STATIC:
- push_translation_error("only one storage class allowed >:|",translation_data);
- break;
- default:
- assert(0);
- }
-
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->storage_class=SCS_EXTERN;
- break;
- case KW_STATIC:
- if(!parse_storage_class)
- goto exit;
- chomp(translation_data);
- if(ret->storage_class!=SCS_NONE)
- {
- switch(ret->storage_class)
- {
- case SCS_STATIC:
- push_translation_error("only one static allowed >:|",translation_data);
- break;
-
- case SCS_EXTERN:
- case SCS_TYPEDEF:
- push_translation_error("only one storage class allowed >:|",translation_data);
- break;
- default:
- assert(0);
- }
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->storage_class=SCS_STATIC;
- break;
- case KW_TYPEDEF:
- if(!parse_storage_class)
- goto exit;
- chomp(translation_data);
- if(ret->storage_class!=SCS_NONE)
- {
- switch(ret->storage_class)
- {
- case SCS_STATIC:
- case SCS_EXTERN:
- case SCS_TYPEDEF:
- push_translation_error("only one storage class allowed >:|",translation_data);
- break;
- default:
- assert(0);
- }
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->storage_class=SCS_TYPEDEF;
- break;
- case KW_STRUCT:
- ret->specifier=TS_STRUCT;
- goto hack;
- case KW_UNION:
- ret->specifier=TS_UNION;
- hack:
- chomp(translation_data);
- if(check(translation_data,KW_ID,0))
- {
- struct token *id;
- struct Denoted_Struct_Union *tag;
- id=Queue_Pop(translation_data->tokens);
- tag=(struct Denoted_Struct_Union*)check_tag(scope,id);
-
- if(tag==NULL)
- {
- struct Struct_Union *body;
- body=get_struct_union_base(scope,ret->specifier);
- Scope_Push(scope,get_denoted_struct_union(id,body),translation_data);
-
- parse_struct_union_specifier_finish(translation_data,scope,body);
- ret->struct_union=body;
- }else
- {
- ret->struct_union=tag->struct_union;
- if(ret->struct_union->specifier!=ret->specifier)
- {
- push_translation_error("more than one type specifier",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- if(ret->struct_union->is_finished==0)
- {
- /*then this could be a definition*/
- parse_struct_union_specifier_finish(translation_data,scope,ret->struct_union);
- }
- }
-
- }else
- {
- ret->struct_union=get_struct_union_base(scope,ret->specifier);
- parse_struct_union_specifier_finish(translation_data,scope,ret->struct_union);
- if(ret->struct_union->is_finished==0)
- {
- push_translation_error("expected a struct tag or a struct definition",translation_data);
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- }
- break;
- case KW_ENUM:
- chomp(translation_data);
- ret->specifier=TS_ENUM;
- if(check(translation_data,KW_ID,0))
- {
- struct token *id;
- struct Denoted_Enum *enumerator;
- id=Queue_Pop(translation_data->tokens);
- enumerator=(struct Denoted_Enum*)check_tag(scope,id);
- if(enumerator==NULL)
- {
- struct Enum *body;
- body=get_enum_base();
- Scope_Push(scope,get_denoted_enum(id,body),translation_data);
- parse_enum_specifier_finish(translation_data,scope,body);
- ret->enumerator=body;
- }else
- {
- ret->enumerator=enumerator->enumeration;
- if(enumerator->denotation!=DT_Enum)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- if(ret->enumerator->is_finished==0)
- {
- /*this could be an enum definition*/
- parse_enum_specifier_finish(translation_data,scope,ret->enumerator);
- }
- }
-
- }else
- {
- parse_enum_specifier_finish(translation_data,scope,ret->enumerator);
- }
- break;
- case KW_ID:
- if(ret->specifier==TS_NONE)
- {
- struct Denoted *hold;
- hold=check_ordinary(scope,(struct token*)translation_data->tokens->first->data);
- if(hold!=NULL && hold->denotation==DT_Typedef)
- {
- ret->type=((struct Denoted_Typedef*)hold)->type;
- chomp(translation_data);
- return ret;
- }
- /*falltrough - this has not been typedefed*/
- }
- /*falltrough (it is possible to overwrite typedef id from upper scope)*/
- default:
- exit:
- if(ret->specifier==TS_ENUM)
- {
- ret->type=(struct Type*)get_enum_type(ret);
- }else if(ret->specifier==TS_STRUCT || ret->specifier==TS_UNION)
- {
- ret->type=(struct Type*)get_struct_union_type(ret);
- }else if(ret->type==NULL)
- {
- ret->type=(struct Type*)get_basic_type(ret);
- }
- return ret;
- }
- }
- }
-
-
-
-
-
- /*
- declarator:
- ( pointer ( type-qualifier )* )* direct-declarator
- */
- struct Denoted* parse_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype)
- {
- struct Denoted_Base *temp;
- struct Denoted *ret;
- temp=get_denoted_base(prototype);
- parse_declarator_inner(translation_data,scope,temp);
- ret=extract_denoted(temp,prototype,0);
- delete_denoted_base(temp);
- return ret;
-
- }
-
- void parse_declarator_inner(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base)
- {
- enum KEYWORDS hold;
- char is_const;
- char is_volatile;
- while(get_and_check(translation_data,KW_STAR))
- {
- is_const=is_volatile=0;
- while(1)
- {
- hold=kw_get(translation_data);
- if(hold==KW_CONST)
- {
- chomp(translation_data);
- is_const=1;
- }else if(hold==KW_VOLATILE)
- {
- chomp(translation_data);
- is_volatile=1;
- }else
- {
- break;
- }
- }
- base->type=(struct Type*)get_pointer_type(base->type,is_const,is_volatile);
- }
- parse_direct_declarator(translation_data,scope,base);
-
- }
- /*
- direct-declarator:
- id direct-declarator-finish
- ( declarator ) direct-declarator-finish
- */
- void parse_direct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base)
- {
- if(check(translation_data,KW_ID,0))
- {
- base->id=Queue_Pop(translation_data->tokens);
- parse_direct_declarator_finish(translation_data,scope,base);
-
- }else if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- struct Queue *hack;
- struct Queue *hold;
- hack=malloc(sizeof(struct Queue));
- Queue_Init(hack);
-
- while(!check(translation_data,KW_CLOSE_NORMAL,0))
- {
- Queue_Push(hack,Queue_Pop(translation_data->tokens));
- }
- /*remove closing )*/
- chomp(translation_data);
- parse_direct_declarator_finish(translation_data,scope,base);
-
-
-
- hold=translation_data->tokens;
- translation_data->tokens=hack;
- parse_declarator_inner(translation_data,scope,base);
- translation_data->tokens=hold;
- if(hack->size!=0)
- {
- /*TODO error*/
- base->denotation=DT_Error;
- while(hack->size)
- {
- free(Queue_Pop(hack));
- }
- free(hack);
- push_translation_error("declarator error",translation_data);
- return;
- }
- free(hack);
-
- }else
- {
- /*this might be an abstract declarator*/
- parse_direct_declarator_finish(translation_data,scope,base);
- }
- }
-
- /*
- direct-declarator-finish:
- ( [ constant-expression ] | (parameter-list) | ( [id-list] ) )*
- */
- void parse_direct_declarator_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base)
- {
- struct AST *hold_expression;
- while(1)
- {
- if(get_and_check(translation_data,KW_OPEN_SQUARE))
- {
- if(get_and_check(translation_data,KW_CLOSE_SQUARE))
- {
- hold_expression=NULL;
- }else
- {
- hold_expression=parse_expression(translation_data,scope);
- if(!get_and_check(translation_data,KW_CLOSE_SQUARE))
- {
- /*TODO error*/
- push_translation_error("']' expected",translation_data);
- base->type=(struct Type*)get_type_error(base->type);
- delete_ast(hold_expression);
- return;
- }
- }
-
- parse_direct_declarator_finish(translation_data,scope,base);
- base->type=get_array_type(base->type,hold_expression);
-
- }else if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- struct Queue *parameters;
- struct Normal_Scope *function_prototype_scope;
-
- function_prototype_scope=(struct Normal_Scope*)get_normal_scope(scope,FUNCTION_PROTOTYPE_SCOPE);
-
- parameters=malloc(sizeof(struct Queue));
- Queue_Init(parameters);
-
- parse_paramenter_list(translation_data,function_prototype_scope,parameters);
- base->type=(struct Type*)get_function_type(base->type,parameters,function_prototype_scope);
-
- }else
- {
- break;
- }
-
- }
-
- }
-
-
- /*
- struct-union-specifier-finish:
- { ( struct-declaration )* }
- */
- void parse_struct_union_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Struct_Union *base)
- {
- if(get_and_check(translation_data,KW_OPEN_CURLY))
- {
- base->is_finished=1;
- while(parse_struct_declaration(translation_data,(struct Scope*)base->inner_namespace,base->members))
- if(get_and_check(translation_data,KW_CLOSE_CURLY))
- return ;
- /*TODO error*/
- push_translation_error("expected closing curly bracket from struct declaration",translation_data);
- return;
- }
- }
- /*
- struct-declaration:
- specifier-qualifier-list ( struct-declarator )* ;
- */
- char parse_struct_declaration(struct Translation_Data *translation_data,struct Scope *struct_scope,struct Queue* members)
- {
- struct Denotation_Prototype *prototype;
- struct Denoted *hold;
- prototype=parse_specifier_qualifier_list(translation_data,struct_scope);
- while(!get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- hold=parse_struct_declarator(translation_data,struct_scope,prototype);
- if(hold!=NULL && hold->denotation!=DT_Error)
- {
- Scope_Push(struct_scope,hold,translation_data);
- Queue_Push(members,hold);
-
- }else
- {
- free(prototype);
- push_translation_error("there is a problem with the declarator",translation_data);
- return 0;
- }
-
- if(!get_and_check(translation_data,KW_COMMA) && !check(translation_data,KW_SEMI_COLUMN,0))
- {
- free(prototype);
- push_translation_error("semi column expected in struct declaration",translation_data);
- return 0;
- }
- }
- free(prototype);
- return 1;
-
- }
- /*
- struct-declarator:
- declarator
- [ declarator ] : constant-expression
- */
- struct Denoted* parse_struct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype)
- {
- struct Denoted *hold;
- if(get_and_check(translation_data,KW_COLUMN))
- {
- /*unnamed bitfields are possible*/
- hold=get_denoted_object(NULL,SCS_NONE,prototype->type,NULL);
-
- }else
- {
- hold=parse_declarator(translation_data,scope,prototype);
- if(get_and_check(translation_data,KW_COLUMN))
- {
- /*TODO move error detection in get_type_bitfield*/
- ((struct Denoted_Object*)hold)->object->type=(struct Type*)get_type_bitfield(prototype->type,parse_expression(translation_data,scope));
- }
- }
-
- return hold;
- }
- /*
- enum-specifier-finish
- { ( enumeration-constant [ = constant-expression ] , )* }
- */
- void parse_enum_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Enum *enumeration)
- {
- struct token *id;
- struct Denoted_Enum_Const *hold;
- int where_in_enumeration=0;
- if(get_and_check(translation_data,KW_OPEN_CURLY))
- {
- enumeration->is_finished=1;
- do
- {
- if(check(translation_data,KW_ID,0))
- {
- id=Queue_Pop(translation_data->tokens);
- if(get_and_check(translation_data,KW_EQ))
- {
- hold=(struct Denoted_Enum_Const*)get_denoted_enum_const_expr(id,enumeration,parse_expression(translation_data,scope));
- Queue_Push(enumeration->consts,hold);
- where_in_enumeration=hold->value+1;
- }else
- {
- Queue_Push(enumeration->consts,get_denoted_enum_const_num(id,enumeration,where_in_enumeration));
- ++where_in_enumeration;
- }
- if(!get_and_check(translation_data,KW_COMMA) && get_and_check(translation_data,KW_CLOSE_CURLY))
- {
- return;
- }else
- {
- /*TODO error*/
- push_translation_error("enum definition error",translation_data);
- Queue_Push(enumeration->consts,get_denoted_error(NULL));
- return ;
- }
- }else
- {
- /*TODO error*/
- push_translation_error("enum definition error, expected an id",translation_data);
- Queue_Push(enumeration->consts,get_denoted_error(NULL));
- return ;
- }
- }while(!get_and_check(translation_data,KW_CLOSE_CURLY));
-
- }
- }
-
- /*
- parameter-list:
- (declaratoion-specifiers (declarator | abstract-declarator),)+
- */
- void parse_paramenter_list(struct Translation_Data *translation_data,struct Normal_Scope *function_prototype_scope,struct Queue *parameters)
- {
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- return;
-
- struct Denotation_Prototype *prototype;
- struct Denoted_Base *base;
- struct Denoted *hold;
- do
- {
-
-
- prototype=parse_declaration_specifiers(translation_data,(struct Scope*)function_prototype_scope);
- base=get_denoted_base(prototype);
-
-
- parse_declarator_inner(translation_data,(struct Scope*)function_prototype_scope,base);
- if(base->denotation!=DT_Object)
- {
- /*TODO error*/
- push_translation_error("expected object declaration in function prototype",translation_data);
- // delete_denoted(hold);
- delete_denoted_prototype(prototype);
- delete_denoted_base(base);
- return;
- }
-
- hold=extract_denoted(base,prototype,1);
-
- if(((struct Denoted_Object*)hold)->id!=NULL)
- Scope_Push((struct Scope*)function_prototype_scope,hold,translation_data);
- Queue_Push(parameters,((struct Denoted_Object*)hold));
-
- delete_denoted_prototype(prototype);
- delete_denoted_base(base);
-
- }while(get_and_check(translation_data,KW_COMMA));
- if(!get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- /*TODO error*/
- push_translation_error("expected a ')' finishing the parameter list",translation_data);
- Queue_Push(parameters,get_denoted_error(NULL));
- return;
- }
-
- }
- /*
- type-name:
- specifier-qualifier-list [abstract-declarator]
- */
- struct Type* parse_type_name(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct Denotation_Prototype *prototype;
- struct Type *ret;
- prototype=parse_specifier_qualifier_list(translation_data,scope);
- ret=parse_abstract_declarator(translation_data,scope,prototype);
- delete_denoted_prototype(prototype);
- return ret;
- }
- /*
- abstract-declarator:
- ( pointer )* abstract-direct-declarator
- */
- struct Type* parse_abstract_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype)
- {
- struct Denoted_Base *base;
- struct Type *ret;
-
-
- get_denoted_base(prototype);
- parse_declarator_inner(translation_data,scope,base);
-
- if(base->denotation==DT_Error || base->id!=NULL)
- {
- /*TODO error*/
- push_translation_error("unexpedted id in abstract declarator",translation_data);
- delete_denoted_prototype(prototype);
- ret=base->type;
- delete_denoted_base(base);
- return ret;
- }
- delete_denoted_prototype(prototype);
- ret=base->type;
- delete_denoted_base(base);
- return ret;
-
- }
-
- /*
- initializer:
- assignment-expression
- { initializer , ... [,] }
- */
- struct AST* parse_initializer(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Object *base)
- {
- /*TODO add compound initialiser*/
- return parse_assignment_expression(translation_data,scope);
- }
-
- const const const const const const const const const const const const const const const const const const const const const const const char const const const constant;
- #endif
F diff --git a/parse/parse_declaration.h b/parse/parse_declaration.h deleted file mode 100644 --- a/parse/parse_declaration.h +++ /dev/null
- #ifndef GCC_PARSE_DECLARATION_H
- #define GCC_PARSE_DECLARATION_H GCC_PARSE_DECLARATION_H
- #include <ast.h>
- #include <parse_expression.h>
- #include <parse_statement.h>
- #include <type.h>
- #include <denoted.h>
- #include <scope.h>
- #include <queue.h>
- #include <map.h>
- #include <lexer.h>
- #include <assert.h>
- #include <linkage.h>
-
-
-
- void parse_declaration(struct Translation_Data *translation_data,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions);
- struct Denotation_Prototype* parse_specifier_qualifier_list(struct Translation_Data *translation_data,struct Scope *scope);
- struct Denotation_Prototype* parse_declaration_specifiers(struct Translation_Data *translation_data,struct Scope *scope);
- struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Translation_Data *translation_data,struct Scope *scope,char parse_storage_class);
- struct Denoted* parse_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype);
- void parse_declarator_inner(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base);
- void parse_direct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base);
- void parse_direct_declarator_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Base *base);
- void parse_struct_union_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Struct_Union *base);
- char parse_struct_declaration(struct Translation_Data *translation_data,struct Scope *struct_scope,struct Queue* members);
- struct Denoted* parse_struct_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype);
- void parse_enum_specifier_finish(struct Translation_Data *translation_data,struct Scope *scope,struct Enum *enumeration);
- void parse_paramenter_list(struct Translation_Data *translation_data,struct Normal_Scope *function_prototype_scope,struct Queue *parameters);
- struct Type* parse_type_name(struct Translation_Data *translation_data,struct Scope *scope);
- struct Type* parse_abstract_declarator(struct Translation_Data *translation_data,struct Scope *scope,struct Denotation_Prototype *prototype);
- struct AST* parse_initializer(struct Translation_Data *translation_data,struct Scope *scope,struct Denoted_Object *base);
-
- #endif
F diff --git a/parse/parse_expression.c b/parse/parse_expression.c deleted file mode 100644 --- a/parse/parse_expression.c +++ /dev/null
- #ifndef GCC_PARSE_EXPR_C
- #define GCC_PARSE_EXPR_C GCC_PARSE_EXPR_C
- #include "parse_expression.h"
-
-
-
- struct AST* parse_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- return parse_comma_expression(translation_data,scope);
- }
-
- struct AST* parse_const_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- return parse_comma_expression(translation_data,scope);
- }
- /*
- primary-expression:
- number
- string
- id
- (e)
- generic-selection
-
- */
- struct AST* parse_primary_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct token *hold_token;
- struct AST *hold;
-
- if(translation_data->tokens->size==0)
- {
- /*TODO error*/
- push_translation_error("expected something here",translation_data);
- return (struct AST*)get_error_tree(NULL);
- }
- hold_token=Queue_Pop(translation_data->tokens);
- switch(hold_token->type)
- {
- case KW_NUMBER:
- case KW_STRING:
- return (struct AST*)get_rvalue_expression_tree(hold_token);
- case KW_ID:
- return (struct AST*)get_lvalue_expression_tree(hold_token,scope);
- case KW_OPEN_NORMAL:
- hold=parse_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- return (struct AST*)hold;
- }else
- {
- /*TODO error*/
- push_translation_error("expected ')' here",translation_data);
- return (struct AST*)get_error_tree(hold);
- }
- default:
- /*TODO error*/
- push_translation_error("error in expression",translation_data);
- return (struct AST*)get_error_tree(NULL);
- }
-
- /*just in case*/
- assert(0);
- return (struct AST*)get_error_tree(NULL);
-
- }
-
-
- /*
- arglist:
- (e)*\)
-
- */
- struct AST_Function_Expression* parse_arglist(struct Translation_Data *translation_data,struct Scope *scope,struct AST* id)
- {
- struct AST_Function_Expression *ret;
- ret=get_function_expression_tree(id,scope);
- ret->id=id;
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- return ret;
- }
- do
- {
- Queue_Push(&ret->arguments,parse_assignment_expression(translation_data,scope));
- } while(get_and_check(translation_data,KW_COMMA));
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- return ret;
- }else
- {
- push_translation_error("expected ')' here",translation_data);
- return (struct AST_Function_Expression*)get_error_tree((struct AST*)ret);
- }
-
- }
-
- /*
- postfix_expression:
- postfix_expression ++
- postfix_expression --
- postfix_expression [ expression ]
- postfix_expression.id
- postfix_expression->id
- postfix_expression ( arglist )
-
-
- primary_expression
- postfix_expression:
- primary_expression ( ++ | -- | \[ expression \] | .id | ->id | \( arglist \) )*
-
- */
- struct AST* parse_postfix_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- struct AST *hold_expr;
-
-
- hold=parse_primary_expression(translation_data,scope);
-
- while(translation_data->tokens->size!=0)
- {
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_PLUSPLUS:
- chomp(translation_data);
- hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_INC);
- break;
- case KW_MINUSMINUS:
- chomp(translation_data);
- hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_DEC);
- break;
- case KW_DOT:
- chomp(translation_data);
- if(check(translation_data,KW_ID,0))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(translation_data->tokens),scope),OP_MEMBER);
- }
- break;
- case KW_ARROW:
- chomp(translation_data);
- if(check(translation_data,KW_ID,0))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(translation_data->tokens),scope),OP_MEMBER_TROUGH_PTR);
- }
- break;
- case KW_OPEN_SQUARE:
-
- chomp(translation_data);
- if(get_and_check(translation_data,KW_CLOSE_SQUARE))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,NULL,OP_ARR_SUBSCRIPT);
- }else
- {
- hold_expr=parse_expression(translation_data,scope);
- hold=(struct AST*)get_binary_expression_tree(hold,hold_expr,OP_ARR_SUBSCRIPT);
- if(!get_and_check(translation_data,KW_CLOSE_SQUARE))
- {
- push_translation_error("expected ']' here",translation_data);
- return (struct AST*)get_error_tree(hold);
- }
- }
- break;
- case KW_OPEN_NORMAL:
- chomp(translation_data);
- return (struct AST*)parse_arglist(translation_data,scope,hold);
- break;
-
- default:
- return hold;
- }
- }
-
- return hold;
- }
-
- /*
- cast-expression:
- unary-expression
- (type)cast-expression
- */
- struct AST* parse_cast_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST_Unary_Expression *ret;
- if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- if(is_type(translation_data,scope))
- {
- ret=get_unary_expression_tree(NULL,OP_CAST);
- ret->value_type=parse_type_name(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- ret->operand=parse_cast_expression(translation_data,scope);
- return (struct AST*)ret;
- }else
- {
- push_translation_error("expected ')' here",translation_data);
- return (struct AST*)get_error_tree((struct AST*)ret);
-
- }
-
- }else
- {
- ret=(struct AST_Unary_Expression*)parse_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- return (struct AST*)ret;
- }else
- {
- push_translation_error("expected ')' here",translation_data);
- return (struct AST*)get_error_tree((struct AST*)ret);
- }
-
- }
- }else
- {
-
- return parse_unary_expression(translation_data,scope);
- }
- }
- /*
- unary-expression:
- ++unary-expression
- --unary-expression
- +unary-expression
- -unary-expression
- !cast-expression
- ~cast-expression
- *cast-expression
- &cast-expression
- sizeof ( typename )
- sizeof unary-expression
- postfix-expression
-
- */
-
- struct AST* parse_unary_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST_Unary_Expression *hold;
-
- if(translation_data->tokens->size==0)
- {
- /*TODO error*/
- push_translation_error("expected something here",translation_data);
- return (struct AST*)get_error_tree(NULL);
- }
-
- /*TODO make it iterative*/
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_PLUSPLUS:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_unary_expression(translation_data,scope),OP_PREFIX_INC);
- case KW_MINUSMINUS:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_unary_expression(translation_data,scope),OP_PREFIX_DEC);
- case KW_PLUS:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_UNARY_PLUS);
- case KW_MINUS:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_UNARY_MINUS);
- case KW_EXCLAMATION:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_LOGICAL_NOT);
- case KW_TILDE:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_BITWISE_NOT);
- case KW_STAR:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_DEREFERENCE);
- case KW_AND:
- chomp(translation_data);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(translation_data,scope),OP_ADDR_OF);
- case KW_SIZEOF:
- chomp(translation_data);
- if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- hold=get_unary_expression_tree(NULL,OP_CAST);
- hold->value_type=parse_type_name(translation_data,scope);
- hold->operand=parse_unary_expression(translation_data,scope);
- return (struct AST*)hold;
- }else
- {
- return (struct AST*)get_unary_expression_tree(parse_unary_expression(translation_data,scope),OP_SIZEOF);
- }
- default:
- return parse_postfix_expression(translation_data,scope);
- }
-
- }
- /*
- multiplicative-expression:
- cast-expression ( ( * | / | % ) cast-expression )*
- */
- struct AST* parse_multiplicative_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_cast_expression(translation_data,scope);
- while(translation_data->tokens->size!=0)
- {
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_STAR:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(translation_data,scope),OP_MUL);
- break;
- case KW_FORWARD_SLASH:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(translation_data,scope),OP_DIV);
- break;
- case KW_PERCENT:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(translation_data,scope),OP_REMAINDER);
- break;
- default:
- return hold;
- }
- }
-
- return hold;
- }
- /*
- additive-expression:
- multiplicative-expression ( ( + | - ) multiplicative )*
- */
- struct AST* parse_additive_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_multiplicative_expression(translation_data,scope);
-
- while(translation_data->tokens->size!=0)
- {
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_PLUS:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(translation_data,scope),OP_ADDITION);
- break;
- case KW_MINUS:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(translation_data,scope),OP_SUBTRACTION);
- break;
- default:
- return hold;
- }
- }
-
- return hold;
- }
- /*
- bitwise-shift:
- additive-expression ( ( << | >> ) additive-expression)*
- */
- struct AST* parse_shift_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_additive_expression(translation_data,scope);
-
- while(translation_data->tokens->size!=0)
- {
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_SHIFT_LEFT:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(translation_data,scope),OP_SHIFT_LEFT);
- break;
- case KW_SHIFT_RIGHT:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(translation_data,scope),OP_SHIFT_RIGHT);
- break;
- default:
- return hold;
- }
- }
- return hold;
- }
-
- /*
- relational-expression:
- shift-expression ( ( < | > | <= | >= ) shift-expression )*
- */
-
- struct AST* parse_relational_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_shift_expression(translation_data,scope);
-
- while(translation_data->tokens->size!=0)
- {
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_LESS:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_LESS);
- break;
- case KW_LESS_EQ:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_LESS_EQ);
- break;
- case KW_MORE:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_GREATER);
- break;
- case KW_MORE_EQ:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(translation_data,scope),OP_GREATER_EQ);
- break;
- default:
- return hold;
- }
- }
- return hold;
- }
-
-
- /*
- equality-expression:
- realtional-expression ( ( == | != ) relational-expression )*
- */
- struct AST* parse_equality_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_relational_expression(translation_data,scope);
-
- while(translation_data->tokens->size!=0)
- {
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_EQEQ:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(translation_data,scope),OP_EQUAL);
- break;
- case KW_NOT_EQ:
- chomp(translation_data);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(translation_data,scope),OP_NOT_EQUAL);
- break;
- default:
- return hold;
- }
- }
- return hold;
- }
- /*
- and-expression:
- equality-expression ( & equality-expression ) *
- */
- struct AST* parse_and_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_equality_expression(translation_data,scope);
- while(get_and_check(translation_data,KW_AND))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_equality_expression(translation_data,scope),OP_BITWISE_AND);
- }
- return hold;
- }
- /*
- exclusive-or-expression:
- and-expression (^ and-expression)*
-
- */
- struct AST* parse_exclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_and_expression(translation_data,scope);
- while(get_and_check(translation_data,KW_HAT))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_and_expression(translation_data,scope),OP_BITWISE_XOR);
- }
- return hold;
-
- }
- /*
- inclusive-or-expression:
- exclusive-or-expression (|exclusive-or-expression)*
- */
- struct AST* parse_inclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_exclusive_or_expression(translation_data,scope);
- while(get_and_check(translation_data,KW_PIPE))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_exclusive_or_expression(translation_data,scope),OP_BITWISE_OR);
- }
- return hold;
- }
- /*
- logical-and-expression:
- inclusive-or-expression(&&inclusive-or-expression)*
- */
- struct AST* parse_logical_and_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_inclusive_or_expression(translation_data,scope);
- while(get_and_check(translation_data,KW_AND_AND))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_inclusive_or_expression(translation_data,scope),OP_LOGICAL_AND);
- }
- return hold;
- }
- /*
- logical-or-expression:
- logical-and-expression ( || logical-and-expression )*
- */
- struct AST* parse_logical_or_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_logical_and_expression(translation_data,scope);
- while(get_and_check(translation_data,KW_PIPE_PIPE))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_logical_and_expression(translation_data,scope),OP_LOGICAL_OR);
- }
- return hold;
- }
-
- /*
- conditional-expression:
- logical-or-expression
- logical-or-expression?expression:conditional-expression
- */
- struct AST* parse_conditional_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_logical_or_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_QUESTION))
- {
- hold=(struct AST*)get_conditional_expression_tree(hold,parse_expression(translation_data,scope),NULL);
- if(get_and_check(translation_data,KW_COLUMN))
- {
- ((struct AST_Conditional_Expression*)hold)->right=parse_conditional_expression(translation_data,scope);
- return hold;
- }else
- {
- push_translation_error("expected ':' here",translation_data);
- return (struct AST*)get_error_tree(hold);
- }
- }else
- {
- return hold;
- }
- }
- /*
- assignment-expression:
- conditional-expression
- unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
- */
- struct AST* parse_assignment_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST *hold;
-
- if(translation_data->tokens->size==0)
- {
- /*TODO error*/
- push_translation_error("expected something here",translation_data);
- return (struct AST*)get_error_tree(NULL);
- }
-
- hold=parse_conditional_expression(translation_data,scope);
- if(translation_data->tokens->size==0)
- return hold;
- /*TODO make it iterative*/
- switch(((struct token*)translation_data->tokens->first->data)->type)
- {
- case KW_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_ASSIGN);
- case KW_PLUS_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_ADD_ASSIGN);
- case KW_MINUS_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_SUBTRACT_ASSIGN);
- case KW_PERCENT_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_REMAINDER_ASSIGN);
- case KW_DIV_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_DIV_ASSIGN);
- case KW_STAR_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_MULTIPLY_ASSIGN);
- case KW_SHIFT_RIGHT_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_SHIFT_RIGHT_ASSIGN);
- case KW_SHIFT_LEFT_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_SHIFT_LEFT_ASSIGN);
- case KW_AND_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_AND_ASSIGN);
- case KW_PIPE_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_PIPE_ASSIGN);
- case KW_HAT_EQ:
- chomp(translation_data);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_XOR_ASSIGN);
- default:
- return hold;
- }
-
- }
- /*
- comma-expression:
- assignment-expression(,assignment-expression)*
- */
- struct AST* parse_comma_expression(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_assignment_expression(translation_data,scope);
- while(get_and_check(translation_data,KW_COMMA))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(translation_data,scope),OP_COMMA);
- }
- return hold;
- }
-
- #endif
F diff --git a/parse/parse_expression.h b/parse/parse_expression.h deleted file mode 100644 --- a/parse/parse_expression.h +++ /dev/null
- #ifndef GCC_PARSE_EXPR_H
- #define GCC_PARSE_EXPR_H GCC_PARSE_EXPR_H
- #include <chonky.h>
- #include <queue.h>
- #include <lexer.h>
- #include <parse_declaration.h>
- #include <ast.h>
- #include <limits.h>
-
-
- struct AST* parse_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_const_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_primary_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
-
- struct AST_Function_Expression* parse_arglist(struct Translation_Data *translation_data,struct Scope *scope,struct AST* id);
- struct AST* parse_postfix_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
- struct AST* parse_cast_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_unary_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
- struct AST* parse_multiplicative_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
- struct AST* parse_additive_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
- struct AST* parse_shift_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
-
- struct AST* parse_relational_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_equality_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_and_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_exclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_inclusive_or_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_logical_and_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_logical_or_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_conditional_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_assignment_expression(struct Translation_Data *translation_data,struct Scope *scope);
- struct AST* parse_comma_expression(struct Translation_Data *translation_data,struct Scope *scope);
-
-
-
-
-
- /*
-
- expression:
- e15
- comma-expression:
- assignment-expression(,assignment-expression)*
-
- assignment-expression:
- unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
-
- conditional-expression:
- logical-or-expression
- logical-or-expression?expression:conditional-expression
- logical-or-expression:
- logical-and-expression ( || logical-and-expression )*
- logical-and-expression:
- inclusive-or-expression(&&inclusive-or-expression)*
- inclusive-or-expression:
- exclusive-or-expression (|exclusive-or-expression)*
- exclusive-or-expression:
- and-expression (^ and-expression)*
- and-expression:
- equality-expression ( & equality-expression ) *
- equality-expression:
- realtional-expression ( ( == | != ) relational-expression )*
- relational-expression:
- shift-expression ( ( < | > | <= | >= ) shift-expression )*
-
- shift-expression:
- additive-expression ( ( << | >> ) additive-expression)*
-
- additive-expression:
- multiplicative-expression ( ( + | - ) multiplicative-expression )*
-
- multiplicative-expression:
- cast-expression ( ( * | / | % ) cast-expression )*
-
- unary-expression:
- ++unary-expression
- --unary-expression
- +unary-expression
- -unary-expression
- !cast-expression
- ~cast-expression
- *cast-expression
- &cast-expression
- sizeof ( typename )
- sizeof unary-expression
- postfix-expression
-
- cast-expression:
- unary-expression
- (type)cast-expression
-
-
- arglist:
- epsilon
- assignment-expression-list(,assignment-expression-list)*
- postfix_expression:
- postfix_expression ++
- postfix_expression --
- postfix_expression [ expression ]
- postfix_expression.id
- postfix_expression->id
- postfix_expression ( arglist )
-
-
- primary_expression
-
- primary-expression:
- number
- string
- id
- (e)
-
- */
-
-
- #endif
F diff --git a/parse/parse_statement.c b/parse/parse_statement.c deleted file mode 100644 --- a/parse/parse_statement.c +++ /dev/null
- #ifndef PARSE_GCC_STATEMENT_C
- #define PARSE_GCC_STATEMENT_C PARSE_GCC_STATEMENT_C
- #include "parse_statement.h"
-
-
- struct AST* parse_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
-
- if(translation_data->tokens->size==0)
- return NULL;
-
-
-
- switch(kw_get(translation_data))
- {
- case KW_NOTYPE:
- push_translation_error("statement expected",translation_data);
- return (struct AST*)get_error_tree(NULL);
-
- case KW_OPEN_CURLY:
- chomp(translation_data);
- return parse_finish_compound_statement(translation_data,scope);
- case KW_IF:
- chomp(translation_data);
- return parse_finish_if_statement(translation_data,scope);
- case KW_SWITCH:
- chomp(translation_data);
- return parse_finish_switch_statement(translation_data,scope);
- case KW_WHILE:
- chomp(translation_data);
- return parse_finish_while_statement(translation_data,scope);
- case KW_DO:
- chomp(translation_data);
- return parse_finish_do_while_statement(translation_data,scope);
- case KW_FOR:
- chomp(translation_data);
- return parse_finish_for_statement(translation_data,scope);
- case KW_GOTO:
- chomp(translation_data);
- return parse_finish_goto_statement(translation_data,scope);
- case KW_CASE:
- chomp(translation_data);
- return parse_finish_labeled_statement(translation_data,scope,ST_CASE);
- case KW_DEFAULT:
- chomp(translation_data);
- return parse_finish_default_statement(translation_data,scope);
- case KW_ID:
- /*TODO check if id is in function scope*/
- if(0)
- {
- return parse_finish_labeled_statement(translation_data,scope,ST_LABEL);
- }else
- {
- return parse_expression_statement(translation_data,scope);
- }
- case KW_CONTINUE:
- chomp(translation_data);
- return parse_finish_continue_statement(translation_data);
- case KW_BREAK:
- chomp(translation_data);
- return parse_finish_break_statement(translation_data);
- case KW_RETURN:
- chomp(translation_data);
- return parse_finish_return_statement(translation_data,scope);
- default:
- return parse_expression_statement(translation_data,scope);
-
- }
-
- }
- /*
- ( declaration | statement )* }
- */
- struct AST* parse_finish_compound_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_Compound_Statement *hold;
- hold=get_compound_statement_tree(scope);
- while(!get_and_check(translation_data,KW_CLOSE_CURLY) && !has_no_tokens(translation_data))
- {
- if(is_type(translation_data,hold->scope))
- {
- parse_declaration(translation_data,hold->scope,&hold->components,0);
- }else
- {
- Queue_Push(&hold->components,parse_statement(translation_data,hold->scope));
- }
- if(has_new_errors(translation_data))
- chase_next_semicolumn(translation_data);
- }
-
- return (struct AST*)hold;
- }
- /*
- ( expression ) statement
- ( expression ) statement else statement
- */
- struct AST* parse_finish_if_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_If_Statement *hold;
- hold=get_if_statement_tree();
- if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- hold->body_statement=parse_statement(translation_data,scope);
- }else
- {
- push_translation_error(" ')' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- if(get_and_check(translation_data,KW_ELSE))
- {
- hold->else_statement=parse_statement(translation_data,scope);
- return (struct AST*)hold;
- }else
- {
- hold->else_statement=NULL;
- return (struct AST*)hold;
- }
- }else
- {
- push_translation_error(" '(' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- return (struct AST*)hold;
- }
- /*
- ( expression ) statement
- */
- struct AST* parse_finish_switch_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_Switch_Statement *hold;
- hold=get_switch_statement_tree();
- if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- hold->body_statement=parse_statement(translation_data,scope);
- }else
- {
- push_translation_error(" ')' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }else
- {
- push_translation_error(" '(' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- return (struct AST*)hold;
- }
- /*
- ( expression ) statement
-
- */
- struct AST* parse_finish_while_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_While_Statement *hold;
- hold=get_while_statement_tree();
- if(get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- hold->body_statement=parse_statement(translation_data,scope);
- }else
- {
- push_translation_error(" ')' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }else
- {
- push_translation_error(" '(' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- return (struct AST*)hold;
- }
- /*
- statement while ( expression ) ;
- */
- struct AST* parse_finish_do_while_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_Do_While_Statement *hold;
- hold=get_do_while_statement_tree();
- hold->body_statement=parse_statement(translation_data,scope);
- if(get_and_check(translation_data,KW_WHILE) && get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(translation_data,scope);
-
- if(get_and_check(translation_data,KW_CLOSE_NORMAL) && get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- return (struct AST*)hold;
- }else
- {
- push_translation_error(" ';' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }else
- {
- push_translation_error("'do-while' statement is unfinished",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- }
- /*
- ( [ expression ] ; [ expression ] ; [ expression ] ) statement
- */
- struct AST* parse_finish_for_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_For_Statement *hold;
- hold=get_for_statement_tree();
- if(!get_and_check(translation_data,KW_OPEN_NORMAL))
- {
- push_translation_error(" '(' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- hold->initialisation=parse_expression_statement(translation_data,scope);
- hold->condition=parse_expression_statement(translation_data,scope);
- if(get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- hold->update=get_nop_tree();
- }else
- {
- hold->update=parse_expression(translation_data,scope);
- if(!get_and_check(translation_data,KW_CLOSE_NORMAL))
- {
- push_translation_error(" ')' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }
- hold->body_statement=parse_statement(translation_data,scope);
- return (struct AST*)hold;
- }
- /*
- id ;
- */
- struct AST* parse_finish_goto_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST* ret;
-
- if(check(translation_data,KW_ID,0))
- {
- ret=(struct AST*)get_goto_statement_tree(Queue_Pop(translation_data->tokens),scope);
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- return ret;
- }else
- {
- push_translation_error(" ';' expected",translation_data);
- return (struct AST*)get_error_tree(ret);
- }
- }
- else
- {
- push_translation_error(" label expected in goto statement",translation_data);
- return (struct AST*)get_error_tree((struct AST*)get_goto_statement_tree(NULL,NULL));
- }
-
- }
- /*
- ;
- */
- struct AST* parse_finish_continue_statement(struct Translation_Data* translation_data)
- {
- struct AST *hold;
- hold=malloc(sizeof(struct AST));
- hold->type=ST_CONTINUE;
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- return hold;
- }else
- {
- push_translation_error(" ';' expected",translation_data);
- return (struct AST*)get_error_tree(hold);
- }
- }
- /*
- ;
- */
- struct AST* parse_finish_break_statement(struct Translation_Data* translation_data)
- {
- struct AST *hold;
- hold=malloc(sizeof(struct AST));
- hold->type=ST_BREAK;
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- return hold;
- }else
- {
- push_translation_error(" ';' expected",translation_data);
- return (struct AST*)get_error_tree(hold);
- }
- }
- /*
- id:
- statement
- */
- struct AST* parse_finish_labeled_statement(struct Translation_Data* translation_data,struct Scope *scope,enum AST_Type type)
- {
- struct AST_Labeled_Statement *ret;
- if(check(translation_data,KW_ID,0))
- {
- ret=get_labeled_statement_tree(Queue_Pop(translation_data->tokens),NULL,type);
- if(get_and_check(translation_data,KW_COLUMN))
- {
- ret->statement=parse_statement(translation_data,scope);
- return (struct AST*)ret;
- }else
- {
- push_translation_error(" ':' expected in labeled statement",translation_data);
- return (struct AST*)get_error_tree((struct AST*)ret);
- }
- }else
- {
- push_translation_error(" label expected in labeled statement",translation_data);
- return (struct AST*)get_error_tree(NULL);
- }
- }
- /*
- :
- statement
- */
- struct AST* parse_finish_default_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_Labeled_Statement *ret;
- ret=get_labeled_statement_tree(NULL,NULL,ST_DEFAULT);
- if(get_and_check(translation_data,KW_COLUMN))
- {
- ret->statement=parse_statement(translation_data,scope);
- return (struct AST*)ret;
- }else
- {
- push_translation_error(" ':' expected in default statement",translation_data);
- return (struct AST*)get_error_tree((struct AST*)ret);
- }
- }
- /*
- [ expression ] ;
-
- */
- struct AST* parse_finish_return_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST_Return_Statement *hold;
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- hold=get_return_statement_tree(get_nop_tree());
- return (struct AST*)hold;
- }
-
-
- hold=get_return_statement_tree(parse_expression(translation_data,scope));
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- return (struct AST*)hold;
- }else
- {
- push_translation_error(" ';' expected",translation_data);
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }
- /*
-
- [ expression ] ;
-
- */
- struct AST* parse_expression_statement(struct Translation_Data* translation_data,struct Scope *scope)
- {
- struct AST *hold;
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- hold=get_nop_tree();
- return (struct AST*)hold;
- }
- hold=parse_expression(translation_data,scope);
- if(get_and_check(translation_data,KW_SEMI_COLUMN))
- {
- return hold;
- }else
- {
- push_translation_error(" ';' expected",translation_data);
- return (struct AST*)get_error_tree(hold);
- }
- }
- void chase_next_semicolumn(struct Translation_Data *translation_data)
- {
- /*chase ; and start parsing next declaration*/
- while(!get_and_check(translation_data,KW_SEMI_COLUMN) && !check(translation_data,KW_CLOSE_CURLY,0) &&
- translation_data->tokens->size>0)
- {
- chomp(translation_data);
- }
- }
- #endif
F diff --git a/parse/parse_statement.h b/parse/parse_statement.h deleted file mode 100644 --- a/parse/parse_statement.h +++ /dev/null
- #ifndef PARSE_GCC_STATEMENT_H
- #define PARSE_GCC_STATEMENT_H PARSE_GCC_STATEMENT_H
- #include <scope.h>
- #include <ast.h>
- #include <queue.h>
- #include <program.h>
-
-
- struct AST* parse_finish_compound_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_op_e_cl_st(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_if_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_switch_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_do_while_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_while_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_for_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_goto_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_continue_statement(struct Translation_Data* translation_data);
- struct AST* parse_finish_break_statement(struct Translation_Data* translation_data);
- struct AST* parse_finish_return_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_expression_statement(struct Translation_Data* translation_data,struct Scope *scope);
- struct AST* parse_finish_labeled_statement(struct Translation_Data* translation_data,struct Scope *scope,enum AST_Type type);
- struct AST* parse_finish_default_statement(struct Translation_Data* translation_data,struct Scope *scope);
-
- void chase_next_semicolumn(struct Translation_Data *translation_data);
-
-
- #endif
F diff --git a/parse/parse_translation_unit.c b/parse/parse_translation_unit.c deleted file mode 100644 --- a/parse/parse_translation_unit.c +++ /dev/null
- #ifndef GCC_PARSE_TRANSLATION_C
- #define GCC_PARSE_TRANSLATION_C GCC_PARSE_TRANSLATION_C
- #include <parse_translation_unit.h>
- #include <gcc_error.h>
- /*
- translation-unit:
- declaration [ translation-unit ]
- function-definition [ translation-unit ]
- */
- struct AST* parse_translation_unit(struct Translation_Data *translation_data)
- {
- size_t loop_preventer;
- struct AST_Translation_Unit *hold;
- hold=get_translation_unit_tree();
-
- loop_preventer=0;
- while(translation_data->tokens->size>0 && loop_preventer!=translation_data->tokens->size)
- {
- loop_preventer=translation_data->tokens->size;
-
- if(is_type(translation_data,hold->file_scope) || kw_get(translation_data)==KW_ID)
- {
- parse_declaration(translation_data,hold->file_scope,&hold->components,1);
- if(has_new_errors(translation_data))
- {
- chase_next_semicolumn(translation_data);
- }
- }else
- {
- push_translation_error("declaration expected",translation_data);
- chase_next_semicolumn(translation_data);
- }
- }
- return (struct AST*)hold;
-
- }
-
- #endif
F diff --git a/parse/parse_translation_unit.h b/parse/parse_translation_unit.h deleted file mode 100644 --- a/parse/parse_translation_unit.h +++ /dev/null
- #ifndef GCC_PARSE_TRANSLATION_H
- #define GCC_PARSE_TRANSLATION_H GCC_PARSE_TRANSLATION_H
- #include <parse_declaration.h>
- #include <parse_statement.h>
- #include <error.h>
-
- struct AST* parse_translation_unit(struct Translation_Data *translation_data);
-
- #endif
F diff --git a/semantics/ast.c b/semantics/ast.c deleted file mode 100644 --- a/semantics/ast.c +++ /dev/null
- #ifndef GCC_AST_C
- #define GCC_AST_C GCC_AST_C
- #include "ast.h"
-
- struct AST_Error* get_error_tree(struct AST *error)
- {
- struct AST_Error *ret;
- ret=malloc(sizeof(struct AST_Error));
- ret->type=ERROR;
- ret->error=error;
- return ret;
- }
- struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error)
- {
-
- struct AST_Declaration_Error *ret;
- ret=malloc(sizeof(struct AST_Declaration_Error));
- ret->type=ERROR_DECLARATION;
- ret->error=error;
- return ret;
- }
-
- struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type)
- {
- struct AST_Binary_Expression *ret;
- ret=malloc(sizeof(struct AST_Binary_Expression));
- ret->type=type;
- ret->left=left;
- ret->right=right;
-
- return ret;
- }
- struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right)
- {
- struct AST_Conditional_Expression *ret;
- ret=malloc(sizeof(struct AST_Conditional_Expression));
- ret->type=OP_COND;
- ret->left=left;
- ret->center=center;
- ret->right=right;
- return ret;
- }
-
- struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope)
- {
- struct AST_Function_Expression *ret;
- ret=malloc(sizeof(struct AST_Function_Expression));
- ret->type=OP_FUNCTION;
- ret->id=id;
- Queue_Init(&ret->arguments);
- return ret;
- }
- struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type)
- {
-
- struct AST_Unary_Expression *ret;
- ret=malloc(sizeof(struct AST_Unary_Expression));
- ret->operand=operand;
- ret->type=type;
-
- return ret;
- }
- struct AST_Rvalue_Expression* get_rvalue_expression_tree(struct token *id)
- {
- struct AST_Rvalue_Expression *ret;
- ret=malloc(sizeof(struct AST_Rvalue_Expression));
- ret->type=OP_RVALUE;
- ret->id=id;
- return ret;
- }
- struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope)
- {
- struct AST_Lvalue_Expression *ret;
- ret=malloc(sizeof(struct AST_Lvalue_Expression));
- ret->type=OP_LVALUE;
- ret->id=id;
- ret->value_type=check_ordinary(scope,id);
- if(ret->value_type==NULL)
- {
- /*TODO error*/
- }
- return ret;
- }
-
-
-
-
-
- struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,enum AST_Type type)
- {
- struct AST_Labeled_Statement *ret;
- ret=malloc(sizeof(struct AST_Labeled_Statement));
- ret->type=type;
- ret->label=label;
- ret->statement=statement;
-
- return ret;
- }
- struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope)
- {
- struct AST_Compound_Statement *ret;
- ret=malloc(sizeof(struct AST_Compound_Statement));
- ret->type=ST_COMPOUND;
- Queue_Init(&ret->components);
- ret->scope=get_normal_scope(parent_scope,BLOCK_SCOPE);
- return ret;
- }
- struct AST_If_Statement* get_if_statement_tree()
- {
- struct AST_If_Statement *ret;
- ret=malloc(sizeof(struct AST_If_Statement));
- ret->type=ST_IF;
-
- return ret;
- }
- struct AST_Switch_Statement* get_switch_statement_tree()
- {
- struct AST_Switch_Statement *ret;
- ret=malloc(sizeof(struct AST_Switch_Statement));
- ret->type=ST_SWITCH;
- return ret;
- }
- struct AST_While_Statement* get_while_statement_tree()
- {
- struct AST_While_Statement *ret;
- ret=malloc(sizeof(struct AST_While_Statement));
- ret->type=ST_WHILE;
- return ret;
- }
- struct AST_Do_While_Statement* get_do_while_statement_tree()
- {
- struct AST_Do_While_Statement *ret;
- ret=malloc(sizeof(struct AST_Do_While_Statement));
- ret->type=ST_DO_WHILE;
- return ret;
- }
-
- struct AST_For_Statement* get_for_statement_tree()
- {
- struct AST_For_Statement *ret;
- ret=malloc(sizeof(struct AST_For_Statement));
- ret->type=ST_FOR;
- return ret;
- }
- struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression)
- {
- struct AST_Return_Statement *ret;
- ret=malloc(sizeof(struct AST_If_Statement));
- ret->type=ST_RETURN;
- ret->return_expression=return_expression;
- return ret;
- }
-
- struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope)
- {
- struct AST_Goto_Statement *ret;
- ret=malloc(sizeof(struct AST_Goto_Statement));
- ret->type=ST_GOTO;
- ret->label=label;
- return ret;
- }
-
-
- struct AST* get_nop_tree()
- {
- struct AST* ret;
- ret=malloc(sizeof(struct AST*));
- ret->type=OP_NOP;
- return ret;
- }
-
-
-
- struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition)
- {
- struct AST_Type_Definition *ret;
- ret=malloc(sizeof(struct AST_Type_Definition));
- ret->type=ST_TYPE_DEFINITION;
- ret->definition=definition;
-
- return ret;
-
- }
- struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object)
- {
- struct AST_Object_Declaration *ret;
- ret=malloc(sizeof(struct AST_Object_Declaration));
- ret->type=ST_OBJECT_DECLARATION;
- ret->object=object;
- return ret;
- }
-
- struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function)
- {
- struct AST_Function_Definition *ret;
- ret=malloc(sizeof(struct AST_Function_Definition));
- ret->type=ST_FUNCTION_DEFINITION;
- ret->function=function;
- return ret;
- }
-
- struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function)
- {
- struct AST_Function_Declaration *ret;
- ret=malloc(sizeof(struct AST_Function_Declaration));
- ret->type=ST_FUNCTION_DECLARATION;
- ret->function=function;
- return ret;
- }
- struct AST_Translation_Unit* get_translation_unit_tree()
- {
- struct AST_Translation_Unit *ret;
- ret=malloc(sizeof(struct AST_Translation_Unit));
-
- ret->internal_linkage=get_linkage();
- ret->file_scope=get_normal_scope(NULL,FILE_SCOPE);
-
-
-
- Queue_Init(&ret->components);
- Queue_Init(&ret->static_objects);
- ret->type=TRANSLATION_UNIT;
-
- return ret;
- }
-
-
- void delete_ast(struct AST* ast)
- {
- switch(ast->type)
- {
- case OP_COMMA:
- case OP_ADDITION:
- case OP_SUBTRACTION:
- case OP_MUL:
- case OP_DIV:
- case OP_REMAINDER:
- case OP_ASSIGN:
- case OP_ADD_ASSIGN:
- case OP_SUBTRACT_ASSIGN:
- case OP_MULTIPLY_ASSIGN:
- case OP_REMAINDER_ASSIGN:
- case OP_DIV_ASSIGN:
- case OP_SHIFT_LEFT_ASSIGN:
- case OP_AND_ASSIGN:
- case OP_SHIFT_RIGHT_ASSIGN:
- case OP_XOR_ASSIGN:
- case OP_PIPE_ASSIGN:
- case OP_LOGICAL_AND:
- case OP_LOGICAL_OR:
- case OP_BITWISE_OR:
- case OP_BITWISE_AND:
- case OP_BITWISE_XOR:
- case OP_MEMBER_TROUGH_PTR:
- case OP_MEMBER:
- case OP_ARR_SUBSCRIPT:
- case OP_SHIFT_LEFT:
- case OP_LESS_EQ:
- case OP_NOT_EQUAL:
- case OP_EQUAL:
- case OP_GREATER:
- case OP_LESS:
- case OP_GREATER_EQ:
- case OP_SHIFT_RIGHT:
- delete_ast_binary_expression((struct AST_Binary_Expression*)ast);
- break;
- case OP_COND:
- delete_ast_conditional_expression((struct AST_Conditional_Expression*)ast);
- break;
- case OP_FUNCTION:
- delete_ast_function_expression((struct AST_Function_Expression*)ast);
- break;
- case OP_NOP:
- /*it is just a ast node*/
- free(ast);
- break;
- case OP_LOGICAL_NOT:
- case OP_BITWISE_NOT:
- case OP_ADDR_OF:
- case OP_DEREFERENCE:
- case OP_POSTFIX_INC:
- case OP_POSTFIX_DEC:
- case OP_PREFIX_INC:
- case OP_PREFIX_DEC:
- case OP_UNARY_PLUS:
- case OP_UNARY_MINUS:
- case OP_CAST:
- case OP_SIZEOF:
- delete_ast_unary_expression((struct AST_Unary_Expression*)ast);
- break;
- case OP_LVALUE:
- delete_ast_lvalue_expression((struct AST_Lvalue_Expression*)ast);
- break;
- case OP_RVALUE:
- delete_ast_rvalue_expression((struct AST_Rvalue_Expression*)ast);
- break;
- case ST_COMPOUND:
- delete_ast_compound_statement((struct AST_Compound_Statement*)ast);
- break;
- case ST_SWITCH:
- delete_ast_switch_statement((struct AST_Switch_Statement*)ast);
- break;
- case ST_IF:
- delete_ast_if_statemtent((struct AST_If_Statement*)ast);
- break;
- case ST_WHILE:
- delete_ast_while_statemtent((struct AST_While_Statement*)ast);
- break;
- case ST_DO_WHILE:
- delete_ast_do_while_statement((struct AST_Do_While_Statement*)ast);
- break;
- case ST_GOTO:
- delete_ast_goto_statemtent((struct AST_Goto_Statement*)ast);
- break;
- case ST_LABEL:
- case ST_CASE:
- delete_ast_labeled_statement((struct AST_Labeled_Statement*)ast);
- break;
- case ST_DEFAULT:
- case ST_CONTINUE:
- case ST_BREAK:
- /*I think it doesnt come with anything*/
- free(ast);
- break;
- case ST_RETURN:
- delete_ast_return_statement((struct AST_Return_Statement*)ast);
- break;
- case ST_FOR:
- delete_ast_for_statement((struct AST_For_Statement*)ast);
- break;
- case ST_OBJECT_DECLARATION:
- delete_ast_object_declaration((struct AST_Object_Declaration*)ast);
- break;
- case ST_TYPE_DEFINITION:
- delete_ast_type_definition((struct AST_Type_Definition*)ast);
- break;
- case ST_FUNCTION_DEFINITION:
- delete_ast_function_definition((struct AST_Function_Definition*)ast);
- break;
- case ST_FUNCTION_DECLARATION:
- delete_ast_function_declaration((struct AST_Function_Declaration*)ast);
- break;
- case TRANSLATION_UNIT:
- delete_ast_translation_unit((struct AST_Translation_Unit*)ast);
- break;
- case ERROR:
- delete_ast_error((struct AST_Error*)ast);
- break;
- case ERROR_DECLARATION:
- delete_ast_declaration_error((struct AST_Declaration_Error*)ast);
- break;
- default:
- assert(0);
- }
- }
- void delete_ast_error(struct AST_Error *error)
- {
- if(error->error!=NULL)
- delete_ast(error->error);
- free(error);
- }
- void delete_ast_declaration_error(struct AST_Declaration_Error *error)
- {
- if(error->error!=NULL)
- delete_denoted_error((struct Denoted_Error*)error->error);
- free(error);
- }
- void delete_ast_binary_expression(struct AST_Binary_Expression *binary_expression)
- {
- if(binary_expression->left!=NULL)
- delete_ast(binary_expression->left);
- if(binary_expression->right!=NULL)
- delete_ast(binary_expression->right);
-
- free(binary_expression);
- }
- void delete_ast_conditional_expression(struct AST_Conditional_Expression *cond_expression)
- {
-
- if(cond_expression->left!=NULL)
- delete_ast(cond_expression->left);
- if(cond_expression->center!=NULL)
- delete_ast(cond_expression->center);
- if(cond_expression->right!=NULL)
- delete_ast(cond_expression->right);
-
- free(cond_expression);
- }
- void delete_ast_function_expression(struct AST_Function_Expression *function_expression)
- {
- struct Queue_Node *it;
- if(function_expression->id!=NULL)
- delete_ast(function_expression->id);
- while(function_expression->arguments.size>0)
- delete_ast(Queue_Pop(&function_expression->arguments));
-
- free(function_expression);
-
- }
- void delete_ast_rvalue_expression(struct AST_Rvalue_Expression *rval_expression)
- {
- free(rval_expression->id);
- free(rval_expression);
- }
- void delete_ast_lvalue_expression(struct AST_Lvalue_Expression *lval_expression)
- {
- free(lval_expression->id);
- free(lval_expression);
- }
- void delete_ast_unary_expression(struct AST_Unary_Expression *unary_expression)
- {
- if(unary_expression->operand!=NULL)
- delete_ast(unary_expression->operand);
- free(unary_expression);
- }
- void delete_ast_labeled_statement(struct AST_Labeled_Statement *labeled_statement)
- {
- if(labeled_statement->label!=NULL)
- free(labeled_statement->label);
- if(labeled_statement->statement!=NULL)
- delete_ast(labeled_statement->statement);
- free(labeled_statement);
- }
- void delete_ast_compound_statement(struct AST_Compound_Statement *compound_statement)
- {
- if(compound_statement->scope!=NULL)
- delete_scope(compound_statement->scope);
- while(compound_statement->components.size>0)
- delete_ast((struct AST*)Queue_Pop(&compound_statement->components));
- free(compound_statement);
- }
- void delete_ast_for_statement(struct AST_For_Statement *for_statement)
- {
- if(for_statement->condition!=NULL)
- delete_ast(for_statement->condition);
- if(for_statement->initialisation!=NULL)
- delete_ast(for_statement->initialisation);
- if(for_statement->update!=NULL)
- delete_ast(for_statement->update);
- if(for_statement->body_statement!=NULL)
- delete_ast(for_statement->body_statement);
- free(for_statement);
- }
- void delete_ast_while_statemtent(struct AST_While_Statement *while_statement)
- {
- if(while_statement->condition!=NULL)
- delete_ast(while_statement->condition);
- if(while_statement->body_statement!=NULL)
- delete_ast(while_statement->body_statement);
- free(while_statement);
- }
- void delete_ast_do_while_statement(struct AST_Do_While_Statement *do_while_statement)
- {
- if(do_while_statement->condition!=NULL)
- delete_ast(do_while_statement->condition);
- if(do_while_statement->body_statement!=NULL)
- delete_ast(do_while_statement->body_statement);
- free(do_while_statement);
- }
- void delete_ast_if_statemtent(struct AST_If_Statement *if_statement)
- {
- if(if_statement->condition!=NULL)
- delete_ast(if_statement->condition);
- if(if_statement->body_statement!=NULL)
- delete_ast(if_statement->body_statement);
- if(if_statement->else_statement!=NULL)
- delete_ast(if_statement->else_statement);
- free(if_statement);
- }
- void delete_ast_goto_statemtent(struct AST_Goto_Statement *goto_statement)
- {
- if(goto_statement->label!=NULL)
- free(goto_statement->label);
- free(goto_statement);
- }
- void delete_ast_switch_statement(struct AST_Switch_Statement *switch_statement)
- {
- if(switch_statement->condition!=NULL)
- delete_ast(switch_statement->condition);
- if(switch_statement->body_statement!=NULL)
- delete_ast(switch_statement->body_statement);
- free(switch_statement);
- }
- void delete_ast_return_statement(struct AST_Return_Statement *return_statement)
- {
- if(return_statement->return_expression!=NULL)
- delete_ast(return_statement->return_expression);
- free(return_statement);
- }
- void delete_ast_type_definition(struct AST_Type_Definition *type_definition)
- {
- /*deleting denoted objects in scopes*/
- free(type_definition);
- }
- void delete_ast_object_declaration(struct AST_Object_Declaration *object_declaration)
- {
- free(object_declaration);
-
- }
- void delete_ast_function_definition(struct AST_Function_Definition *function_definition)
- {
- free(function_definition);
- }
- void delete_ast_function_declaration(struct AST_Function_Declaration *function_declaration)
- {
- free(function_declaration);
- }
- void delete_ast_translation_unit(struct AST_Translation_Unit *translation_unit)
- {
- while(translation_unit->components.size>0)
- delete_ast((struct AST*)Queue_Pop(&translation_unit->components));
- if(translation_unit->file_scope!=NULL)
- delete_scope(translation_unit->file_scope);
- delete_linkage(translation_unit->internal_linkage);
- free(translation_unit);
- }
-
-
-
-
-
-
- #endif
F diff --git a/semantics/ast.h b/semantics/ast.h deleted file mode 100644 --- a/semantics/ast.h +++ /dev/null
- #ifndef GCC_AST_H
- #define GCC_AST_H GCC_AST_H
- #include <ast.hh>
- #include <scope.h>
- #include <parse_declaration.h>
- #include <denoted.h>
- #include <linkage.h>
-
-
-
- enum AST_Type;
-
-
-
- /*
- struct AST
- {
- enum AST_Type type;
-
- unsigned long value_type;
- void *data;
-
- struct Queue arguments;
-
- };
- */
- struct AST
- {
- enum AST_Type type;
- };
- struct AST_Error
- {
- enum AST_Type type;
- struct AST *error;
- };
- struct AST_Declaration_Error
- {
- enum AST_Type type;
- struct Denoted *error;
- };
- struct AST_Binary_Expression
- {
- enum AST_Type type;
-
- struct Type *value_type;
- struct AST *left;
- struct AST *right;
-
- };
- struct AST_Conditional_Expression
- {
- enum AST_Type type;
-
- struct Type *value_type;
-
- struct AST *left;
- struct AST *center;
- struct AST *right;
-
- };
- struct AST_Function_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
-
- struct AST *id;
- /*queue of astrees*/
- struct Queue arguments;
- };
- /*TODO propperly name these*/
- struct AST_Rvalue_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
- struct token *id;
- };
- struct AST_Lvalue_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
- struct token *id;
- /*TODO*/
- struct Object *object;
- };
- struct AST_Unary_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
- struct AST *operand;
- };
-
- struct AST_Labeled_Statement
- {
- enum AST_Type type;
- struct token *label;
- struct AST *statement;
- };
- struct AST_Compound_Statement
- {
- enum AST_Type type;
-
- struct Scope *scope;
- struct Queue components;
- };
-
- struct AST_For_Statement
- {
- enum AST_Type type;
- struct AST *condition;
- struct AST *initialisation;
- struct AST *update;
- struct AST *body_statement;
- };
- struct AST_While_Statement
- {
- enum AST_Type type;
- struct AST *condition;
- struct AST *body_statement;
- };
- struct AST_Do_While_Statement
- {
- enum AST_Type type;
- struct AST *body_statement;
- struct AST *condition;
- };
- struct AST_If_Statement
- {
- enum AST_Type type;
- struct AST* condition;
- struct AST* body_statement;
- struct AST* else_statement;
-
- };
- struct AST_Goto_Statement
- {
- enum AST_Type type;
- struct token *label;
- };
- struct AST_Switch_Statement
- {
- enum AST_Type type;
- struct AST* condition;
- struct AST* body_statement;
- };
- struct AST_Return_Statement
- {
- enum AST_Type type;
- struct AST* return_expression;
-
- };
-
-
- struct AST_Type_Definition
- {
- enum AST_Type type;
- struct Denoted_Typedef *definition;
- };
- struct AST_Object_Declaration
- {
- enum AST_Type type;
- struct Denoted_Object *object;
- };
- struct AST_Function_Definition
- {
- enum AST_Type type;
- struct Denoted_Function *function;
- };
- struct AST_Function_Declaration
- {
- enum AST_Type type;
- struct Denoted_Function *function;
- };
- struct AST_Translation_Unit
- {
- enum AST_Type type;
- struct Queue components;
-
- struct Scope *file_scope;
- struct Linkage *internal_linkage;
- struct Queue static_objects;
- };
-
-
-
-
- struct AST_Error* get_error_tree(struct AST *error);
- struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error);
- struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type);
- struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right);
- struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope);
- struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type);
- struct AST_Rvalue_Expression* get_rvalue_expression_tree(struct token *id);
- struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope);
- struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,enum AST_Type type);
- struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope);
- struct AST_If_Statement* get_if_statement_tree();
- struct AST_Switch_Statement* get_switch_statement_tree();
- struct AST_While_Statement* get_while_statement_tree();
- struct AST_Do_While_Statement* get_do_while_statement_tree();
- struct AST_For_Statement* get_for_statement_tree();
- struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression);
- struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope);
- struct AST* get_nop_tree();
- struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition);
- struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object);
- struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function);
- struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function);
- struct AST_Translation_Unit* get_translation_unit_tree();
-
-
-
- void delete_ast(struct AST* ast);
- void delete_ast_error(struct AST_Error *error);
- void delete_ast_declaration_error(struct AST_Declaration_Error *error);
- void delete_ast_binary_expression(struct AST_Binary_Expression *binary_expression);
- void delete_ast_conditional_expression(struct AST_Conditional_Expression *cond_expression);
- void delete_ast_function_expression(struct AST_Function_Expression *function_expression);
- void delete_ast_rvalue_expression(struct AST_Rvalue_Expression *rval_expression);
- void delete_ast_lvalue_expression(struct AST_Lvalue_Expression *lval_expression);
- void delete_ast_unary_expression(struct AST_Unary_Expression *unary_expression);
- void delete_ast_labeled_statement(struct AST_Labeled_Statement *labeled_statement);
- void delete_ast_compound_statement(struct AST_Compound_Statement *compound_statement);
- void delete_ast_for_statement(struct AST_For_Statement *for_statement);
- void delete_ast_while_statemtent(struct AST_While_Statement *while_statement);
- void delete_ast_do_while_statement(struct AST_Do_While_Statement *do_while_statement);
- void delete_ast_if_statemtent(struct AST_If_Statement *if_statement);
- void delete_ast_goto_statemtent(struct AST_Goto_Statement *goto_statement);
- void delete_ast_switch_statement(struct AST_Switch_Statement *switch_statement);
- void delete_ast_return_statement(struct AST_Return_Statement *return_statement);
- void delete_ast_type_definition(struct AST_Type_Definition *type_definition);
- void delete_ast_object_declaration(struct AST_Object_Declaration *object_declaration);
- void delete_ast_function_definition(struct AST_Function_Definition *function_definition);
- void delete_ast_function_declaration(struct AST_Function_Declaration *function_declaration);
- void delete_ast_translation_unit(struct AST_Translation_Unit *translation_unit);
-
-
-
-
-
-
-
-
-
-
- #endif
F diff --git a/semantics/ast.hh b/semantics/ast.hh deleted file mode 100644 --- a/semantics/ast.hh +++ /dev/null
- #ifndef GCC_AST_HH
- #define GCC_AST_HH GCC_AST_HH
-
- #define BIN_EXPR_PTR(x) ((struct AST_Binary_Expression*)(x))
- #define UN_EXPR_PTR(x) ((struct AST_Unary_Expression*)(x))
- #define LVAL_EXPR_PTR(x) ((struct AST_Lvalue_Expression*)(x))
- #define RVAL_EXPR_PTR(x) ((struct AST_Rvalue_Expression*)(x))
- #define DECLR_PTR(x) ((struct AST_Declaration*)(x))
- #define IF_ST_PTR(s) ((struct AST_If_Statement*)(x))
-
- enum AST_Type{
- OP_COMMA
- ,OP_ADDITION,OP_SUBTRACTION,OP_MUL,OP_DIV,OP_REMAINDER
- ,OP_COND,OP_FUNCTION
- ,OP_ASSIGN,OP_ADD_ASSIGN,OP_SUBTRACT_ASSIGN,OP_MULTIPLY_ASSIGN,OP_REMAINDER_ASSIGN,OP_DIV_ASSIGN
- ,OP_SHIFT_LEFT_ASSIGN,OP_SHIFT_RIGHT_ASSIGN
- ,OP_AND_ASSIGN,OP_XOR_ASSIGN,OP_PIPE_ASSIGN
- ,OP_NOP
- ,OP_LOGICAL_OR,OP_LOGICAL_AND,OP_LOGICAL_NOT
- ,OP_BITWISE_OR,OP_BITWISE_AND,OP_BITWISE_XOR,OP_BITWISE_NOT
- ,OP_ADDR_OF,OP_DEREFERENCE,OP_MEMBER_TROUGH_PTR,OP_MEMBER,OP_ARR_SUBSCRIPT
- ,OP_POSTFIX_INC,OP_POSTFIX_DEC
- ,OP_PREFIX_INC,OP_PREFIX_DEC
- ,OP_UNARY_PLUS,OP_UNARY_MINUS
- ,OP_CAST,OP_SIZEOF
- ,OP_SHIFT_LEFT,OP_SHIFT_RIGHT
- ,OP_LESS_EQ,OP_GREATER_EQ
- ,OP_LESS,OP_GREATER
- ,OP_EQUAL,OP_NOT_EQUAL
- ,OP_LVALUE,OP_RVALUE
- ,ST_COMPOUND,ST_EXPRESSION,ST_SWITCH,ST_IF,ST_WHILE,ST_DO_WHILE,ST_GOTO,ST_LABEL,ST_CASE,ST_DEFAULT
- ,ST_CONTINUE,ST_BREAK,ST_RETURN,ST_FOR
- ,ST_OBJECT_DECLARATION,ST_TYPE_DEFINITION,ST_FUNCTION_DEFINITION
- ,ST_FUNCTION_DECLARATION
- ,TRANSLATION_UNIT
- ,ERROR,ERROR_DECLARATION
- };
- struct AST;
- struct AST_Error;
- struct AST_Declaration_Error;
- struct AST_Binary_Expression;
- struct AST_Conditional_Expression;
- struct AST_Function_Expression;
- struct AST_Rvalue_Expression;
- struct AST_Lvalue_Expression;
- struct AST_Unary_Expression;
- struct AST_Labeled_Statement;
- struct AST_Compound_Statement;
- struct AST_For_Statement;
- struct AST_While_Statement;
- struct AST_Do_While_Statement;
- struct AST_If_Statement;
- struct AST_Goto_Statement;
- struct AST_Switch_Statement;
- struct AST_Return_Statement;
- struct AST_Type_Definition;
- struct AST_Object_Declaration;
- struct AST_Function_Definition;
- struct AST_Function_Declaration;
- struct AST_Translation_Unit;
-
- #endif
F diff --git a/semantics/denoted.c b/semantics/denoted.c deleted file mode 100644 --- a/semantics/denoted.c +++ /dev/null
- #ifndef GCC_DENOTED_C
- #define GCC_DENOTED_C GCC_DENOTED_C
- #include <denoted.h>
-
- struct Denoted* get_denoted_error(struct Denoted *error)
- {
- struct Denoted_Error *ret;
- ret=malloc(sizeof(struct Denoted_Error));
- ret->denotation=DT_Error;
- ret->error=error;
-
- return (struct Denoted*)ret;
- }
- struct Denoted_Base* get_denoted_base(struct Denotation_Prototype *prototype)
- {
- struct Denoted_Base *ret;
- ret=malloc(sizeof(struct Denoted_Base));
- ret->denotation=prototype->denotation;
- ret->id=NULL;
- ret->type=prototype->type;
-
- return ret;
- }
- struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs)
- {
- struct Denoted_Function *ret;
- ret=malloc(sizeof(struct Denoted_Function));
- ret->denotation=DT_Function;
- ret->linkage=LINKAGE_NONE;
- ret->id=id;
- ret->type=return_type;
- ret->function_specifier=fs;
- ret->body=NULL;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_object(struct token *id, enum Storage_Class_Specifier sc,struct Type *type,struct AST *initializer)
- {
- struct Denoted_Object *ret;
- ret=malloc(sizeof(struct Denoted_Object));
- ret->denotation=DT_Object;
- ret->linkage=LINKAGE_NONE;
- ret->id=id;
-
- ret->object=malloc(sizeof(struct Object));
- ret->object->type=type;
- ret->object->location=NULL;
- ret->object->storage_class=sc;
-
- ret->initializer=initializer;
-
- return (struct Denoted*)ret;
- }
-
- struct Denoted* get_denoted_typedef(struct Denoted_Base *base)
- {
- struct Denoted_Typedef *ret;
- ret=malloc(sizeof(struct Denoted_Typedef));
- ret->denotation=DT_Typedef;
- ret->type=base->type;
- ret->id=base->id;
-
- return (struct Denoted*)ret;
-
- }
- struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression)
- {
- struct Denoted_Enum_Const *ret;
- ret=malloc(sizeof(struct Denoted_Enum_Const));
- ret->denotation=DT_Enum_Constant;
- ret->id=id;
- ret->parent=parent;
- ret->expression=expression;
- ret->value=evaluate_const_expression_integer(expression);
-
- return (struct Denoted*)ret;
-
- }
- struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value)
- {
- struct Denoted_Enum_Const *ret;
- ret=malloc(sizeof(struct Denoted_Enum_Const));
- ret->denotation=DT_Enum_Constant;
- ret->id=id;
- ret->parent=parent;
- ret->expression=NULL;
- ret->value=value;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator)
- {
- struct Denoted_Enum *ret;
- ret=malloc(sizeof(struct Denoted_Enum));
- ret->denotation=DT_Enum;
- ret->id=id;
- ret->enumeration=enumerator;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union)
- {
- struct Denoted_Struct_Union *ret;
- ret=malloc(sizeof(struct Denoted_Struct_Union));
- ret->denotation=DT_Struct_Union_Tag;
- ret->id=id;
- ret->struct_union=struct_union;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denotation_prototype(struct Map *types)
- {
- struct Denotation_Prototype *ret;
- ret=malloc(sizeof(struct Denotation_Prototype));
- ret->denotation=DT_Prototype;
- ret->type=NULL;
- ret->node=types;
- ret->storage_class=SCS_NONE;
- ret->specifier=TS_NONE;
- ret->constraint=TC_NONE;
- ret->sign=TSIGN_NONE;
- ret->function_specifier=FS_None;
- ret->struct_union=NULL;
- ret->enumerator=NULL;
- ret->size=0;
- ret->is_const=ret->is_volatile=0;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract)
- {
- if(base->type->specifier==TS_FUNC)
- {
- if(base->id==NULL && !allow_abstract)
- {
- return get_denoted_error(get_denoted_function(NULL,((struct Type_Function*)base->type)->return_type,prototype->function_specifier));
- }else
- {
- struct Denoted_Function *hold_denoted_function;
- hold_denoted_function=(struct Denoted_Function*)get_denoted_function(base->id,base->type,prototype->function_specifier);
- /*hack*/
- switch(prototype->storage_class)
- {
- case SCS_NONE:
- hold_denoted_function->linkage=LINKAGE_NONE;
- break;
- case SCS_EXTERN:
- hold_denoted_function->linkage=LINKAGE_EXTERNAL;
- break;
- case SCS_STATIC:
- hold_denoted_function->linkage=LINKAGE_INTERNAL;
- break;
-
- }
- return (struct Denoted*)hold_denoted_function;
- }
- }else if(prototype->storage_class==SCS_TYPEDEF)
- {
- if(base->id==NULL && !allow_abstract)
- {
- return get_denoted_error(get_denoted_typedef(base));
- }else
- {
- return get_denoted_typedef(base);
- }
- }else
- {
- if(base->id==NULL && !allow_abstract)
- {
- return get_denoted_error(get_denoted_object(base->id,prototype->storage_class,base->type,NULL));
- }else
- {
- return get_denoted_object(base->id,prototype->storage_class,base->type,NULL);
- }
- }
- }
-
- void delete_denoted(struct Denoted *denoted)
- {
- switch(denoted->denotation)
- {
- case DT_Label:
- free(denoted);
- break;
- case DT_Object:
- delete_denoted_object((struct Denoted_Object*)denoted);
- break;
- case DT_Typedef:
- delete_denoted_typedef((struct Denoted_Typedef*)denoted);
- break;
- case DT_Function:
- delete_denoted_function((struct Denoted_Function*)denoted);
- break;
- case DT_Enum:
- delete_denoted_enum((struct Denoted_Enum*)denoted);
- break;
- case DT_Enum_Constant:
- delete_denoted_enum_constant((struct Denoted_Enum_Const*)denoted);
- break;
- case DT_Struct_Union_Tag:
- delete_denoted_struct_union((struct Denoted_Struct_Union*)denoted);
- break;
- case DT_Error:
- delete_denoted_error((struct Denoted_Error*)denoted);
- break;
- case DT_Prototype:
- default:
- assert(0);
- }
- }
- void delete_denoted_error(struct Denoted_Error *error)
- {
- if(error->error!=NULL)
- delete_denoted(error->error);
- free(error);
- }
- void delete_denoted_function(struct Denoted_Function *function)
- {
- if(function->id!=NULL)
- free(function->id);
- if(function->body!=NULL)
- delete_ast_compound_statement(function->body);
- free(function);
- }
- void delete_denoted_object(struct Denoted_Object *object)
- {
- if(object->id!=NULL)
- free(object->id);
- if(object->object!=NULL)
- delete_object(object->object);
- if(object->initializer!=NULL)
- delete_ast(object->initializer);
- free(object);
- }
- void delete_denoted_typedef(struct Denoted_Typedef *typedefed)
- {
- if(typedefed->id!=NULL)
- free(typedefed->id);
- free(typedefed);
- }
- void delete_denoted_enum(struct Denoted_Enum *enumeration)
- {
- if(enumeration->id!=NULL)
- free(enumeration->id);
- if(enumeration->enumeration!=NULL)
- delete_enum(enumeration->enumeration);
- free(enumeration);
- }
- void delete_denoted_enum_constant(struct Denoted_Enum_Const *enum_const)
- {
- if(enum_const->id!=NULL)
- free(enum_const->id);
- if(enum_const->expression!=NULL)
- delete_ast(enum_const->expression);
- free(enum_const);
- }
- void delete_denoted_struct_union(struct Denoted_Struct_Union *su)
- {
- if(su->id!=NULL)
- free(su->id);
- if(su->struct_union!=NULL)
- delete_struct_union(su->struct_union);
- free(su);
- }
- void delete_object(struct Object *object)
- {
- if(object->location!=NULL)
- delete_location(object->location);
- free(object);
- }
- void delete_denoted_prototype(struct Denotation_Prototype *prototype)
- {
- free(prototype);
- }
- void delete_denoted_base(struct Denoted_Base *base)
- {
- free(base);
- }
- void delete_denoted_wrapper(void *denoted)
- {
- delete_denoted(denoted);
- }
- void delete_denoted_with_no_linkage_wrapper(void *denoted)
- {
- if( ((struct Denoted*)denoted)->denotation == DT_Object )
- {
- if( AS_DENOTED_OBJECT_PTR(denoted)->linkage!=LINKAGE_NONE )
- return;
- }
- delete_denoted(denoted);
- }
-
-
-
-
- #endif
F diff --git a/semantics/denoted.h b/semantics/denoted.h deleted file mode 100644 --- a/semantics/denoted.h +++ /dev/null
- #ifndef GCC_DENOTED_H
- #define GCC_DENOTED_H GCC_DENOTED_H
- #include <denoted.hh>
- #include <type.h>
- #include <scope.h>
- #include <semantics.h>
- #include <linkage.h>
-
-
- enum Denotation_Type;
- enum Function_Specifier;
- enum Storage_Class_Specifier;
-
-
- struct Denoted
- {
- enum Denotation_Type denotation;
- };
-
-
- struct Denoted_Error
- {
- enum Denotation_Type denotation;
- struct Denoted *error;
- };
- struct Denoted_Base
- {
- enum Denotation_Type denotation;
- struct token *id;
- struct Type *type;
- };
- struct Denoted_Function
- {
- enum Denotation_Type denotation;
- enum Linkage_Type linkage;
- struct token *id;
- struct Type *type;
-
-
- enum Function_Specifier function_specifier;
- struct AST_Compound_Statement *body;
- };
- struct Denoted_Object
- {
- enum Denotation_Type denotation;
- enum Linkage_Type linkage;
-
- struct token *id;
- struct Object *object;
- struct AST *initializer;
- };
- struct Denoted_Typedef
- {
- enum Denotation_Type denotation;
- struct token *id;
- struct Type *type;
-
- };
- struct Denoted_Enum
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Enum *enumeration;
- };
- struct Denoted_Enum_Const
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Enum *parent;
- int value;
- struct AST* expression;
- };
-
- struct Denoted_Struct_Union
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Struct_Union *struct_union;
- };
-
- struct Denotation_Prototype
- {
- enum Denotation_Type denotation;
- struct Type *type;
- struct Map *node;
-
-
- enum Storage_Class_Specifier storage_class;
- enum Type_Specifier specifier;
- enum Type_Constraint constraint;
- enum Type_Signedness sign;
- enum Function_Specifier function_specifier;
-
- struct Struct_Union *struct_union;
- struct Enum *enumerator;
-
- size_t size;
- char is_const:1;
- char is_volatile:1;
- };
- struct Object
- {
- struct Type *type;
- struct Location *location;
- enum Storage_Class_Specifier storage_class;
- };
-
- struct Static_Object;
- struct Automatic_Object;
-
-
- struct Denoted_Base* get_denoted_base(struct Denotation_Prototype *prototype);
- struct Denoted* get_denoted_error(struct Denoted *error);
- struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs);
- struct Denoted* get_denoted_object(struct token *id, enum Storage_Class_Specifier sc,struct Type *type,struct AST *initializer);
- struct Denoted* get_denoted_typedef(struct Denoted_Base *base);
- struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression);
- struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value);
- struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator);
- struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union);
-
- struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract);
- struct Denoted* get_denotation_prototype(struct Map *types);
-
-
- void delete_denoted_wrapper(void *denoted);
- void delete_denoted_with_no_linkage_wrapper(void *denoted);
- void delete_denoted(struct Denoted *denoted);
- void delete_denoted_error(struct Denoted_Error *error);
- void delete_denoted_function(struct Denoted_Function *function);
- void delete_denoted_object(struct Denoted_Object *object);
- void delete_denoted_typedef(struct Denoted_Typedef *typedefed);
- void delete_denoted_enum(struct Denoted_Enum *enumeration);
- void delete_denoted_enum_constant(struct Denoted_Enum_Const *enum_const);
- void delete_denoted_struct_union(struct Denoted_Struct_Union *su);
- void delete_object(struct Object *object);
- void delete_denoted_prototype(struct Denotation_Prototype *prototype);
- void delete_denoted_base(struct Denoted_Base *base);
-
-
- enum Storage_Class_Specifier get_denoted_function_storage_class(struct Denoted_Function *function);
- #endif
F diff --git a/semantics/denoted.hh b/semantics/denoted.hh deleted file mode 100644 --- a/semantics/denoted.hh +++ /dev/null
- #ifndef GCC_DENOTED_HH
- #define GCC_DENOTED_HH GCC_DENOTED_HH
-
- #define AS_DENOTED_OBJECT_PTR(x) ((struct Denoted_Object*)x)
- #define AS_DENOTED_FUNCTION(x) ((struct Denoted_Function*)x)
- #define AS_DENOTED_TYPEDEF(x) ((struct Denoted_Typedef*)x)
- #define AS_DENOTED_ENUM(x) ((struct Denoted_Enum*)x)
- #define AS_DENOTED_ENUM_CONST(x) ((struct Denoted_Enum_Const*)x)
- #define AS_DENOTED_STRUCT_UNION(x) ((struct Denoted_Struct_Union*)x)
-
- enum Denotation_Type
- {
- DT_Macro,
- DT_Macro_Parameter,
- DT_Label,
- DT_Object,
- DT_Typedef,
- DT_Function,
- DT_Enum,
- DT_Enum_Constant,
- DT_Struct_Union_Member,
- DT_Struct_Union_Tag,
- DT_Error,
- DT_Prototype
- };
-
- enum Function_Specifier
- {
- FS_Inline,
- FS_None
- };
- enum Storage_Class_Specifier
- {
- SCS_EXTERN,
- SCS_STATIC,
- SCS_TYPEDEF,
- SCS_REGISTER,
- SCS_NONE
-
- };
-
- struct Denoted;
- struct Denoted_Error;
- struct Denoted_Base;
- struct Denoted_Function;
- struct Denoted_Object;
- struct Denoted_Typedef;
- struct Denoted_Enum;
- struct Denoted_Enum_Const;
- struct Denoted_Struct_Union;
- struct Denotation_Prototype;
- struct Object;
-
-
- #endif
F diff --git a/semantics/gcc_error.c b/semantics/gcc_error.c deleted file mode 100644 --- a/semantics/gcc_error.c +++ /dev/null
- #ifndef GCC_ERROR_C
- #define GCC_ERROR_C GCC_ERROR_C
- #include <gcc_error.h>
-
-
-
- struct Translation_Error* get_translation_error(const char *error_message,size_t line,size_t column,const char *filename)
- {
- struct Translation_Error *ret;
- ret=malloc(sizeof(struct Translation_Error));
- ret->error_message=error_message;
- ret->column=column;
- ret->line=line;
- ret->filename=filename;
- }
-
- struct Translation_Error* get_translation_error_by_token(const char *error_message,struct token *error_token)
- {
- if(error_token==NULL)
- {
- return get_translation_error(error_message,0,0,"");
- }else
- {
- return get_translation_error(error_message,error_token->line+1,error_token->column+1,error_token->filename);
- }
- }
-
- void push_translation_error(const char *error_message,struct Translation_Data *translation_data)
- {
- if(translation_data->tokens->size==0)
- {
- get_translation_error(error_message,0,0,"");
- }else
- {
- Queue_Push(translation_data->errors,get_translation_error_by_token(error_message,(struct token*)translation_data->tokens->first->data));
- }
- }
-
- void push_lexing_error(const char *error_message,struct Source_File *src,struct Translation_Data *translation_data)
- {
- Queue_Push(translation_data->errors,get_translation_error(error_message,src->which_row+1,src->which_column+1,src->src_name->filename));
- }
- void print_translation_error(FILE *out,struct Translation_Error *error)
- {
- fprintf(out,"Error ");
- if(error->filename!=NULL)
- {
- fprintf(out,"(line %i column %i) ",error->line,error->column);
- fprintf(out,"in %s ",error->filename);
- }
- fprintf(out,": %s\n",error->error_message);
- }
-
-
- void delete_translation_error(struct Translation_Error *translation_error)
- {
- free(translation_error);
- }
- #endif
F diff --git a/semantics/gcc_error.h b/semantics/gcc_error.h deleted file mode 100644 --- a/semantics/gcc_error.h +++ /dev/null
- #ifndef GCC_ERROR_H
- #define GCC_ERROR_H GCC_ERROR_H
- #include <gcc_error.hh>
- #include <lexer.h>
- #include <stdio.h>
-
-
-
- struct Translation_Error
- {
- const char *error_message;
- size_t line,column;
- const char *filename;
-
- };
-
-
-
- struct Translation_Error* get_translation_error(const char *error_message,size_t line,size_t column,const char *filename);
- struct Translation_Error* get_translation_error_by_token(const char *error_message,struct token *error_token);
- void push_translation_error(const char *error_message,struct Translation_Data *translation_data);
- void push_lexing_error(const char *error_message,struct Source_File *src,struct Translation_Data *translation_data);
- void print_translation_error(FILE *out,struct Translation_Error *error);
-
- void delete_translation_error(struct Translation_Error *translation_error);
- #endif
F diff --git a/semantics/gcc_error.hh b/semantics/gcc_error.hh deleted file mode 100644 --- a/semantics/gcc_error.hh +++ /dev/null
- #ifndef GCC_ERROR_H
- #define GCC_ERROR_H GCC_ERROR_H
-
-
- struct Translation_Error;
-
-
- #endif
F diff --git a/semantics/linkage.c b/semantics/linkage.c deleted file mode 100644 --- a/semantics/linkage.c +++ /dev/null
- #ifndef GCC_LINKAGE_C
- #define GCC_LINKAGE_C GCC_LINKAGE_C
- #include<linkage.h>
-
-
-
-
-
- struct Linkage* get_linkage()
- {
- struct Linkage *ret;
- ret=malloc(sizeof(struct Linkage));
- Map_Init(&ret->ids);
-
- return ret;
- }
-
- /*denoted things are deleted here and left alone when deleting scopes*/
- void delete_linkage(struct Linkage *linkage)
- {
- Map_Map(&linkage->ids,delete_denoted_wrapper);
- Map_Destroy(&linkage->ids);
- free(linkage);
- }
-
-
- /*TODO optimise when you know what should happen here*/
-
- void account_for_upper_linkage_on_object(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object)
- {
- struct Denoted_Object *hold_object;
- hold_object=check_ordinary(scope,denoted_object->id);
- if(hold_object!=NULL && hold_object->denotation==DT_Object && types_are_identical(denoted_object->object->type,hold_object->object->type))
- {
- if(hold_object->linkage!=LINKAGE_NONE)
- {
- denoted_object->linkage=hold_object->linkage;
- denoted_object->object->storage_class=SCS_STATIC;
- }else
- {
- denoted_object->linkage=LINKAGE_EXTERNAL;
- denoted_object->object->storage_class=SCS_STATIC;
- }
- }else
- {
- denoted_object->linkage=LINKAGE_EXTERNAL;
- denoted_object->object->storage_class=SCS_STATIC;
- }
- }
- void account_for_upper_linkage_on_function(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function)
- {
- struct Denoted_Function *hold_function;
- hold_function=check_ordinary(scope,denoted_function->id);
- if(hold_function!=NULL)
- {
- if(hold_function->denotation==DT_Function && types_are_identical(denoted_function->type,hold_function->type))
- {
- denoted_function->linkage=( (hold_function->linkage==LINKAGE_NONE) ? LINKAGE_EXTERNAL : hold_function->linkage);
- }else
- {
- push_translation_error("linking mismatching things",translation_data);
- return;
- }
- }else
- {
- denoted_function->linkage=LINKAGE_EXTERNAL;
- }
- }
- void resolve_object_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object)
- {
- if(scope->type==FILE_SCOPE)
- {
- if(denoted_object->object->storage_class==SCS_NONE || denoted_object->object->storage_class==SCS_EXTERN)
- {
- denoted_object->linkage=LINKAGE_EXTERNAL;
- denoted_object->object->storage_class=SCS_STATIC;
- account_for_upper_linkage_on_object(scope,translation_data,denoted_object);
-
- }else if(denoted_object->object->storage_class==SCS_STATIC)
- {
- denoted_object->linkage=LINKAGE_INTERNAL;
- denoted_object->object->storage_class=SCS_STATIC;
- }else
- {
- assert(0);
- }
- }else if(scope->type==FUNCTION_PROTOTYPE_SCOPE)
- {
- denoted_object->linkage=LINKAGE_NONE;
- denoted_object->object->storage_class=SCS_NONE;
- if(denoted_object->object->storage_class!=SCS_NONE && denoted_object->object->storage_class!=SCS_REGISTER)
- {
- push_translation_error("storage class specifier other than register in function prototype scope",translation_data);
- return ;
- }
- }else if(scope->type==BLOCK_SCOPE)
- {
- denoted_object->linkage=LINKAGE_NONE;
- /*here comes the spooky part*/
- if(denoted_object->object->storage_class==SCS_EXTERN)
- account_for_upper_linkage_on_object(scope,translation_data,denoted_object);
- }else
- {
- assert(0);
- }
-
- /*check if id is linked oppositely*/
- if(denoted_object->linkage==LINKAGE_EXTERNAL &&
- Map_Check(&translation_data->internal_linkage->ids,denoted_object->id->data,denoted_object->id->data_size)!=NULL)
- {
- push_translation_error("linking id both internally and externally",translation_data);
- }else if(denoted_object->linkage==LINKAGE_INTERNAL &&
- Map_Check(&translation_data->external_linkage->ids,denoted_object->id->data,denoted_object->id->data_size)!=NULL)
- {
- push_translation_error("linking id both internally and externally",translation_data);
- }
- }
- void resolve_function_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function)
- {
- if(scope->type==BLOCK_SCOPE)
- {
- if(denoted_function->linkage==LINKAGE_INTERNAL)
- {
- push_translation_error("static storage class specifier on function declaration in block scope",translation_data);
- return;
- }else
- {
- denoted_function->linkage=LINKAGE_EXTERNAL;
- account_for_upper_linkage_on_function(scope,translation_data,denoted_function);
-
- }
- }else if(scope->type==FILE_SCOPE)
- {
- if(denoted_function->linkage==LINKAGE_NONE)
- denoted_function->linkage=LINKAGE_EXTERNAL;
- /*falltrough*/
-
- if(denoted_function->linkage==LINKAGE_EXTERNAL)
- account_for_upper_linkage_on_function(scope,translation_data,denoted_function);
-
- }else
- {
- assert(0);
- }
-
- /*check if id is linked oppositely*/
- if(denoted_function->linkage==LINKAGE_EXTERNAL &&
- Map_Check(&translation_data->internal_linkage->ids,denoted_function->id->data,denoted_function->id->data_size)!=NULL)
- {
- push_translation_error("linking id both internally and externally",translation_data);
- }else if(denoted_function->linkage==LINKAGE_INTERNAL &&
- Map_Check(&translation_data->external_linkage->ids,denoted_function->id->data,denoted_function->id->data_size)!=NULL)
- {
- push_translation_error("linking id both internally and externally",translation_data);
- }
-
- }
-
- #endif
F diff --git a/semantics/linkage.h b/semantics/linkage.h deleted file mode 100644 --- a/semantics/linkage.h +++ /dev/null
- #ifndef GCC_LINKAGE_H
- #define GCC_LINKAGE_H GCC_LINKAGE_H
- #include <linkage.hh>
- #include <map.h>
- #include <denoted.h>
-
- enum Linkage_Type;
-
- /*this can be external or internal depending on which structure it is located*/
- struct Linkage
- {
- struct Map ids;
- };
-
-
- struct Linkage* get_linkage();
- void delete_linkage();
-
- /*these don't push the object into the linkage map*/
- void resolve_object_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object);
- void resolve_function_linkage(struct Scope *scope,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function);
- #endif
F diff --git a/semantics/linkage.hh b/semantics/linkage.hh deleted file mode 100644 --- a/semantics/linkage.hh +++ /dev/null
- #ifndef GCC_LINKAGE_HH
- #define GCC_LINKAGE_HH GCC_LINKAGE_HH
-
-
- enum Linkage_Type
- {
- LINKAGE_EXTERNAL,
- LINKAGE_INTERNAL,
- LINKAGE_NONE
- };
-
- struct Linkage;
-
-
-
- #endif
F diff --git a/semantics/location.c b/semantics/location.c deleted file mode 100644 --- a/semantics/location.c +++ /dev/null
- #ifndef GCC_LOCATION_C
- #define GCC_LOCATION_C GCC_LOCATION_C
- #include "location.h"
-
-
- struct Location_Stack* get_location_on_stack(size_t offset)
- {
- struct Location_Stack *ret;
- ret=malloc(sizeof(struct Location_Stack));
- ret->type=LT_ON_STACK;
- ret->offset=offset;
-
- return ret;
- }
- struct Location_Raw* get_location_raw(size_t address)
- {
- struct Location_Raw *ret;
- ret=malloc(sizeof(struct Location_Raw));
- ret->type=LT_RAW;
- ret->address=address;
-
- return ret;
- }
-
- struct Location_Relative* get_relative_location(struct Location *base,size_t offset)
- {
- struct Location_Relative *ret;
- ret=malloc(sizeof(struct Location_Relative));
- ret->type=LT_RELATIVE;
- ret->base=base;
- ret->offset=offset;
-
- return ret;
- }
- /*base is modified*/
- struct Location *get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id)
- {
- if(base->type==LT_ON_STACK)
- {
- struct Location_Stack *hold;
- hold=malloc(sizeof(struct Location_Stack));
- *hold=*(struct Location_Stack*)base;
- ((struct Location_Stack*)base)->offset+=get_type_size(type);
-
- return (struct Location*)hold;
- }else if(base->type==LT_RELATIVE)
- {
- struct Location_Relative *hold;
-
- hold=malloc(sizeof(struct Location_Relative));
- *hold=*(struct Location_Relative*)base;
-
- return (struct Location*)hold;
- }else if(base->type==LT_GLOBAL)
- {
- struct Location_Labeled *hold;
- hold=malloc(sizeof(struct Location_Labeled));
- hold->id=id;
-
- return (struct Location*)hold;
- }
- }
- struct Location *get_global_location()
- {
- struct Location *ret;
- ret=malloc(sizeof(struct Location));
- ret->type=LT_GLOBAL;
-
- return ret;
- }
-
-
-
- void delete_location(struct Location *location)
- {
- free(location);
- }
- #endif
F diff --git a/semantics/location.h b/semantics/location.h deleted file mode 100644 --- a/semantics/location.h +++ /dev/null
- #ifndef GCC_LOCATION_H
- #define GCC_LOCATION_H GCC_LOCATION_H
- #include <location.hh>
- #include <lexer.h>
- #include <type.h>
-
-
- enum Location_Type;
- struct Location
- {
- enum Location_Type type;
- };
- struct Location_Stack
- {
- enum Location_Type type;
- size_t offset;
- };
- struct Location_Raw
- {
- enum Location_Type type;
- size_t address;
- };
-
- struct Location_Relative
- {
- enum Location_Type type;
- struct Location *base;
- size_t offset;
- };
-
- struct Location_Labeled
- {
- enum Location_Type type;
- struct token *id;
- };
-
- struct Location_Stack* get_location_on_stack(size_t offset);
- struct Location* get_global_location();
- struct Location_Raw* get_location_raw(size_t address);
- struct Location_Relative* get_relative_location(struct Location *base,size_t offset);
- struct Location* get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id);
-
-
- void delete_location(struct Location *location);
-
- #endif
F diff --git a/semantics/location.hh b/semantics/location.hh deleted file mode 100644 --- a/semantics/location.hh +++ /dev/null
- #ifndef GCC_LOCATION_HH
- #define GCC_LOCATION_HH GCC_LOCATION_HH
- enum Location_Type
- {
- LT_ON_STACK,
- LT_RAW,
- LT_RELATIVE,
- LT_LABELED,
- LT_GLOBAL
- };
- struct Location;
- struct Location_Stack;
- struct Location_Raw;
- struct Location_Relative;
- struct Location_Labeled;
-
- #endif
F diff --git a/semantics/program.c b/semantics/program.c deleted file mode 100644 --- a/semantics/program.c +++ /dev/null
- #ifndef GCC_PROGRAM_C
- #define GCC_PROGRAM_C GCC_PROGRAM_C
- #/*Don't mind me*/include/*When I grow up I want to be a new line*/ <program.h>
-
-
- struct Program* get_program()
- {
- struct Program *ret;
- ret=malloc(sizeof(struct Program));
- ret->translation_units=malloc(sizeof(struct Queue));
- ret->source_files=malloc(sizeof(struct Queue));
- ret->errors=malloc(sizeof(struct Queue));
- ret->types=malloc(sizeof(struct Map));
- ret->external_linkage=malloc(sizeof(struct Linkage));
-
- Queue_Init(ret->translation_units);
- Queue_Init(ret->source_files);
- Queue_Init(ret->errors);
-
-
-
- Map_Init(ret->types);
-
- return ret;
- }
- struct Source_File* extract_source_file(FILE *in,struct Source_Name *name)
- {
- long file_size;
- struct Source_File *src;
-
-
- if(fseek(in,0,SEEK_END)==-1)
- return NULL;
- if((file_size=ftell(in))==-1)
- return NULL;
- if(fseek(in,0,SEEK_SET)==-1)
- return NULL;
-
- src=malloc(sizeof(struct Source_File));
-
- src->src_name=name;
-
- src->src=malloc(file_size+1);
- src->src_size=file_size;
-
- src->where_in_src=0;
-
- src->which_column=0;
- src->which_row=0;
- src->is_in_the_begining_of_line=1;
-
- src->src[file_size]='\0';
-
- fread(src->src,1,file_size,in);
- fclose(in);
- return src;
- }
- struct Translation_Data* get_translation_data(struct Map *types,struct Linkage *internal_linkage,struct Linkage *external_linkage)
- {
- struct Translation_Data *ret;
- ret=malloc(sizeof(struct Translation_Data));
- ret->tokens=malloc(sizeof(struct Queue));
- ret->errors=malloc(sizeof(struct Queue));
- ret->source_files=malloc(sizeof(struct Queue));
- Queue_Init(ret->tokens);
- Queue_Init(ret->errors);
- Queue_Init(ret->source_files);
-
- ret->macros=malloc(sizeof(struct Map));
- Map_Init(ret->macros);
-
- ret->types=types;
-
- ret->number_of_errors_when_last_checked=0;
-
- ret->external_linkage=external_linkage;
- ret->internal_linkage=internal_linkage;
-
- return ret;
- }
- struct Source_Name* get_source_name(char *filename,char *base)
- {
- struct Source_Name *ret;
- ret=malloc(sizeof(struct Source_Name));
- ret->base=gstrcpy(base);
- ret->filename=gstrcpy(filename);
- normalise_source_name(ret);
- return ret;
- }
- /*where_to_search ends in a NULL pointer*/
- struct Source_File* get_source_file(char *filename,char **where_to_search)
- {
- FILE *in;
- char *temp_name;
- char is_directory=0;
- struct Source_Name *name;
- struct Source_File *file;
-
- assert(where_to_search!=NULL);
- assert(*where_to_search!=NULL);
- do
- {
- temp_name=gstr_append(*where_to_search,filename);
- in=fopen(temp_name,"r");
- free(temp_name);
- if(in==NULL)
- continue;
-
- name=get_source_name(filename,*where_to_search);
- file=extract_source_file(in,name);
- if(file!=NULL)
- {
- return file;
- }else
- {
- delete_source_name(name);
- }
- }while(*(++where_to_search));
- return NULL;
- }
-
- /*this might cause compatability issues TODO*/
- void normalise_source_name(struct Source_Name *name)
- {
- size_t offset;
- size_t i;
- size_t last_slash;
- char *hold_base;
-
- for(last_slash=offset=0;name->filename[offset];++offset)
- {
- if(name->filename[offset]=='/')
- {
- last_slash=offset;
- }
- }
-
- if(last_slash==0)
- return;
-
- if(name->base==NULL)
- {
- offset=0;
- name->base=malloc(last_slash+1);
- name->base[last_slash]='\0';
- name->base[last_slash-1]='/';
-
- }else
- {
- offset=gstrlen((char*)name->base);
- hold_base=malloc(offset+last_slash+2);
- strmv(hold_base,(char*)name->base);
-
- hold_base[last_slash+offset]='/';
- hold_base[last_slash+offset+1]='\0';
- free((void*)name->base);
-
- name->base=hold_base;
- }
-
- for(i=0;i<last_slash;++i)
- name->base[offset+i]=name->filename[i];
-
-
- ++i;
- /*prune the filename*/
- offset=gstrlen(name->filename+i);
- hold_base=malloc(offset+1);
- strmv(hold_base,name->filename+i);
- free(name->filename);
- name->filename=hold_base;
-
-
- }
-
- struct Program* parse_program(char **base_source_names)
- {
- struct Source_File *base_file;
- struct Program *program;
- struct Translation_Data *hold_translation_data;
- char *this_directory[]={"./",NULL};
-
- assert(base_source_names!=NULL);
-
- if(*base_source_names==NULL)
- {
- return NULL;
- }
-
- program=get_program();
- hold_translation_data=get_translation_data(program->types,get_linkage(),program->external_linkage);
- do
- {
- base_file=get_source_file(*base_source_names,this_directory);
- if(base_file==NULL)
- {
- /*TODO error*/
- free(base_file);
- continue;
- }else
- {
- Queue_Push(hold_translation_data->source_files,base_file);
- lex(base_file,hold_translation_data);
- if(!has_new_errors(hold_translation_data))
- {
- Queue_Push(program->translation_units,parse_translation_unit(hold_translation_data));
- }else
- {
- flush_tokens(hold_translation_data->tokens);
- }
- assimilate_translation_data(program,hold_translation_data);
- }
- }while(*(++base_source_names));
-
- delete_translation_data(hold_translation_data);
- return program;
- }
-
- void lex_program(struct Translation_Data *hold,struct Source_File *file)
- {
- Queue_Push(hold->source_files,file);
- lex(file,hold);
- }
-
-
- char has_new_errors(struct Translation_Data *translation_data)
- {
- if(translation_data->errors->size != translation_data->number_of_errors_when_last_checked)
- {
- translation_data->number_of_errors_when_last_checked=translation_data->errors->size;
- return 1;
- }else
- {
- return 0;
- }
- }
-
- void delete_program(struct Program *program)
- {
- while(program->translation_units->size>0)
- delete_ast(Queue_Pop(program->translation_units));
- free(program->translation_units);
-
-
-
- while(program->source_files->size>0)
- delete_source_file(Queue_Pop(program->source_files));
- free(program->source_files);
-
-
- while(program->errors->size>0)
- delete_translation_error(Queue_Pop(program->errors));
- free(program->errors);
-
-
- delete_linkage(program->external_linkage);
-
- /*BEWARE*/
- Map_Map(program->types,delete_type);
- Map_Destroy(program->types);
- free(program->types);
-
- free(program);
-
- }
- void delete_translation_data(struct Translation_Data *translation_data)
- {
- assert(translation_data->tokens->size==0 &&
- translation_data->errors->size==0 &&
- translation_data->source_files->size==0);
- free(translation_data->tokens);
- free(translation_data->errors);
- free(translation_data->source_files);
-
- Map_Map(translation_data->macros,delete_macro);
- Map_Destroy(translation_data->macros);
- free(translation_data->macros);
-
- free(translation_data);
-
- }
- void assimilate_translation_data(struct Program *program,struct Translation_Data *translation_data)
- {
- Queue_Append(program->errors,translation_data->errors);
- Queue_Append(program->source_files,translation_data->source_files);
-
- flush_tokens(translation_data->tokens);
-
- Queue_Init(translation_data->errors);
- Queue_Init(translation_data->source_files);
-
- translation_data->number_of_errors_when_last_checked=0;
-
-
- }
- char has_no_tokens(struct Translation_Data *translation_data)
- {
- return (translation_data->tokens->size)==0;
- }
- #endif
F diff --git a/semantics/program.h b/semantics/program.h deleted file mode 100644 --- a/semantics/program.h +++ /dev/null
- #ifndef GCC_PROGRAM_H
- #define GCC_PROGRAM_H GCC_PROGRAM_H
-
-
- #include <program.hh>
- #include <queue.h>
- #include <scope.h>
- #include <lexer.h>
- #include <gcc_string.h>
- #include <gcc_arguments.h>
- #include <parse_translation_unit.h>
-
-
- struct Program
- {
- struct Queue *translation_units;
- struct Queue *source_files;
- struct Queue *errors;
-
- /*
- we the type node structures from
- all the translation units are stored here
- */
- struct Map *types;
-
- struct Linkage *external_linkage;
- };
- struct Translation_Data
- {
- struct Queue *tokens;
-
-
- struct Queue *errors;
- size_t number_of_errors_when_last_checked;
-
-
- struct Queue *source_files;
-
- struct Map *macros;
-
- /*passed from program struct*/
- struct Map *types;
- struct Linkage *external_linkage;
- struct Linkage *internal_linkage;
- /*end of passed from program struct*/
- };
-
- struct Program* get_program();
- struct Source_Name* get_source_name(char *filename,char *base);
-
- struct Source_File* extract_source_file(FILE *in,struct Source_Name *name);
- struct Source_File* get_source_file(char *filename,char **where_to_search);
- void normalise_source_name(struct Source_Name *name);
-
- struct Translation_Data* get_translation_data(struct Map *types,struct Linkage *internal_linkage,struct Linkage *external_linkage);
-
-
- struct Program* parse_program(char **base_source_names);
- void lex_program(struct Translation_Data *hold,struct Source_File *file);
- void entype_program(struct Program *program);
-
-
- char has_new_errors(struct Translation_Data *translation_data);
- char has_no_tokens(struct Translation_Data *translation_data);
-
- void delete_program(struct Program *program);
- void delete_translation_data(struct Translation_Data *translation_data);
- void destroy_translation_data(struct Translation_Data *translation_data);
- void assimilate_translation_data(struct Program *program,struct Translation_Data *translation_data);
-
- #endif
F diff --git a/semantics/program.hh b/semantics/program.hh deleted file mode 100644 --- a/semantics/program.hh +++ /dev/null
- #ifndef GCC_PROGRAM_HH
- #define GCC_PROGRAM_HH GCC_PROGRAM_HH
-
- struct Program;
- struct Translation_Data;
-
-
- #endif
F diff --git a/semantics/scope.c b/semantics/scope.c deleted file mode 100644 --- a/semantics/scope.c +++ /dev/null
- #ifndef GCC_SCOPE_C
- #define GCC_SCOPE_C GCC_SCOPE_C
- #include "scope.h"
-
-
- struct Scope* get_normal_scope(struct Scope *parent,enum Scope_Type type)
- {
- struct Normal_Scope *ret;
- assert(type==BLOCK_SCOPE || type==FILE_SCOPE || type==FUNCTION_PROTOTYPE_SCOPE);
- ret=malloc(sizeof(struct Normal_Scope));
- ret->type=type;
-
- assert((type!=FILE_SCOPE) || parent==NULL);
- ret->parent=parent;
-
- Map_Init(&ret->tags);
- Map_Init(&ret->ordinary);
-
- return (struct Scope*)ret;
-
- }
- struct Scope* get_function_scope(struct Scope *parent)
- {
- struct Function_Scope *ret;
- assert(parent!=NULL && parent->type==FILE_SCOPE);
-
- ret=malloc(sizeof(struct Function_Scope));
- ret->type=FUNCTION_SCOPE;
- ret->parent=parent;
-
- Map_Init(&ret->labels);
-
-
- return (struct Scope*)ret;
- }
-
- void delete_normal_scope(struct Normal_Scope *scope)
- {
- Map_Map(&scope->tags,delete_denoted_wrapper);
- Map_Destroy(&scope->tags);
- Map_Map(&scope->ordinary,delete_denoted_with_no_linkage_wrapper);
- Map_Destroy(&scope->ordinary);
- free(scope);
- }
-
- void delete_function_scope(struct Function_Scope *scope)
- {
- Map_Map(&scope->labels,delete_denoted_wrapper);
- Map_Destroy(&scope->labels);
- free(scope);
- }
-
- void delete_scope(struct Scope *scope)
- {
- switch(scope->type)
- {
- case BLOCK_SCOPE:
- case FILE_SCOPE:
- case FUNCTION_PROTOTYPE_SCOPE:
- delete_normal_scope((struct Normal_Scope*)scope);
- break;
- case FUNCTION_SCOPE:
- delete_function_scope((struct Function_Scope*)scope);
- default:
- assert(0);
- }
- }
-
-
- void* check_label(struct Scope *current,struct token *id)
- {
- void *hold;
- hold=NULL;
- while(current!=NULL && current->type!=FUNCTION_SCOPE)
- {
- current=current->parent;
- }
-
- if(current!=NULL)
- {
- hold=Map_Check(&((struct Function_Scope*)current)->labels,id->data,id->data_size);
- }
- return hold;
- }
-
- struct Denoted* check_tag(struct Scope *current,struct token *id)
- {
- void *hold;
- hold=NULL;
- while(current!=NULL && hold==NULL && current->type!=FUNCTION_SCOPE)
- {
- hold=Map_Check(&((struct Normal_Scope*)current)->tags,id->data,id->data_size);
- current=current->parent;
- }
- return hold;
- }
- void* check_ordinary(struct Scope *current,struct token *id)
- {
- void *hold;
- hold=NULL;
- while(current!=NULL && hold==NULL)
- {
- hold=Map_Check(&((struct Normal_Scope*)current)->ordinary,id->data,id->data_size);
- current=current->parent;
- }
- return hold;
- }
-
- void Scope_Push(struct Scope *scope,struct Denoted *declarator,struct Translation_Data *translation_data)
- {
-
- switch(declarator->denotation)
- {
- case DT_Label:
- /*perhaps lables should be denoted*/
- assert(0);
- case DT_Function:
- push_function(scope,translation_data,AS_DENOTED_FUNCTION(declarator));
- break;
- case DT_Object:
- push_object(scope,translation_data,AS_DENOTED_OBJECT_PTR(declarator));
- break;
- case DT_Typedef:
- push_typedef(scope,translation_data,AS_DENOTED_TYPEDEF(declarator));
- break;
- case DT_Enum_Constant:
- push_denoted_enum_constant(scope,translation_data,AS_DENOTED_ENUM_CONST(declarator));
- break;
- case DT_Struct_Union_Member:
- assert(0);
- break;
- case DT_Enum:
- push_denoted_enum_tag(scope,translation_data,AS_DENOTED_ENUM(declarator));
- break;
- case DT_Struct_Union_Tag:
- push_denoted_struct_union_tag(scope,translation_data,AS_DENOTED_STRUCT_UNION(declarator));
- break;
- }
-
-
- }
- char check_if_typedefed(struct Scope* scope,struct token *id)
- {
- struct Denoted *hold;
- hold=check_ordinary(scope,id);
- if(hold==NULL || hold->denotation!=DT_Typedef)
- return 0;
- else
- return 1;
-
- }
- #define CHECK_AND_PUSH(thing,scope) Map_Check_And_Push(scope,thing->id->data,thing->id->data_size,thing)
-
- void push_object(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object)
- {
- #define PO_ERROR(msg) delete_denoted_object(denoted_object);push_translation_error(msg,translation_data);return;
-
- struct Denoted_Object *hold_object;
- struct Linkage *linkage;
- resolve_object_linkage(current,translation_data,denoted_object);
- if(has_new_errors(translation_data))
- {PO_ERROR("in declaration");}
-
- hold_object=CHECK_AND_PUSH(denoted_object,&AS_NORMAL_SCOPE(current)->ordinary);
- if(hold_object!=NULL && hold_object->linkage==LINKAGE_NONE)
- {PO_ERROR("redeclaration of identifier");}
-
- if(denoted_object->linkage==LINKAGE_NONE)
- {
- if(hold_object!=NULL)
- {PO_ERROR("redeclaration of identifier");}
- }else if(denoted_object->linkage==LINKAGE_EXTERNAL || denoted_object->linkage==LINKAGE_INTERNAL)
- {
- linkage=(denoted_object->linkage==LINKAGE_EXTERNAL?translation_data->external_linkage:translation_data->internal_linkage);
- hold_object=CHECK_AND_PUSH(denoted_object,&linkage->ids);
- if(hold_object!=NULL)
- {
- if(hold_object->denotation!=DT_Object)
- {PO_ERROR("linking an object to a function");}
- if(!types_are_identical(hold_object->object->type,denoted_object->object->type))
- {PO_ERROR("linking an objects with mismatching types");}
- if(denoted_object->initializer!=NULL)
- {
- if(hold_object->initializer==NULL)
- hold_object->initializer=denoted_object->initializer;
- else
- {PO_ERROR("two initialisers for static storage duration object");}
- //delete_denoted_object(denoted_object);
- }
- }
- }else
- {
- assert(0);
- }
-
- #undef PO_ERROR
- }
- void push_function(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function)
- {
- #define PF_ERROR(msg) delete_denoted_function(denoted_function);push_translation_error(msg,translation_data);return;
-
- struct Denoted_Function *hold_function;
- struct Linkage *linkage;
- resolve_function_linkage(current,translation_data,denoted_function);
- if(has_new_errors(translation_data))
- {PF_ERROR("in declaration");}
-
- if(denoted_function->linkage==LINKAGE_NONE)
- {
- hold_function=CHECK_AND_PUSH(denoted_function,&AS_NORMAL_SCOPE(current)->ordinary);
- if(hold_function!=NULL)
- {PF_ERROR("id with function type without linkage");}
- }else if(denoted_function->linkage==LINKAGE_EXTERNAL || denoted_function->linkage==LINKAGE_INTERNAL)
- {
- linkage=(denoted_function->linkage==LINKAGE_EXTERNAL?translation_data->external_linkage:translation_data->internal_linkage);
- hold_function=CHECK_AND_PUSH(denoted_function,&linkage->ids);
- if(hold_function!=NULL)
- {
- if(hold_function->denotation!=DT_Function)
- {PF_ERROR("linking an function to a object");}
- if(!types_are_identical(hold_function->type,denoted_function->type))
- {PF_ERROR("linking functions with mismatching types");}
- if(hold_function->body!=NULL && denoted_function->body!=NULL)
- {PF_ERROR("redefinition of a function");}
- if(denoted_function->body!=NULL)
- {
- hold_function->body=denoted_function->body;
- denoted_function->body=NULL;
- // delete_denoted_function(denoted_function);
- }
- }
- }else
- {
- assert(0);
- }
-
- #undef PF_ERROR
- }
- void push_typedef(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Typedef *denoted_typedef)
- {
- struct Denoted *hold_denotated;
- hold_denotated=CHECK_AND_PUSH(denoted_typedef,&AS_NORMAL_SCOPE(current)->ordinary);
- if(hold_denotated)
- {
- delete_denoted_typedef(denoted_typedef);
- push_translation_error("redefinition of identifier",translation_data);
- }
- }
- void push_denoted_enum_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum *denoted_enum)
- {
- struct Denoted *hold_denotated;
- hold_denotated=CHECK_AND_PUSH(denoted_enum,&AS_NORMAL_SCOPE(current)->tags);
- if(hold_denotated)
- {
- delete_denoted_enum(denoted_enum);
- push_translation_error("redefinition of tag",translation_data);
- }
- }
- void push_denoted_enum_constant(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum_Const *denoted_enum_constant)
- {
- struct Denoted *hold_denotated;
- hold_denotated=CHECK_AND_PUSH(denoted_enum_constant,&AS_NORMAL_SCOPE(current)->ordinary);
- if(hold_denotated)
- {
- delete_denoted_enum_constant(denoted_enum_constant);
- push_translation_error("redefinition of identifier",translation_data);
- }
- }
- void push_denoted_struct_union_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Struct_Union *denoted_struct_union)
- {
- struct Denoted *hold_denotated;
- hold_denotated=CHECK_AND_PUSH(denoted_struct_union,&AS_NORMAL_SCOPE(current)->tags);
- if(hold_denotated)
- {
- delete_denoted_struct_union(denoted_struct_union);
- push_translation_error("redefinition of tag",translation_data);
- }
- }
- #undef CHECK_AND_PUSH
- #endif
F diff --git a/semantics/scope.h b/semantics/scope.h deleted file mode 100644 --- a/semantics/scope.h +++ /dev/null
- #ifndef GCC_SCOPE_H
- #define GCC_SCOPE_H GCC_SCOPE_H
- #include <scope.hh>
- #include <map.h>
- #include <denoted.h>
- #include <location.h>
-
-
- enum Scope_Type;
- struct Scope
- {
- enum Scope_Type type;
- struct Scope *parent;
- };
- struct Normal_Scope
- {
- enum Scope_Type type;
- struct Scope *parent;
-
- Map tags;
- Map ordinary;
- };
- struct Function_Scope
- {
- enum Scope_Type type;
- struct Scope *parent;
- Map labels;
- };
-
-
- struct Scope* get_normal_scope(struct Scope *parent,enum Scope_Type type);
- struct Scope* get_function_scope(struct Scope *parent);
-
- void* check_label(struct Scope *current,struct token *id);
- struct Denoted* check_tag(struct Scope *current,struct token *id);
- void* check_ordinary(struct Scope *current,struct token *id);
-
-
- void push_label(struct Scope *current,struct token *id);/*TODO*/
- void push_object(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Object *denoted_object);
- void push_function(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Function *denoted_function);
- void push_typedef(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Typedef *denoted_typedef);
- void push_denoted_enum_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum *denoted_enum);
- void push_denoted_enum_constant(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Enum_Const *denoted_enum_constant);
- void push_denoted_struct_union_tag(struct Scope *current,struct Translation_Data *translation_data,struct Denoted_Struct_Union *denoted_struct_union);
- void Scope_Push(struct Scope *scope,struct Denoted *declarator,struct Translation_Data *translation_data);
-
-
- void delete_scope(struct Scope *scope);
- void delete_normal_scope(struct Normal_Scope *scope);
- void delete_function_scope(struct Function_Scope *scope);
-
-
-
-
- char check_if_typedefed(struct Scope* scope,struct token *id);
- #endif
F diff --git a/semantics/scope.hh b/semantics/scope.hh deleted file mode 100644 --- a/semantics/scope.hh +++ /dev/null
- #ifndef GCC_SCOPE_HH
- #define GCC_SCOPE_HH GCC_SCOPE_HH
-
- #define AS_NORMAL_SCOPE(x) ((struct Normal_Scope*)x)
- #define AS_FUNCTION_SCOPE(x) ((struct Function_Scope*)x)
- enum Scope_Type{
- FILE_SCOPE,
- BLOCK_SCOPE,
- FUNCTION_PROTOTYPE_SCOPE,
- FUNCTION_SCOPE
- };
- struct Scope;
- struct Normal_Scope;
- struct Function_Scope;
- #endif
F diff --git a/semantics/semantics.c b/semantics/semantics.c deleted file mode 100644 --- a/semantics/semantics.c +++ /dev/null
- #ifndef GCC_SEMANTICS_C
- #define GCC_SEMANTICS_C GCC_SEMANTICS_C
- #include"semantics.h"
-
-
-
- long long int evaluate_const_expression_integer(struct AST *expression)
- {
- #define RET_BIN_EXPR(x,operator) return \
- evaluate_const_expression_integer(BIN_EXPR_PTR(x)->left)\
- operator\
- evaluate_const_expression_integer(BIN_EXPR_PTR(x)->right);
- #define RET_UNARY_EXPR(x,operator) return \
- operator evaluate_const_expression_integer(UN_EXPR_PTR(x)->operand);
-
- switch(expression->type)
- {
- case OP_COMMA:
- case OP_ADDITION:
- RET_BIN_EXPR(expression,+);
- case OP_SUBTRACTION:
- RET_BIN_EXPR(expression,-);
- case OP_MUL:
- RET_BIN_EXPR(expression,*);
- case OP_DIV:
- RET_BIN_EXPR(expression,/);
- case OP_REMAINDER:
- RET_BIN_EXPR(expression,%);
- case OP_COND:
- return (
- evaluate_const_expression_integer(((struct AST_Conditional_Expression*)expression)->left)?
- evaluate_const_expression_integer(((struct AST_Conditional_Expression*)expression)->center):
- evaluate_const_expression_integer(((struct AST_Conditional_Expression*)expression)->right)
- );
-
- case OP_LOGICAL_OR:
- RET_BIN_EXPR(expression,||);
- case OP_LOGICAL_AND:
- RET_BIN_EXPR(expression,&&);
- case OP_LOGICAL_NOT:
- RET_UNARY_EXPR(expression,!);
- case OP_BITWISE_OR:
- RET_BIN_EXPR(expression,|);
- case OP_BITWISE_AND:
- RET_BIN_EXPR(expression,&);
- case OP_BITWISE_XOR:
- RET_BIN_EXPR(expression,^);
- case OP_BITWISE_NOT:
- RET_UNARY_EXPR(expression,~);
- case OP_UNARY_PLUS:
- RET_UNARY_EXPR(expression,+);
- case OP_UNARY_MINUS:
- RET_UNARY_EXPR(expression,-);
- case OP_SHIFT_LEFT:
- RET_BIN_EXPR(expression,<<);
- case OP_SHIFT_RIGHT:
- RET_BIN_EXPR(expression,>>);
- case OP_LESS_EQ:
- RET_BIN_EXPR(expression,<=);
- case OP_GREATER_EQ:
- RET_BIN_EXPR(expression,>=);
- case OP_LESS:
- RET_BIN_EXPR(expression,<);
- case OP_GREATER:
- RET_BIN_EXPR(expression,>);
- case OP_EQUAL:
- RET_BIN_EXPR(expression,==);
- case OP_NOT_EQUAL:
- RET_BIN_EXPR(expression,!=);
- case OP_RVALUE:
- if(RVAL_EXPR_PTR(expression)->id->type==KW_NUMBER)
- {
- return evaluate_literal_integer_dec(RVAL_EXPR_PTR(expression)->id);
- }
- break;
- }
- /*shouldnt reach here*/
- return 0;
-
- }
-
- long long int evaluate_literal_integer_dec(struct token *token)
- {
- long long int accumulate=0;
- size_t i;
- for(i=0;i<token->data_size;++i)
- {
- accumulate*=10;
- accumulate+=token->data[i]-'0';
- }
- return accumulate;
-
- }
-
- long long int evaluate_number_literal(struct token *token)
- {
- return evaluate_literal_integer_dec(token);
- }
-
- #endif
F diff --git a/semantics/semantics.h b/semantics/semantics.h deleted file mode 100644 --- a/semantics/semantics.h +++ /dev/null
- #ifndef GCC_SEMANTICS_H
- #define GCC_SEMANTICS_H GCC_SEMANTICS_H
- #include <ast.h>
- #include <lexer.h>
-
- long long int evaluate_const_expression_integer(struct AST *expression);
- long long int evaluate_literal_integer_dec(struct token *token);
- long long int evaluate_number_literal(struct token *token);
- #endif
F diff --git a/semantics/type.c b/semantics/type.c deleted file mode 100644 --- a/semantics/type.c +++ /dev/null
- #ifndef GCC_TYPE_C
- #define GCC_TYPE_C GCC_TYPE_C
- #include "type.h"
-
-
-
- struct Type* type_check_and_push(struct Type *type,struct Map *base,size_t struct_size)
- {
- struct Map *hold_node;
- hold_node=Map_Check_And_Get(base,type,struct_size);
-
- if(hold_node==NULL)
- {
- type->node=Map_Push_And_Get(base,type,struct_size,type);
- return type;
- }else
- {
- free(type);
- return (struct Type*)hold_node->ID;
- }
- }
-
- struct Type* get_type_error(struct Type *type)
- {
- struct Type_Error *ret;
-
- ret=calloc(1,sizeof(struct Type_Error));
- ret->specifier=TS_ERROR;
- ret->error=type;
- ret=(struct Type_Error*)type_check_and_push((struct Type*)ret,type->node,sizeof(struct Type_Error));
- return (struct Type*)ret;
-
- }
- struct Type* get_struct_union_type(struct Denotation_Prototype *prototype)
- {
- struct Type_Struct_Union *ret;
-
- assert(prototype->denotation=DT_Prototype);
- prototype->denotation=DT_Object;
-
- ret=calloc(1,sizeof(struct Type_Struct_Union));
- ret->specifier=prototype->specifier;
- ret->struct_union=prototype->struct_union;
-
- ret->is_const=prototype->is_const;
- ret->is_volatile=prototype->is_volatile;
-
- ret=(struct Type_Struct_Union*)type_check_and_push((struct Type*)ret,prototype->node,sizeof(struct Type_Struct_Union));
- if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE || (prototype->specifier!=TS_UNION && prototype->specifier!=TS_STRUCT))
- {
- return get_type_error((struct Type*)ret);
- }else
- {
- return (struct Type*)ret;
- }
- }
- struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union)
- {
- struct Struct_Union *ret;
-
-
- ret=calloc(1,sizeof(struct Struct_Union));
- ret->specifier=struct_or_union;
- ret->members=malloc(sizeof(struct Queue));
- Queue_Init(ret->members);
-
- ret->inner_namespace=(struct Normal_Scope*)get_normal_scope(scope,BLOCK_SCOPE);
- ret->is_finished=0;
-
- return ret;
- }
- struct Enum *get_enum_base()
- {
- struct Enum *ret;
- ret=malloc(sizeof(struct Enum));
- ret->specifier=TS_ENUM;
- ret->consts=malloc(sizeof(struct Queue));
- Queue_Init(ret->consts);
-
- ret->is_finished=0;
-
- return ret;
- }
- struct Type* get_basic_type(struct Denotation_Prototype *prototype)
- {
- struct Type_Basic *ret;
- ret=calloc(1,sizeof(struct Type_Basic));
-
-
- assert(prototype->denotation=DT_Prototype);
- prototype->denotation=DT_Object;
-
- ret->size=prototype->size;
- ret->is_const=prototype->is_const;
- ret->is_volatile=prototype->is_volatile;
- ret->constraint=prototype->constraint;
- ret->sign=prototype->sign;
-
-
- if(prototype->specifier==TS_NONE)
- {
- ret->specifier=TS_INT;
- }else
- {
- ret->specifier=prototype->specifier;
-
- }
-
- ret=(struct Type_Basic*)type_check_and_push((struct Type*)ret,prototype->node,sizeof(struct Type_Basic));
-
- switch(ret->specifier)
- {
- case TS_DOUBLE:
- if(ret->constraint==TC_LONG_LONG
- || prototype->constraint==TC_SHORT
- || prototype->sign!=TSIGN_NONE)
- {
- return get_type_error((struct Type*)ret);
- }
- break;
- case TS_CHAR:
- if(prototype->constraint!=TC_NONE)
- {
- return get_type_error((struct Type*)ret);
- }
- break;
- case TS_INT:
- break;
- default:
- if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE)
- {
- return get_type_error((struct Type*)ret);
- }
-
- }
- return (struct Type*)ret;
-
- }
- struct Type* get_pointer_type(struct Type *points_to,char is_const,char is_volatile)
- {
- struct Type_Pointer *ret;
- ret=calloc(1,sizeof(struct Type_Pointer));
- ret->specifier=TS_POINTER;
- ret->size=PTR_SIZE;
- ret->points_to=points_to;
- ret->is_const=is_const;
- ret->is_volatile=is_volatile;
-
- ret=(struct Type_Pointer*)type_check_and_push((struct Type*)ret,points_to->node,sizeof(struct Type_Pointer));
- return (struct Type*)ret;
-
- }
- struct Type* get_array_type(struct Type *array_of,struct AST* number_of_elements)
- {
- struct Type_Array *ret;
- ret=calloc(1,sizeof(struct Type_Array));
- ret->specifier=TS_ARRAY;
- ret->size=0;
- if(number_of_elements!=NULL)
- {
- ret->number_of_elements=evaluate_const_expression_integer(number_of_elements);
- delete_ast(number_of_elements);
- }else
- {
- ret->number_of_elements=0;
- }
- ret->is_array_of=array_of;
- ret=(struct Type_Array*)type_check_and_push((struct Type*)ret,array_of->node,sizeof(struct Type_Array));
- return (struct Type*)ret;
-
-
- }
- struct Type* get_enum_type(struct Denotation_Prototype *prototype)
- {
- struct Type_Enum *ret;
-
- assert(prototype->denotation=DT_Prototype);
- prototype->denotation=DT_Object;
-
- ret=calloc(1,sizeof(struct Type_Enum));
- ret->specifier=TS_ENUM;
- ret->enumeration=prototype->enumerator;
- ret->is_const=prototype->is_const;
- ret->is_volatile=prototype->is_volatile;
-
- ret=(struct Type_Enum*)type_check_and_push((struct Type*)ret,prototype->node,sizeof(struct Type_Enum));
- if(prototype->sign!=TSIGN_NONE || prototype->constraint!=TC_NONE)
- {
- return get_type_error((struct Type*)ret);
- }
- return (struct Type*)ret;
- }
- struct Type* get_type_bitfield(struct Type *base,struct AST* number_of_bits)
- {
- struct Type_Bit_Field *ret;
- ret=calloc(1,sizeof(struct Type_Bit_Field));
- ret->specifier=TS_BITFIELD;
-
- assert(number_of_bits!=NULL);
- ret->number_of_bits=evaluate_const_expression_integer(number_of_bits);
- delete_ast(number_of_bits);
-
- ret->base=base;
-
- ret=(struct Type_Bit_Field*)type_check_and_push((struct Type*)ret,base->node,sizeof(struct Type_Bit_Field));
- return (struct Type*)ret;
- }
-
- struct Type* get_function_type(struct Type *return_type,struct Queue *parameters,struct Normal_Scope* function_prototype_scope)
- {
- struct Type_Function *ret;
- size_t i;
- struct Map *hold_node;
-
- ret=calloc(1,sizeof(struct Type_Function));
- ret->specifier=TS_FUNC;
-
- ret->return_type=return_type;
-
-
- ret->function_prototype_scope=function_prototype_scope;
-
-
- ret->number_of_arguments=parameters->size;
- ret->arguments=malloc(sizeof(struct Denoted_Object*)*ret->number_of_arguments);
- for(i=0;parameters->size>0;++i)
- {
- ret->arguments[i]=(struct Denoted_Object*)Queue_Pop(parameters);
- }
- free(parameters);
- ret=(struct Type_Function*)type_check_and_push((struct Type*)ret,return_type->node,sizeof(struct Type_Function));
-
- }
- char is_type(struct Translation_Data *translation_data,struct Scope *scope)
- {
- struct token *hold;
- struct Denoted *thing;
-
- hold=translation_data->tokens->first->data;
-
- switch(hold->type)
- {
- case KW_ID:
- thing=check_ordinary(scope,hold);
- if(thing!=NULL && thing->denotation==DT_Typedef)
- return 1;
- else return 0;
- case KW_CONST:
- case KW_VOLATILE:
- case KW_INT:
- case KW_VOID:
- case KW_CHAR:
- case KW_DOUBLE:
- case KW_FLOAT:
- case KW_LONG:
- case KW_SHORT:
- case KW_EXTERN:
- case KW_STATIC:
- case KW_TYPEDEF:
- case KW_STRUCT:
- case KW_UNION:
- case KW_ENUM:
- return 1;
- default:
- return 0;
-
- }
- }
- size_t get_type_size(struct Type *type)
- {
- switch(type->specifier)
- {
- case TS_VOID:
- return 0;
- case TS_CHAR:
- return 1;
- case TS_INT:
- return INT_SIZE;
- case TS_FLOAT:
- return FLOAT_SIZE;
- case TS_DOUBLE:
- return FLOAT_SIZE*2;
- case TS_STRUCT:
- return ((struct Type_Struct_Union*)type)->struct_union->size;
- case TS_ENUM:
- return INT_SIZE;
- case TS_UNION:
- return ((struct Type_Struct_Union*)type)->struct_union->size;
- case TS_POINTER:
- return PTR_SIZE;
- case TS_ARRAY:
- return ((struct Type_Array*)type)->size;
- case TS_FUNC:
- return 0;
- case TS_BITFIELD:
- return ((struct Type_Bit_Field*)type)->number_of_bits;
- case TS_NONE:
- return 0;
- case TS_ERROR:
- return 0;
-
- }
- }
-
-
- void delete_enum(struct Enum *enumeration)
- {
- while(enumeration->consts->size>0)
- Queue_Pop(enumeration->consts);
- free(enumeration);
- }
- void delete_struct_union(struct Struct_Union *su)
- {
- delete_scope((struct Scope*)su->inner_namespace);
- while(su->members->size>0)
- Queue_Pop(su->members);
-
- free(su);
- }
-
- void delete_type(void *type)
- {
- if(((struct Type*)type)->specifier!=TS_FUNC)
- {
- free(type);
- }else
- {
- delete_normal_scope(AS_TYPE_FUNC_PTR(type)->function_prototype_scope);
- free(AS_TYPE_FUNC_PTR(type)->arguments);
- free(type);
- }
- }
- char types_are_identical(struct Type *a,struct Type *b)
- {
- return 1;
- }
- #endif
F diff --git a/semantics/type.h b/semantics/type.h deleted file mode 100644 --- a/semantics/type.h +++ /dev/null
- #ifndef GCC_TYPE_H
- #define GCC_TYPE_H GCC_TYPE_H
- #include <type.hh>
- #include <denoted.h>
- #include <scope.h>
- #include <limits.h>
- #include <program.h>
- #include <map.h>
- #include <ast.h>
-
-
-
-
-
-
- enum Type_Specifier;
- enum Type_Constraint;
- enum Type_Signedness;
-
- struct Type
- {
- enum Type_Specifier specifier;
- struct Map *node;
- };
- struct Type_Error
- {
- enum Type_Specifier specifier;
- struct Map *node;
- struct Type *error;
- };
-
- struct Type_Struct_Union
- {
- enum Type_Specifier specifier;
- struct Map *node;
- struct Struct_Union *struct_union;
-
- char is_const:1;
- char is_volatile:1;
- };
- struct Struct_Union
- {
- enum Type_Specifier specifier;
- struct Map *node;
- size_t size;
- /*queue of denoted objects for preserving the order of the members*/
- struct Queue *members;
- struct Normal_Scope *inner_namespace;
-
- char is_finished;
- };
- struct Type_Bit_Field
- {
- enum Type_Specifier specifier;
- struct Map *node;
- size_t number_of_bits;
- struct Type *base;
- };
- struct Type_Basic
- {
- enum Type_Specifier specifier;
- enum Type_Constraint constraint;
- struct Map *node;
- enum Type_Signedness sign;
- size_t size;
- char is_const:1;
- char is_volatile:1;
- };
- struct Type_Pointer
- {
- enum Type_Specifier specifier;
- struct Map *node;
- size_t size;
- struct Type *points_to;
- char is_const:1;
- char is_volatile:1;
- };
- struct Type_Array
- {
- enum Type_Specifier specifier;
- struct Map *node;
- size_t size;
- size_t number_of_elements;
- struct Type *is_array_of;
- };
- struct Type_Function
- {
- enum Type_Specifier specifier;
- struct Map *node;
- struct Type *return_type;
- /*types*/
- size_t number_of_arguments;
-
- struct Denoted_Object** arguments;
- struct Normal_Scope *function_prototype_scope;
-
- };
- struct Type_Enum
- {
- enum Type_Specifier specifier;
- struct Map *node;
- struct Enum *enumeration;
-
- char is_const:1;
- char is_volatile:1;
-
- };
- struct Enum
- {
- enum Type_Specifier specifier;
- struct Queue *consts;
- char is_finished;
- };
-
-
-
- struct Type* type_check_and_push(struct Type *type,struct Map *base,size_t struct_size);
-
-
- struct Type* get_type_error(struct Type *type);
- struct Type* get_struct_union_type(struct Denotation_Prototype *prototype);
- struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union);
- struct Enum *get_enum_base();
- struct Type* get_basic_type(struct Denotation_Prototype *prototype);
- struct Type* get_pointer_type(struct Type *points_to,char is_const,char is_volatile);
- struct Type* get_array_type(struct Type *array_of,struct AST* number_of_elements);
- struct Type* get_enum_type(struct Denotation_Prototype *prototype);
- struct Type* get_type_bitfield(struct Type *base,struct AST* number_of_bits);
- struct Type* get_function_type(struct Type *return_type,struct Queue *parameters,struct Normal_Scope* function_prototype_scope);
-
- void delete_enum(struct Enum *enumeration);
- void delete_struct_union(struct Struct_Union *su);
- void delete_type(void *type);
-
- char is_type(struct Translation_Data *translation_data,struct Scope *scope);
- size_t get_type_size(struct Type *type);
-
- char types_are_identical(struct Type *a,struct Type *b);
-
-
-
-
-
-
- #endif
F diff --git a/semantics/type.hh b/semantics/type.hh deleted file mode 100644 --- a/semantics/type.hh +++ /dev/null
- #ifndef GCC_TYPE_HH
- #define GCC_TYPE_HH GCC_TYPE_HH
-
- #define PTR_SIZE 4
- #define INT_SIZE 4
- #define CHAR_SIZE 1
- #define FLOAT_SIZE 4
- #define DOUBLE_SIZE 8
-
-
- #define AS_BASIC_TYPE_PTR(x) ((struct Type_Basic*)x)
- #define AS_STRUCT_UNION_PTR(x) ((struct Type_Struct_Union*)x)
- #define AS_TYPE_PTR_PTR(x) ((struct Type_Pointer*)x)
- #define AS_TYPE_ARR_PTR(x) ((struct Type_Array*)x)
- #define AS_TYPE_ENUM_PTR(x) ((struct Type_Enum*)x)
- #define AS_TYPE_FUNC_PTR(x) ((struct Type_Function*)x)
-
- /*this isn't just type-specifier :DD*/
- enum Type_Specifier
- {
- TS_VOID,
- TS_CHAR,
- TS_INT,
- TS_FLOAT,
- TS_DOUBLE,
- TS_STRUCT,
- TS_ENUM,
- TS_UNION,
- TS_POINTER,
- TS_ARRAY,
- TS_FUNC,
- TS_BITFIELD,
- TS_NONE,
- TS_ERROR
- };
- enum Type_Constraint
- {
- TC_LONG,
- TC_LONG_LONG,
- TC_SHORT,
- TC_NONE
- };
- enum Type_Signedness
- {
- TSIGN_SIGNED,
- TSIGN_UNSIGNED,
- TSIGN_NONE
- };
- struct Type;
- struct Type_Error;
- struct Type_Struct_Union;
- struct Struct_Union;
- struct Type_Bit_Field;
- struct Type_Basic;
- struct Type_Pointer;
- struct Type_Array;
- struct Type_Function;
- struct Type_Enum;
- struct Enum;
- struct Type_Map_Pair;
-
- #endif
F diff --git a/tests/test5.c b/tests/test5.c --- a/tests/test5.c +++ b/tests/test5.c
extern int a;
+ 1;