Move boolean parser to separate module
This commit is contained in:
parent
a1bbae9201
commit
29ea4578e4
@ -1,9 +1,11 @@
|
||||
mod formulas;
|
||||
mod helpers;
|
||||
mod literals;
|
||||
mod names;
|
||||
mod terms;
|
||||
|
||||
pub(crate) use helpers::word_boundary;
|
||||
pub(crate) use literals::boolean;
|
||||
pub use names::{function_or_predicate_name, variable_name};
|
||||
pub use terms::term;
|
||||
pub use formulas::formula;
|
||||
|
@ -9,43 +9,7 @@ use nom::
|
||||
sequence::{delimited, pair, preceded, terminated, tuple},
|
||||
};
|
||||
|
||||
use super::{Declarations, 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)
|
||||
}
|
||||
use super::{Declarations, boolean, word_boundary};
|
||||
|
||||
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
|
||||
((
|
||||
boolean,
|
||||
map
|
||||
(
|
||||
boolean,
|
||||
crate::Formula::Boolean,
|
||||
),
|
||||
map
|
||||
(
|
||||
|i| predicate(i, d),
|
||||
@ -513,24 +481,6 @@ mod tests
|
||||
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]
|
||||
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},
|
||||
};
|
||||
|
||||
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>
|
||||
{
|
||||
@ -57,41 +57,6 @@ fn absolute_value<'i>(i: &'i str, d: &Declarations) -> IResult<&'i str, crate::T
|
||||
)(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>
|
||||
{
|
||||
map
|
||||
@ -321,7 +286,11 @@ fn term_precedence_0<'a>(i: &'a str, d: &Declarations) -> IResult<&'a str, crate
|
||||
{
|
||||
alt
|
||||
((
|
||||
boolean,
|
||||
map
|
||||
(
|
||||
boolean,
|
||||
crate::Term::Boolean,
|
||||
),
|
||||
special_integer,
|
||||
integer,
|
||||
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)");
|
||||
}
|
||||
|
||||
#[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]
|
||||
fn parse_integer()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user