2 * netsniff-ng - the packet sniffing beast
3 * By Daniel Borkmann <daniel@netsniff-ng.org>
4 * Copyright 2012 Daniel Borkmann <dborkma@tik.ee.ethz.ch>,
5 * Swiss federal institute of technology (ETH Zurich)
6 * Subject to the GPL, version 2.
16 #include "bpf_hla_parser.tab.h"
17 #include "bpf_symtab.h"
20 void bpf_hla_lex_init(void);
27 #define KEYPAIR(k,t) { .key = (k), .token = (t)}
28 static const struct res_keywords keytab[] = {
29 KEYPAIR("def", K_DEF),
30 KEYPAIR("pkt", K_PKT),
31 KEYPAIR("ret", K_RET),
33 KEYPAIR("elif", K_ELIF),
34 KEYPAIR("else", K_ELSE),
37 void bpf_hla_lex_init(void)
40 for (i = 0; i < array_size(keytab); ++i)
41 bpf_symtab_insert(keytab[i].key, keytab[i].token);
44 #define YY_USER_INIT bpf_hla_lex_init();
46 extern void zzerror(const char *);
70 number_dec {digit_n}|{digit_s}{digit}*
71 number_oct {digit_n}{digit}+
72 number_hex {digit_n}{hex_x}{hex}+
73 number_bin {digit_n}{bindigit_b}{bindigit}+
78 zzlval.idx = bpf_symtab_find(zztext);
80 zzlval.idx = bpf_symtab_insert(zztext, K_NAME);
83 return bpf_symtab_type(zzlval.idx);
105 {number_hex} { zzlval.number = strtoul(zztext, NULL, 16);
108 {number_dec} { zzlval.number = strtol(zztext, NULL, 10);
111 {number_oct} { zzlval.number = strtol(zztext, NULL, 8);
114 {number_bin} { zzlval.number = strtol(zztext + 2, NULL, 2);
117 "/*"([^\*]|\*[^/])*"*/" { /* NOP */ }
118 ";"[^\n]* {/* NOP */}
121 . { printf("Unknown character '%s'", zztext);
122 zzerror("lex Unknown character"); }