summaryrefslogtreecommitdiff
path: root/tp1/netlist_lexer.mll
blob: 78b041035d7ced897000c680c32f3a2f1badc8e0 (plain) (blame)
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
{
open Netlist_parser
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;
]

}

rule token = parse
    [' ' '\t' '\n']     { token lexbuf }     (* skip blanks *)
  | "="            { EQUAL }
  | ":"            { COLON }
  | ","            { COMMA }
  | ['0'-'9']+ as lxm { INT(int_of_string 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 }