pub fn parse_tree(parser: &mut Parser<'_>) -> Result<TreeNode, ParseError>
Expand description

Parses into a tree of TreeNode.

Example

use sise::sise_tree;

let data = "(test (1 2 3))";
let mut parser = sise::Parser::new(data);
let root_node = sise::parse_tree(&mut parser).unwrap();
// Do not forget calling `finish` on the parser.
parser.finish().unwrap();
let expected_result = sise_tree!(["test", ["1", "2", "3"]]);
assert_eq!(root_node, expected_result);

It does not consume the parser, so it can also be used to parse a sub-tree:

use sise::sise_tree;

let data = "(head (1 2 3) tail)";
let mut parser = sise::Parser::new(data);

// Parse the head
assert_eq!(parser.next_item().unwrap(), sise::ParsedItem::ListStart(0));
assert_eq!(
    parser.next_item().unwrap(),
    sise::ParsedItem::Atom("head", 1),
);

// Parse the subtree
let root_node = sise::parse_tree(&mut parser).unwrap();
let expected_result = sise_tree!(["1", "2", "3"]);
assert_eq!(root_node, expected_result);

// Parse the tail
assert_eq!(
    parser.next_item().unwrap(),
    sise::ParsedItem::Atom("tail", 14)
);
assert_eq!(parser.next_item().unwrap(), sise::ParsedItem::ListEnd(18));
parser.finish().unwrap();