Implement strings
This commit is contained in:
parent
5ec9331b4c
commit
d5cd179a2d
@ -4,7 +4,7 @@ mod terms;
|
|||||||
|
|
||||||
pub(crate) use helpers::word_boundary;
|
pub(crate) use helpers::word_boundary;
|
||||||
pub use names::{function_name, predicate_name, variable_name};
|
pub use names::{function_name, predicate_name, variable_name};
|
||||||
pub use terms::{integer, special_integer};
|
pub use terms::{integer, special_integer, string};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
use nom::
|
use nom::
|
||||||
|
@ -2,10 +2,10 @@ use nom::
|
|||||||
{
|
{
|
||||||
IResult,
|
IResult,
|
||||||
branch::alt,
|
branch::alt,
|
||||||
bytes::complete::tag,
|
bytes::complete::{escaped_transform, tag},
|
||||||
character::complete::digit1,
|
character::complete::{digit1, none_of},
|
||||||
combinator::{map, map_res, opt, recognize},
|
combinator::{map, map_res, opt, recognize},
|
||||||
sequence::{pair, terminated},
|
sequence::{delimited, pair, terminated},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::word_boundary;
|
use super::word_boundary;
|
||||||
@ -76,27 +76,44 @@ pub fn special_integer(i: &str) -> IResult<&str, crate::Term>
|
|||||||
))(i)
|
))(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
pub fn string(i: &str) -> IResult<&str, crate::Term>
|
||||||
fn string<'a>(i: &'a str, declarations: &Declarations) -> IResult<&'a str, crate::Term>
|
|
||||||
{
|
{
|
||||||
map
|
map
|
||||||
(
|
(
|
||||||
delimited
|
terminated
|
||||||
(
|
(
|
||||||
multispace0,
|
|
||||||
delimited
|
delimited
|
||||||
(
|
(
|
||||||
tag("\""),
|
tag("\""),
|
||||||
is_not("\""),
|
escaped_transform
|
||||||
|
(
|
||||||
|
none_of("\"\\"),
|
||||||
|
'\\',
|
||||||
|
alt
|
||||||
|
((
|
||||||
|
tag("\""),
|
||||||
|
tag("\\"),
|
||||||
|
map
|
||||||
|
(
|
||||||
|
tag("n"),
|
||||||
|
|_| "\n",
|
||||||
|
),
|
||||||
|
map
|
||||||
|
(
|
||||||
|
tag("t"),
|
||||||
|
|_| "\t",
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
),
|
||||||
tag("\""),
|
tag("\""),
|
||||||
),
|
),
|
||||||
multispace0
|
word_boundary,
|
||||||
),
|
),
|
||||||
|s: &str| crate::Term::String(s.to_string())
|
crate::Term::string,
|
||||||
)(i)
|
)(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
fn function<'a>(i: &'a str, declarations: &Declarations) -> IResult<&'a str, crate::Formula>
|
fn function<'a>(i: &'a str, declarations: &Declarations) -> IResult<&'a str, crate::Formula>
|
||||||
{
|
{
|
||||||
alt
|
alt
|
||||||
@ -156,21 +173,22 @@ fn function_n_ary<'a>(i: &'a str, declarations: &Declarations) -> IResult<&'a st
|
|||||||
mod tests
|
mod tests
|
||||||
{
|
{
|
||||||
use crate::parse::*;
|
use crate::parse::*;
|
||||||
|
use crate::Term;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_integer()
|
fn parse_integer()
|
||||||
{
|
{
|
||||||
assert_eq!(integer("0"), Ok(("", crate::Term::integer(0))));
|
assert_eq!(integer("0"), Ok(("", Term::integer(0))));
|
||||||
assert_eq!(integer("10000"), Ok(("", crate::Term::integer(10000))));
|
assert_eq!(integer("10000"), Ok(("", Term::integer(10000))));
|
||||||
assert_eq!(integer("+10000"), Ok(("", crate::Term::integer(10000))));
|
assert_eq!(integer("+10000"), Ok(("", Term::integer(10000))));
|
||||||
assert_eq!(integer("-10000"), Ok(("", crate::Term::integer(-10000))));
|
assert_eq!(integer("-10000"), Ok(("", Term::integer(-10000))));
|
||||||
assert_eq!(integer("0 42"), Ok((" 42", crate::Term::integer(0))));
|
assert_eq!(integer("0 42"), Ok((" 42", Term::integer(0))));
|
||||||
assert_eq!(integer("10000 42"), Ok((" 42", crate::Term::integer(10000))));
|
assert_eq!(integer("10000 42"), Ok((" 42", Term::integer(10000))));
|
||||||
assert_eq!(integer("+10000 42"), Ok((" 42", crate::Term::integer(10000))));
|
assert_eq!(integer("+10000 42"), Ok((" 42", Term::integer(10000))));
|
||||||
assert_eq!(integer("-10000 42"), Ok((" 42", crate::Term::integer(-10000))));
|
assert_eq!(integer("-10000 42"), Ok((" 42", Term::integer(-10000))));
|
||||||
assert_eq!(integer("10000("), Ok(("(", crate::Term::integer(10000))));
|
assert_eq!(integer("10000,"), Ok((",", Term::integer(10000))));
|
||||||
assert_eq!(integer("+10000("), Ok(("(", crate::Term::integer(10000))));
|
assert_eq!(integer("+10000,"), Ok((",", Term::integer(10000))));
|
||||||
assert_eq!(integer("-10000("), Ok(("(", crate::Term::integer(-10000))));
|
assert_eq!(integer("-10000,"), Ok((",", Term::integer(-10000))));
|
||||||
assert!(integer("10000a").is_err());
|
assert!(integer("10000a").is_err());
|
||||||
assert!(integer("+10000a").is_err());
|
assert!(integer("+10000a").is_err());
|
||||||
assert!(integer("-10000a").is_err());
|
assert!(integer("-10000a").is_err());
|
||||||
@ -183,12 +201,12 @@ mod tests
|
|||||||
#[test]
|
#[test]
|
||||||
fn parse_special_integer()
|
fn parse_special_integer()
|
||||||
{
|
{
|
||||||
assert_eq!(special_integer("#inf"), Ok(("", crate::Term::infimum())));
|
assert_eq!(special_integer("#inf"), Ok(("", Term::infimum())));
|
||||||
assert_eq!(special_integer("#sup"), Ok(("", crate::Term::supremum())));
|
assert_eq!(special_integer("#sup"), Ok(("", Term::supremum())));
|
||||||
assert_eq!(special_integer("#inf #sup"), Ok((" #sup", crate::Term::infimum())));
|
assert_eq!(special_integer("#inf #sup"), Ok((" #sup", Term::infimum())));
|
||||||
assert_eq!(special_integer("#sup #inf"), Ok((" #inf", crate::Term::supremum())));
|
assert_eq!(special_integer("#sup #inf"), Ok((" #inf", Term::supremum())));
|
||||||
assert_eq!(special_integer("#inf("), Ok(("(", crate::Term::infimum())));
|
assert_eq!(special_integer("#inf,"), Ok((",", Term::infimum())));
|
||||||
assert_eq!(special_integer("#sup("), Ok(("(", crate::Term::supremum())));
|
assert_eq!(special_integer("#sup,"), Ok((",", Term::supremum())));
|
||||||
assert!(special_integer("#inf0").is_err());
|
assert!(special_integer("#inf0").is_err());
|
||||||
assert!(special_integer("#sup0").is_err());
|
assert!(special_integer("#sup0").is_err());
|
||||||
assert!(special_integer("#infimum").is_err());
|
assert!(special_integer("#infimum").is_err());
|
||||||
@ -200,4 +218,30 @@ mod tests
|
|||||||
assert!(special_integer("-10000").is_err());
|
assert!(special_integer("-10000").is_err());
|
||||||
assert!(special_integer(" ").is_err());
|
assert!(special_integer(" ").is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_string()
|
||||||
|
{
|
||||||
|
assert_eq!(string("\"test 123\""), Ok(("", Term::string("test 123".to_string()))));
|
||||||
|
assert_eq!(string("\"123 test\""), Ok(("", Term::string("123 test".to_string()))));
|
||||||
|
assert_eq!(string("\" test 123 \""), Ok(("", Term::string(" test 123 ".to_string()))));
|
||||||
|
assert_eq!(string("\"test 123\" \"rest"), Ok((" \"rest", Term::string("test 123".to_string()))));
|
||||||
|
assert_eq!(string("\"test 123\", \"rest"), Ok((", \"rest", Term::string("test 123".to_string()))));
|
||||||
|
assert_eq!(string("\"test\n123\""), Ok(("", Term::string("test\n123".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\\"123\""), Ok(("", Term::string("test\"123".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\\"123\\\"\""), Ok(("", Term::string("test\"123\"".to_string()))));
|
||||||
|
assert_eq!(string("\"\\\"test 123\\\"\""), Ok(("", Term::string("\"test 123\"".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\\\123\""), Ok(("", Term::string("test\\123".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\\\123\\\\\""), Ok(("", Term::string("test\\123\\".to_string()))));
|
||||||
|
assert_eq!(string("\"\\\\test 123\\\\\""), Ok(("", Term::string("\\test 123\\".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\n123\""), Ok(("", Term::string("test\n123".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\n123\\n\""), Ok(("", Term::string("test\n123\n".to_string()))));
|
||||||
|
assert_eq!(string("\"\\ntest 123\\n\""), Ok(("", Term::string("\ntest 123\n".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\t123\""), Ok(("", Term::string("test\t123".to_string()))));
|
||||||
|
assert_eq!(string("\"test\\t123\\t\""), Ok(("", Term::string("test\t123\t".to_string()))));
|
||||||
|
assert_eq!(string("\"\\ttest 123\\t\""), Ok(("", Term::string("\ttest 123\t".to_string()))));
|
||||||
|
assert_eq!(string("\"test 🙂 123\""), Ok(("", Term::string("test 🙂 123".to_string()))));
|
||||||
|
assert!(string("\"test 123\"a").is_err());
|
||||||
|
assert!(string("\"test\\i123\"").is_err());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user