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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
{
open Netlist_parser
open Lexing
exception Eof
let keyword_list =
[
"AND", AND;
"CONCAT", CONCAT;
"IN", IN;
"INPUT", INPUT;
"MUX", MUX;
"NAND", NAND;
"NOT", NOT;
"OR", OR;
"OUTPUT", OUTPUT;
"RAM", RAM;
"REG", REG;
"ROM", ROM;
"SELECT", SELECT;
"SLICE", SLICE;
"VAR", VAR;
"XOR", XOR;
]
let newline lexbuf =
let pos = lexbuf.lex_curr_p in
lexbuf.lex_curr_p <-
{ pos with pos_lnum = pos.pos_lnum + 1; pos_bol = pos.pos_cnum }
}
rule token = parse
| '\n' { newline lexbuf ; token lexbuf }
| [' ' '\t'] { token lexbuf } (* skip blanks *)
| "=" { EQUAL }
| ":" { COLON }
| "," { COMMA }
| ['0'-'9']+ as lxm { INT(lxm) }
| ('_' ? ['A'-'Z' 'a'-'z']('_' ? ['A'-'Z' 'a'-'z' ''' '0'-'9']) * as id)
{ let s = Lexing.lexeme lexbuf in
try List.assoc s keyword_list
with Not_found -> NAME id }
| eof { EOF }
|