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.
9 /* lex-func-prefix: zz */
18 #include "bpf_hla_parser.tab.h"
19 #include "bpf_symtab.h"
22 void bpf_hla_lex_init(void);
29 #define KEYPAIR(k,t) { .key = (k), .token = (t)}
30 static const struct res_keywords keytab[] = {
31 KEYPAIR("def", K_DEF),
32 KEYPAIR("pkt", K_PKT),
33 KEYPAIR("ret", K_RET),
35 KEYPAIR("elif", K_ELIF),
36 KEYPAIR("else", K_ELSE),
38 KEYPAIR("ipv4", K_MACRO_IPV4),
39 KEYPAIR("ipv6", K_MACRO_IPV6),
40 KEYPAIR("ip", K_MACRO_IP),
41 KEYPAIR("udp", K_MACRO_UDP),
42 KEYPAIR("tcp", K_MACRO_TCP),
45 void bpf_hla_lex_init(void)
48 for (i = 0; i < array_size(keytab); ++i)
49 bpf_symtab_insert(keytab[i].key, keytab[i].token);
52 #define YY_USER_INIT bpf_hla_lex_init();
54 extern void zzerror(const char *);
78 number_dec {digit_n}|{digit_s}{digit}*
79 number_oct {digit_n}{digit}+
80 number_hex {digit_n}{hex_x}{hex}+
81 number_bin {digit_n}{bindigit_b}{bindigit}+
86 zzlval.idx = bpf_symtab_find(zztext);
88 zzlval.idx = bpf_symtab_insert(zztext, K_NAME);
91 return bpf_symtab_type(zzlval.idx);
113 {number_hex} { zzlval.number = strtoul(zztext, NULL, 16);
116 {number_dec} { zzlval.number = strtol(zztext, NULL, 10);
119 {number_oct} { zzlval.number = strtol(zztext, NULL, 8);
122 {number_bin} { zzlval.number = strtol(zztext + 2, NULL, 2);
125 "/*"([^\*]|\*[^/])*"*/" { /* NOP */ }
126 ";"[^\n]* {/* NOP */}
129 . { printf("Unknown character '%s'", zztext);
130 zzerror("lex Unknown character"); }