mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-09 20:55:39 -05:00
43 lines
728 B
OCaml
43 lines
728 B
OCaml
/* Copyright 2005 INRIA */
|
|
|
|
%{
|
|
open Sidekick_util
|
|
|
|
let lnum pos = pos.Lexing.pos_lnum
|
|
let cnum pos = pos.Lexing.pos_cnum - pos.Lexing.pos_bol
|
|
let pp_pos out (start,stop) =
|
|
Format.fprintf out "(at %d:%d - %d:%d)"
|
|
(lnum start) (cnum start) (lnum stop) (cnum stop)
|
|
%}
|
|
|
|
%token <int> LIT
|
|
%token ZERO
|
|
%token P CNF EOF
|
|
|
|
%start file
|
|
%type <int list list> file
|
|
|
|
%%
|
|
|
|
/* DIMACS syntax */
|
|
|
|
prelude:
|
|
| P CNF LIT LIT { () }
|
|
| error
|
|
{
|
|
Error.errorf "expected prelude %a" pp_pos ($startpos,$endpos)
|
|
}
|
|
|
|
clauses:
|
|
| l=clause* { l }
|
|
| error
|
|
{
|
|
Error.errorf "expected list of clauses %a"
|
|
pp_pos ($startpos,$endpos)
|
|
}
|
|
|
|
file:
|
|
| prelude l=clauses EOF { l }
|
|
|
|
clause:
|
|
| l=LIT+ ZERO { l }
|