blob: 1f4d7fe90b1f7e3d544e0f9aa3cd3d12229f71fe [file] [log] [blame]
Mark Slee31985722006-05-24 21:45:31 +00001/**
2 * Thrift scanner.
3 *
4 * Tokenizes a thrift definition file.
5 * @author Mark Slee <mcslee@facebook.com>
6 */
7%{
8
9#include "main.h"
10#include "parse/t_program.h"
11
12/** Must be included AFTER parse/t_program.h */
13#include "thrift.tab.hh"
14
15%}
16
17/** Provides yylineno global */
18%option lex-compat
19
20/** Helper definitions */
21intconstant ([0-9]+)
Mark Slee9cb7c612006-09-01 22:17:45 +000022identifier ([a-zA-Z_][\.a-zA-Z_0-9]*)
Mark Slee31985722006-05-24 21:45:31 +000023whitespace ([ \t\r\n]*)
24multicomm ("/*""/"*([^*/]|[^*]"/"|"*"[^/])*"*"*"*/")
25comment ("//"[^\n]*)
Mark Sleee8540632006-05-30 09:24:40 +000026symbol ([\,\{\}\(\)\=<>])
Mark Slee31985722006-05-24 21:45:31 +000027
28%%
29
30{whitespace} { /* do nothing */ }
31{multicomm} { /* do nothing */ }
32{comment} { /* do nothing */ }
33
Mark Slee9cb7c612006-09-01 22:17:45 +000034{symbol} { return yytext[0]; }
35
36"namespace" { return tok_namespace; }
Mark Slee31985722006-05-24 21:45:31 +000037
Mark Slee52f643d2006-08-09 00:03:43 +000038"void" { return tok_void; }
Mark Slee31985722006-05-24 21:45:31 +000039"byte" { return tok_byte; }
Mark Slee9cb7c612006-09-01 22:17:45 +000040"i16" { return tok_i16; }
Mark Slee31985722006-05-24 21:45:31 +000041"i32" { return tok_i32; }
Mark Slee31985722006-05-24 21:45:31 +000042"i64" { return tok_i64; }
Mark Slee9cb7c612006-09-01 22:17:45 +000043"double" { return tok_double; }
44"string" { return tok_string; }
Mark Slee31985722006-05-24 21:45:31 +000045
46"map" { return tok_map; }
47"list" { return tok_list; }
48"set" { return tok_set; }
49
Mark Slee31985722006-05-24 21:45:31 +000050"async" { return tok_async; }
51
52"typedef" { return tok_typedef; }
53"struct" { return tok_struct; }
Mark Slee9cb7c612006-09-01 22:17:45 +000054"exception" { return tok_xception; }
55"throws" { return tok_throws; }
Mark Slee31985722006-05-24 21:45:31 +000056"service" { return tok_service; }
57"enum" { return tok_enum; }
58
Mark Slee52f643d2006-08-09 00:03:43 +000059
Mark Slee9cb7c612006-09-01 22:17:45 +000060{intconstant} { yylval.iconst = atoi(yytext); return tok_int_constant; }
Mark Slee31985722006-05-24 21:45:31 +000061{identifier} { yylval.id = strdup(yytext); return tok_identifier; }
62
63%%