type token =
  | LPAREN
  | RPAREN
  | LBRACE
  | RBRACE
  | LBRACKET
  | RBRACKET
  | ANY
  | TERMINATION
  | COMMA
  | ASSIGN
  | COLON
  | ARROW
  | CONCAT
  | ACCESS
  | PLUS
  | MINUS
  | TIMES
  | DIVIDE
  | MOD
  | EQ
  | NEQ
  | LT
  | LEQ
  | GT
  | GEQ
  | AND
  | OR
  | NOT
  | IF
  | ELSE
  | MAP
  | IN
  | FINDMANY
  | FUNCTION
  | RETURN
  | GRAPH_INSERT
  | GRAPH_REMOVE
  | DATA_INSERT
  | DATA_REMOVE
  | NEIGHBORS
  | GRAPH
  | REL
  | NODE
  | INT
  | DOUBLE
  | STRING
  | BOOL
  | VOID
  | LIST
  | INT_LITERAL of (int)
  | STRING_LITERAL of (string)
  | ID of (string)
  | DOUBLE_LITERAL of (float)
  | BOOL_LITERAL of (bool)
  | EOF

val program :
  (Lexing.lexbuf  -> token) -> Lexing.lexbuf -> Ast.program
