algebraeon_geometry/parse/
mod.rs1use crate::partial_simplicial_complex::PartialSimplicialComplex;
2use algebraeon_nzq::RationalCanonicalStructure;
3use lalrpop_util::lalrpop_mod;
4
5lalrpop_mod!(shape_parser, "/parse/shape_grammar.rs");
6mod ast;
7
8pub fn parse_shape(string: &str) -> PartialSimplicialComplex<'static, RationalCanonicalStructure> {
9 shape_parser::ShapeParser::new()
10 .parse(string)
11 .unwrap()
12 .to_partial_simplicial_complex_root()
13}
14
15#[cfg(test)]
16mod tests {
17 use crate::parse::ast::{Point, SignedValue};
18
19 use super::*;
20
21 #[test]
22 fn test() {
23 assert_eq!(
24 shape_parser::PointParser::new()
25 .parse("(6, +7, -8, + 9, - 10)")
26 .unwrap(),
27 Point {
28 coordinates: vec![
29 SignedValue {
30 sign: ast::Sign::Positive,
31 value: String::from("6")
32 },
33 SignedValue {
34 sign: ast::Sign::Positive,
35 value: String::from("7")
36 },
37 SignedValue {
38 sign: ast::Sign::Negative,
39 value: String::from("8")
40 },
41 SignedValue {
42 sign: ast::Sign::Positive,
43 value: String::from("9")
44 },
45 SignedValue {
46 sign: ast::Sign::Negative,
47 value: String::from("10")
48 }
49 ]
50 }
51 );
52
53 assert!(
54 shape_parser::ShapeParser::new()
55 .parse("ConvexHull((),(),)")
56 .is_ok()
57 );
58 assert!(
59 shape_parser::ShapeParser::new()
60 .parse("ConvexHull((),())")
61 .is_ok()
62 );
63 assert!(
64 shape_parser::ShapeParser::new()
65 .parse("ConvexHull((),)")
66 .is_ok()
67 );
68 assert!(
69 shape_parser::ShapeParser::new()
70 .parse("ConvexHull(())")
71 .is_ok()
72 );
73 assert!(
74 shape_parser::ShapeParser::new()
75 .parse("ConvexHull()")
76 .is_ok()
77 );
78 assert!(
79 shape_parser::ShapeParser::new()
80 .parse("ConvexHull() | ConvexHull()")
81 .is_ok()
82 );
83 assert!(
84 shape_parser::ShapeParser::new()
85 .parse("ConvexHull() | ConvexHull() |)")
86 .is_err()
87 );
88 assert!(
89 shape_parser::ShapeParser::new()
90 .parse("ConvexHull() | ConvexHull() | ConvexHull()")
91 .is_ok()
92 );
93 assert!(
94 shape_parser::ShapeParser::new()
95 .parse("ConvexHull() & ConvexHull()")
96 .is_ok()
97 );
98 assert!(
99 shape_parser::ShapeParser::new()
100 .parse("ConvexHull() & ConvexHull() &")
101 .is_err()
102 );
103 assert!(
104 shape_parser::ShapeParser::new()
105 .parse("ConvexHull() & ConvexHull() & ConvexHull()")
106 .is_ok()
107 );
108 assert!(
109 shape_parser::ShapeParser::new()
110 .parse("ConvexHull() | ConvexHull() & ConvexHull()")
111 .is_err()
112 );
113 assert!(
114 shape_parser::ShapeParser::new()
115 .parse("ConvexHull() & ConvexHull() | ConvexHull()")
116 .is_err()
117 );
118 assert!(
119 shape_parser::ShapeParser::new()
120 .parse("ConvexHull() \\ ConvexHull()")
121 .is_ok()
122 );
123 assert!(
124 shape_parser::ShapeParser::new()
125 .parse("ConvexHull() \\ ConvexHull() \\ ConvexHull()")
126 .is_err()
127 );
128 assert!(
129 shape_parser::ShapeParser::new()
130 .parse("ConvexHull() \\ ConvexHull() | ConvexHull()")
131 .is_err()
132 );
133 assert!(
134 shape_parser::ShapeParser::new()
135 .parse("(ConvexHull() \\ ConvexHull()) | ConvexHull()")
136 .is_ok()
137 );
138 assert!(
139 shape_parser::ShapeParser::new()
140 .parse("ConvexHull() \\ ConvexHull() & ConvexHull()")
141 .is_err()
142 );
143 assert!(
144 shape_parser::ShapeParser::new()
145 .parse("(ConvexHull() \\ ConvexHull()) & ConvexHull()")
146 .is_ok()
147 );
148 }
149}