Move boolean parser to separate module
This commit is contained in:
parent
a1bbae9201
commit
29ea4578e4
@ -1,9 +1,11 @@
|
|||||||
mod formulas;
|
mod formulas;
|
||||||
mod helpers;
|
mod helpers;
|
||||||
|
mod literals;
|
||||||
mod names;
|
mod names;
|
||||||
mod terms;
|
mod terms;
|
||||||
|
|
||||||
pub(crate) use helpers::word_boundary;
|
pub(crate) use helpers::word_boundary;
|
||||||
|
pub(crate) use literals::boolean;
|
||||||
pub use names::{function_or_predicate_name, variable_name};
|
pub use names::{function_or_predicate_name, variable_name};
|
||||||
pub use terms::term;
|
pub use terms::term;
|
||||||
pub use formulas::formula;
|
pub use formulas::formula;
|
||||||
|
@ -9,43 +9,7 @@ use nom::
|
|||||||
sequence::{delimited, pair, preceded, terminated, tuple},
|
sequence::{delimited, pair, preceded, terminated, tuple},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{Declarations, word_boundary};
|
use super::{Declarations, boolean, word_boundary};
|
||||||
|
|
||||||
// TODO: avoid code duplication
|
|
||||||
fn true_(i: &str) -> IResult<&str, crate::Formula>
|
|
||||||
{
|
|
||||||
map
|
|
||||||
(
|
|
||||||
terminated
|
|
||||||
(
|
|
||||||
tag("true"),
|
|
||||||
word_boundary,
|
|
||||||
),
|
|
||||||
|_| crate::Formula::true_(),
|
|
||||||
)(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn false_(i: &str) -> IResult<&str, crate::Formula>
|
|
||||||
{
|
|
||||||
map
|
|
||||||
(
|
|
||||||
terminated
|
|
||||||
(
|
|
||||||
tag("false"),
|
|
||||||
word_boundary,
|
|
||||||
),
|
|
||||||
|_| crate::Formula::false_(),
|
|
||||||
)(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn boolean(i: &str) -> IResult<&str, crate::Formula>
|
|
||||||
{
|
|
||||||
alt
|
|
||||||
((
|
|
||||||
true_,
|
|
||||||
false_,
|
|
||||||
))(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn predicate<'i>(i: &'i str, d: &Declarations) -> IResult<&'i str, crate::Predicate>
|
pub fn predicate<'i>(i: &'i str, d: &Declarations) -> IResult<&'i str, crate::Predicate>
|
||||||
{
|
{
|
||||||
@ -394,7 +358,11 @@ fn formula_precedence_0<'a>(i: &'a str, d: &Declarations) -> IResult<&'a str, cr
|
|||||||
{
|
{
|
||||||
alt
|
alt
|
||||||
((
|
((
|
||||||
|
map
|
||||||
|
(
|
||||||
boolean,
|
boolean,
|
||||||
|
crate::Formula::Boolean,
|
||||||
|
),
|
||||||
map
|
map
|
||||||
(
|
(
|
||||||
|i| predicate(i, d),
|
|i| predicate(i, d),
|
||||||
@ -513,24 +481,6 @@ mod tests
|
|||||||
assert_eq!(formula("false"), Formula::false_());
|
assert_eq!(formula("false"), Formula::false_());
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn parse_boolean()
|
|
||||||
{
|
|
||||||
assert_eq!(boolean("true"), Ok(("", Formula::true_())));
|
|
||||||
assert_eq!(boolean("false"), Ok(("", Formula::false_())));
|
|
||||||
assert_eq!(boolean("true false"), Ok((" false", Formula::true_())));
|
|
||||||
assert_eq!(boolean("false true"), Ok((" true", Formula::false_())));
|
|
||||||
assert_eq!(boolean("true,"), Ok((",", Formula::true_())));
|
|
||||||
assert_eq!(boolean("false,"), Ok((",", Formula::false_())));
|
|
||||||
assert!(boolean("truefalse").is_err());
|
|
||||||
assert!(boolean("falsetrue").is_err());
|
|
||||||
assert!(boolean("truea").is_err());
|
|
||||||
assert!(boolean("falsea").is_err());
|
|
||||||
assert!(boolean("a").is_err());
|
|
||||||
assert!(boolean("-").is_err());
|
|
||||||
assert!(boolean(" ").is_err());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_predicate()
|
fn parse_predicate()
|
||||||
{
|
{
|
||||||
|
69
src/parse/literals.rs
Normal file
69
src/parse/literals.rs
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
use nom::
|
||||||
|
{
|
||||||
|
IResult,
|
||||||
|
branch::alt,
|
||||||
|
bytes::complete::tag,
|
||||||
|
combinator::map,
|
||||||
|
sequence::terminated,
|
||||||
|
};
|
||||||
|
|
||||||
|
use super::word_boundary;
|
||||||
|
|
||||||
|
fn true_(i: &str) -> IResult<&str, bool>
|
||||||
|
{
|
||||||
|
map
|
||||||
|
(
|
||||||
|
terminated
|
||||||
|
(
|
||||||
|
tag("true"),
|
||||||
|
word_boundary,
|
||||||
|
),
|
||||||
|
|_| true,
|
||||||
|
)(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn false_(i: &str) -> IResult<&str, bool>
|
||||||
|
{
|
||||||
|
map
|
||||||
|
(
|
||||||
|
terminated
|
||||||
|
(
|
||||||
|
tag("false"),
|
||||||
|
word_boundary,
|
||||||
|
),
|
||||||
|
|_| false,
|
||||||
|
)(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn boolean(i: &str) -> IResult<&str, bool>
|
||||||
|
{
|
||||||
|
alt
|
||||||
|
((
|
||||||
|
true_,
|
||||||
|
false_,
|
||||||
|
))(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests
|
||||||
|
{
|
||||||
|
use crate::parse::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_boolean()
|
||||||
|
{
|
||||||
|
assert_eq!(boolean("true"), Ok(("", true)));
|
||||||
|
assert_eq!(boolean("false"), Ok(("", false)));
|
||||||
|
assert_eq!(boolean("true false"), Ok((" false", true)));
|
||||||
|
assert_eq!(boolean("false true"), Ok((" true", false)));
|
||||||
|
assert_eq!(boolean("true,"), Ok((",", true)));
|
||||||
|
assert_eq!(boolean("false,"), Ok((",", false)));
|
||||||
|
assert!(boolean("truefalse").is_err());
|
||||||
|
assert!(boolean("falsetrue").is_err());
|
||||||
|
assert!(boolean("truea").is_err());
|
||||||
|
assert!(boolean("falsea").is_err());
|
||||||
|
assert!(boolean("a").is_err());
|
||||||
|
assert!(boolean("-").is_err());
|
||||||
|
assert!(boolean(" ").is_err());
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,7 @@ use nom::
|
|||||||
sequence::{delimited, pair, preceded, terminated},
|
sequence::{delimited, pair, preceded, terminated},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{Declarations, function_or_predicate_name, word_boundary, variable_name};
|
use super::{Declarations, boolean, function_or_predicate_name, variable_name, word_boundary};
|
||||||
|
|
||||||
fn negative<'i>(i: &'i str, d: &Declarations) -> IResult<&'i str, crate::Term>
|
fn negative<'i>(i: &'i str, d: &Declarations) -> IResult<&'i str, crate::Term>
|
||||||
{
|
{
|
||||||
@ -57,41 +57,6 @@ fn absolute_value<'i>(i: &'i str, d: &Declarations) -> IResult<&'i str, crate::T
|
|||||||
)(i)
|
)(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn true_(i: &str) -> IResult<&str, crate::Term>
|
|
||||||
{
|
|
||||||
map
|
|
||||||
(
|
|
||||||
terminated
|
|
||||||
(
|
|
||||||
tag("true"),
|
|
||||||
word_boundary,
|
|
||||||
),
|
|
||||||
|_| crate::Term::true_(),
|
|
||||||
)(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn false_(i: &str) -> IResult<&str, crate::Term>
|
|
||||||
{
|
|
||||||
map
|
|
||||||
(
|
|
||||||
terminated
|
|
||||||
(
|
|
||||||
tag("false"),
|
|
||||||
word_boundary,
|
|
||||||
),
|
|
||||||
|_| crate::Term::false_(),
|
|
||||||
)(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn boolean(i: &str) -> IResult<&str, crate::Term>
|
|
||||||
{
|
|
||||||
alt
|
|
||||||
((
|
|
||||||
true_,
|
|
||||||
false_,
|
|
||||||
))(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn integer(i: &str) -> IResult<&str, crate::Term>
|
pub fn integer(i: &str) -> IResult<&str, crate::Term>
|
||||||
{
|
{
|
||||||
map
|
map
|
||||||
@ -321,7 +286,11 @@ fn term_precedence_0<'a>(i: &'a str, d: &Declarations) -> IResult<&'a str, crate
|
|||||||
{
|
{
|
||||||
alt
|
alt
|
||||||
((
|
((
|
||||||
|
map
|
||||||
|
(
|
||||||
boolean,
|
boolean,
|
||||||
|
crate::Term::Boolean,
|
||||||
|
),
|
||||||
special_integer,
|
special_integer,
|
||||||
integer,
|
integer,
|
||||||
map
|
map
|
||||||
@ -824,24 +793,6 @@ mod tests
|
|||||||
assert_eq!(format_term("f( \n a \n + \n b \n , \n c \n + \n d \n)"), "f(a + b, c + d)");
|
assert_eq!(format_term("f( \n a \n + \n b \n , \n c \n + \n d \n)"), "f(a + b, c + d)");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn parse_boolean()
|
|
||||||
{
|
|
||||||
assert_eq!(boolean("true"), Ok(("", Term::true_())));
|
|
||||||
assert_eq!(boolean("false"), Ok(("", Term::false_())));
|
|
||||||
assert_eq!(boolean("true false"), Ok((" false", Term::true_())));
|
|
||||||
assert_eq!(boolean("false true"), Ok((" true", Term::false_())));
|
|
||||||
assert_eq!(boolean("true,"), Ok((",", Term::true_())));
|
|
||||||
assert_eq!(boolean("false,"), Ok((",", Term::false_())));
|
|
||||||
assert!(boolean("truefalse").is_err());
|
|
||||||
assert!(boolean("falsetrue").is_err());
|
|
||||||
assert!(boolean("truea").is_err());
|
|
||||||
assert!(boolean("falsea").is_err());
|
|
||||||
assert!(boolean("a").is_err());
|
|
||||||
assert!(boolean("-").is_err());
|
|
||||||
assert!(boolean(" ").is_err());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_integer()
|
fn parse_integer()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user