@@ -98,9 +98,6 @@ enum WorkingToken<T: MatrixNumber> {
9898 BinaryOp ( char ) ,
9999 LeftBracket ,
100100 RightBracket ,
101- LeftMatrixBracket ,
102- RightMatrixBracket ,
103- Semicolon ,
104101}
105102
106103impl < T : MatrixNumber > Display for WorkingToken < T > {
@@ -112,9 +109,6 @@ impl<T: MatrixNumber> Display for WorkingToken<T> {
112109 WorkingToken :: BinaryOp ( op) => write ! ( f, "binary operator \" {op}\" " ) ,
113110 WorkingToken :: LeftBracket => write ! ( f, "( bracket" ) ,
114111 WorkingToken :: RightBracket => write ! ( f, ") bracket" ) ,
115- WorkingToken :: LeftMatrixBracket => write ! ( f, "[ bracket" ) ,
116- WorkingToken :: RightMatrixBracket => write ! ( f, "] bracket" ) ,
117- WorkingToken :: Semicolon => write ! ( f, "; semicolon" ) ,
118112 }
119113 }
120114}
@@ -344,7 +338,7 @@ pub fn parse_expression<T: MatrixNumber>(
344338 current : & Token ,
345339 ) -> bool {
346340 match current {
347- Token :: Integer ( _) | Token :: Identifier ( _) | Token :: LeftBracket | Token :: LeftMatrixBracket => matches ! (
341+ Token :: Integer ( _) | Token :: Identifier ( _) | Token :: LeftBracket => matches ! (
348342 previous,
349343 None | Some ( WorkingToken :: LeftBracket )
350344 | Some ( WorkingToken :: BinaryOp ( _) )
@@ -357,20 +351,13 @@ pub fn parse_expression<T: MatrixNumber>(
357351 | Some ( WorkingToken :: Type ( _) )
358352 | Some ( WorkingToken :: BinaryOp ( _) )
359353 | Some ( WorkingToken :: LeftBracket )
360- | Some ( WorkingToken :: RightMatrixBracket )
361354 ) ,
362355 Token :: RightBracket => matches ! (
363356 previous,
364357 Some ( WorkingToken :: RightBracket ) | Some ( WorkingToken :: Type ( _) )
365358 ) ,
366- Token :: RightMatrixBracket => matches ! (
367- previous,
368- Some ( WorkingToken :: Type ( _) ) | Some ( WorkingToken :: RightMatrixBracket )
369- ) ,
370- Token :: Semicolon => matches ! (
371- previous,
372- Some ( WorkingToken :: Type ( _) ) | Some ( WorkingToken :: RightMatrixBracket )
373- ) ,
359+ // Matrix tokens should not appear in regular expressions since we handle them at a higher level
360+ Token :: LeftMatrixBracket | Token :: RightMatrixBracket | Token :: Semicolon => false ,
374361 }
375362 }
376363
@@ -952,4 +939,34 @@ mod tests {
952939 Type :: Matrix ( im![ 19 , 22 ; 43 , 50 ] )
953940 ) ;
954941 }
942+
943+ #[ test]
944+ fn test_matrix_syntax_integration_examples ( ) {
945+ let mut env = Environment :: < Rational64 > :: new ( ) ;
946+
947+ // Test matrix examples from the issue description
948+
949+ // Test 1: [1 4; 3 2]
950+ let result1 = parse_expression ( "[1 4; 3 2]" , & env) ;
951+ assert ! ( result1. is_ok( ) ) ;
952+ println ! ( "✅ [1 4; 3 2] = {}" , result1. unwrap( ) . to_string( ) ) ;
953+
954+ // Test 2: [-1/2 5/4 5/2; 1/2 13/17 -9/2]
955+ let result2 = parse_expression ( "[-1/2 5/4 5/2; 1/2 13/17 -9/2]" , & env) ;
956+ assert ! ( result2. is_ok( ) ) ;
957+ println ! ( "✅ [-1/2 5/4 5/2; 1/2 13/17 -9/2] parsed successfully" ) ;
958+
959+ // Test 3: [a -3/2 x] with variables
960+ env. insert ( Identifier :: new ( "a" . to_string ( ) ) . unwrap ( ) , Type :: Scalar ( Rational64 :: new ( 1 , 1 ) ) ) ;
961+ env. insert ( Identifier :: new ( "x" . to_string ( ) ) . unwrap ( ) , Type :: Scalar ( Rational64 :: new ( 2 , 1 ) ) ) ;
962+
963+ let result3 = parse_expression ( "[a -3/2 x]" , & env) ;
964+ assert ! ( result3. is_ok( ) ) ;
965+ println ! ( "✅ [a -3/2 x] = {}" , result3. unwrap( ) . to_string( ) ) ;
966+
967+ // Test 4: Single column matrix
968+ let result4 = parse_expression ( "[1; 2; 3]" , & env) ;
969+ assert ! ( result4. is_ok( ) ) ;
970+ println ! ( "✅ [1; 2; 3] = {}" , result4. unwrap( ) . to_string( ) ) ;
971+ }
955972}
0 commit comments