anthem-rs/src/utils.rs

58 lines
1.2 KiB
Rust
Raw Normal View History

2020-02-04 23:33:59 +01:00
mod arithmetic_terms;
mod variable_declaration_stack;
2020-02-04 23:33:59 +01:00
pub(crate) use arithmetic_terms::*;
pub(crate) use variable_declaration_stack::*;
2020-02-04 23:33:59 +01:00
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub(crate) enum OperatorNotation
{
Prefix,
Infix,
}
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
2020-02-04 16:42:50 +01:00
pub(crate) enum Domain
{
Program,
Integer,
}
pub(crate) struct ScopedFormula
{
pub free_variable_declarations: std::rc::Rc<foliage::VariableDeclarations>,
pub formula: Box<foliage::Formula>,
}
2020-02-05 01:10:33 +01:00
pub fn parse_predicate_declaration(input: &str)
-> Result<std::rc::Rc<foliage::PredicateDeclaration>, crate::Error>
{
let mut parts = input.split("/");
let name = match parts.next()
{
Some(name) => name.to_string(),
None => return Err(crate::Error::new_parse_predicate_declaration()),
};
use std::str::FromStr;
let arity = match parts.next()
{
Some(arity)
=> usize::from_str(arity).map_err(|_| crate::Error::new_parse_predicate_declaration())?,
None => return Err(crate::Error::new_parse_predicate_declaration()),
};
if parts.next().is_some()
{
return Err(crate::Error::new_parse_predicate_declaration());
}
Ok(std::rc::Rc::new(foliage::PredicateDeclaration
{
name,
arity,
}))
}