Function parse_from_string

Source
pub fn parse_from_string(source: &str) -> Parser
Expand description

Create a parser from a string. The source name is set to <string>.

Examples found in repository?
examples/book_building_parse_integer_1.rs (line 14)
13fn main() {
14    let mut parser = trivet::parse_from_string("16385");
15    match parse_unsigned_integer(&mut parser) {
16        Ok(value) => println!("{}", value),
17        Err(err) => println!("ERROR: {}", err),
18    }
19}
More examples
Hide additional examples
examples/numbers.rs (line 19)
7pub fn main() {
8    println!("Enter a number to see how Trivet parses it.  Enter a blank line to stop.");
9    let numpar = NumberParser::new();
10    print!("> ");
11    let _ = stdout().flush();
12    for line in stdin().lock().lines() {
13        if line.is_err() {
14            break;
15        }
16        let line = line.unwrap();
17
18        // Consume any whitespace.
19        let mut parser = parse_from_string(&line);
20        parser.consume_ws();
21        if parser.is_at_eof() {
22            break;
23        }
24
25        // Try to read a number as pieces.
26        let parts = numpar.get_parts(parser.borrow_core());
27        println!("{:?}", parts);
28        if parts.is_apparent_float() {
29            let value: f64 = parts.into();
30            println!("f64: {}", value);
31        } else {
32            let value: i128 = parts.into();
33            println!("i128: {}", value);
34        }
35
36        // Go around again.
37        print!("> ");
38        let _ = stdout().flush();
39    }
40}
examples/book_primitives_lua.rs (lines 4-10)
1fn main() {
2    // Text to parse.  Note that the comment ends on line 5 at column 12, with
3    // the first non-comment position at column 13.
4    let mut parser = trivet::parse_from_string(
5        r#"
6        --[[
7            I am a long form
8            Lua comment.
9        --]]"#,
10    );
11    parser.borrow_comment_parser().enable_c = false;
12    parser.borrow_comment_parser().enable_cpp = false;
13    parser.borrow_comment_parser().custom = Box::new(|parser: &mut trivet::ParserCore| -> bool {
14        if parser.peek_and_consume_chars(&['-', '-', '[', '[']) {
15            parser.take_until("--]]");
16            true
17        } else if parser.peek_and_consume_chars(&['-', '-']) {
18            parser.take_while(|ch| ch != '\n');
19            true
20        } else {
21            false
22        }
23    });
24    parser.borrow_comment_parser().enable_custom = true;
25    parser.consume_ws();
26    assert_eq!(parser.loc().to_string(), "<string>:5:13");
27    assert!(parser.is_at_eof());
28}
examples/book_datetime_tester.rs (line 15)
5fn main() {
6    let stdin = io::stdin();
7    for line in stdin.lock().lines() {
8        match line {
9            Err(msg) => {
10                println!("Error: {}", msg);
11                break;
12            }
13            Ok(text) => {
14                // Test what the line contains.
15                let mut parser = parse_from_string(&text);
16                parser.consume_ws();
17                if is_date(&mut parser) {
18                    println!("is_date returns true");
19                }
20                if is_time(&mut parser) {
21                    println!("is_time returns true");
22                }
23                let datetime = parse_date_time(&mut parser);
24                match datetime {
25                    Err(msg) => {
26                        println!("Error: {}", msg);
27                    }
28                    Ok(Some(value)) => {
29                        println!("{}", value);
30                    }
31                    Ok(None) => {
32                        println!("Entry is not a date or time; ignoring.");
33                    }
34                }
35            }
36        }
37    }
38}