MCPcopy Create free account
hub / github.com/GraphLite-AI/GraphLite / path_constructor

Function path_constructor

graphlite/src/ast/parser.rs:1995–2042  ·  view source on GitHub ↗

Parse PATH constructor: PATH[expr1, expr2, ...] or PATH + vector

(tokens: &[Token])

Source from the content-addressed store, hash-verified

1993
1994/// Parse PATH constructor: PATH[expr1, expr2, ...] or PATH + vector
1995fn path_constructor(tokens: &[Token]) -> IResult<&[Token], PathConstructor> {
1996 let (tokens, _) = expect_token(Token::Path)(tokens)?;
1997
1998 // Handle case where lexer parsed brackets with numbers as a vector literal
1999 if let Some(Token::Vector(values)) = tokens.first() {
2000 let (tokens, _) = expect_token_variant(&|t| matches!(t, Token::Vector(_)))(tokens)?;
2001
2002 // Convert vector values to literal expressions
2003 let elements = values
2004 .iter()
2005 .map(|&v| Expression::Literal(crate::ast::Literal::Float(v)))
2006 .collect();
2007
2008 return Ok((
2009 tokens,
2010 PathConstructor {
2011 elements,
2012 location: Location::default(),
2013 },
2014 ));
2015 }
2016
2017 let (tokens, _) = expect_token(Token::LeftBracket)(tokens)?;
2018
2019 // Check for empty PATH[]
2020 if matches!(tokens.first(), Some(Token::RightBracket)) {
2021 let (tokens, _) = expect_token(Token::RightBracket)(tokens)?;
2022 return Ok((
2023 tokens,
2024 PathConstructor {
2025 elements: vec![],
2026 location: Location::default(),
2027 },
2028 ));
2029 }
2030
2031 // Parse expressions
2032 let (tokens, elements) = expression_list(tokens)?;
2033 let (tokens, _) = expect_token(Token::RightBracket)(tokens)?;
2034
2035 Ok((
2036 tokens,
2037 PathConstructor {
2038 elements,
2039 location: Location::default(),
2040 },
2041 ))
2042}
2043
2044/// Parse postfix expressions: primary_expr[index] | primary_expr
2045fn postfix_expression(tokens: &[Token]) -> IResult<&[Token], Expression> {

Callers

nothing calls this directly

Calls 6

expect_tokenFunction · 0.85
expect_token_variantFunction · 0.85
LiteralEnum · 0.85
expression_listFunction · 0.85
firstMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected