11 #define TOK(n) { yylval.token = n; return n; }
16 ID [a-zA-Z_][a-zA-Z0-9_]*
21 uuid { TOK(UUID_KEYWORD); }
22 version { TOK(VERSION_KEYWORD); }
23 pointer_default { TOK(POINTER_DEFAULT_KEYWORD); }
24 unique { TOK(UNIQUE_KEYWORD); }
25 interface { TOK(INTERFACE_KEYWORD); }
26 aggregatable { TOK(AGGREGATABLE_KEYWORD); }
27 allocate { TOK(ALLOCATE_KEYWORD); }
28 appobject { TOK(APPOBJECT_KEYWORD); }
31 all_nodes { TOK(ALL_NODES_KEYWORD); }
32 single_node { TOK(SINGLE_NODE_KEYWORD); }
33 free { TOK(FREE_KEYWORD); }
34 dont_free { TOK(DONT_FREE_KEYWORD); }
36 typedef { TOK(TYPEDEF_KEYWORD); }
37 struct { TOK(STRUCT_KEYWORD); }
38 const { TOK(CONST_KEYWORD); }
40 signed { TOK(SIGNED_KEYWORD); }
41 unsigned { TOK(UNSIGNED_KEYWORD); }
43 in { TOK(IN_KEYWORD); }
44 out { TOK(OUT_KEYWORD); }
45 string { TOK(STRING_KEYWORD); }
46 implicit_handle { TOK(IMPLICIT_HANDLE_KEYWORD); }
47 auto_handle { TOK(AUTO_HANDLE_KEYWORD); }
48 size_is { TOK(SIZE_IS_KEYWORD); }
49 length_is { TOK(LENGTH_IS_KEYWORD); }
52 if ((n = token_to_type(yytext)) != 0)
59 yylval.id = strdup(yytext);
64 {DIGIT}+ { yylval.number = atoi(yytext);
65 return(NUMBER_TOKEN); }
67 {DIGIT}+"."{DIGIT}+ { char* ebuf;
68 yylval.version.major = strtoul(yytext, &ebuf, 0);
69 yylval.version.minor = strtoul(ebuf + 1, NULL, 0);
70 return(VERSION_TOKEN); }
72 {UUID}+"-"{UUID}+"-"{UUID}+"-"{UUID}+"-"{UUID}+ { yylval.uuid = strdup(yytext);
75 ";" { TOK(LINE_TERMINATOR); }
77 "(" { TOK(LEFT_BRACKET); }
79 ")" { TOK(RIGHT_BRACKET); }
83 "{" { TOK(LCURLY_BRACKET); }
85 "}" { TOK(RCURLY_BRACKET); }
87 "[" { TOK(LSQBRACKET); }
89 "]" { TOK(RSQBRACKET); }
93 "=" { TOK(ASSIGNMENT); }
99 . yyerror("invalid character");
103 void yyerror(char* s)
106 printf("%s:%d: %s at %s\n", current_file, lineno, s, yytext);
109 void yyerror1(char* s)
112 printf("%s:%d: %s\n", current_file, lineno, s);