prune_lang/logic/
ast.rs

1use super::*;
2
3#[derive(Clone, Debug, PartialEq)]
4pub struct Program {
5    pub datas: HashMap<Ident, DataDecl>,
6    pub preds: HashMap<Ident, PredDecl>,
7    pub querys: Vec<QueryDecl>,
8}
9
10#[derive(Clone, Debug, PartialEq)]
11pub enum Goal {
12    Lit(bool),
13    Eq(TermId, TermId),
14    Prim(Prim, Vec<AtomId>),
15    And(Vec<Goal>),
16    Or(Vec<Goal>),
17    Call(Ident, Vec<TypeId>, Vec<TermId>),
18}
19
20#[derive(Clone, Debug, PartialEq)]
21pub struct DataDecl {
22    pub name: Ident,
23    pub polys: Vec<Ident>,
24    pub cons: Vec<Constructor>,
25}
26
27#[derive(Clone, Debug, PartialEq)]
28pub struct Constructor {
29    pub name: Ident,
30    pub flds: Vec<TypeId>,
31}
32
33#[derive(Clone, Debug, PartialEq)]
34pub struct PredDecl {
35    pub name: Ident,
36    pub polys: Vec<Ident>,
37    pub pars: Vec<(Ident, TypeId)>,
38    pub vars: Vec<(Ident, TypeId)>,
39    pub goal: Goal,
40}
41
42#[derive(Clone, Debug, PartialEq)]
43pub struct QueryDecl {
44    pub entry: Ident,
45    pub params: Vec<QueryParam>,
46}
47
48#[derive(Clone, Debug, PartialEq)]
49pub enum QueryParam {
50    DepthStep(usize),
51    DepthLimit(usize),
52    AnswerLimit(usize),
53    AnswerPause(bool),
54}