2个版本
0.1.1 | 2023年7月13日 |
---|---|
0.1.0 | 2023年7月13日 |
#258 in 解析工具
11KB
111 行
simple-cursor
一个超简单的与#[no_std]
兼容的字符光标实现,旨在用于词法分析器/标记化器。实现灵感来源于在rustc
中使用的实现,应该足够高效以处理几乎所有你能扔给它的东西。
基本用法
以下示例展示了simple_cursor
的基本功能。有关更多信息,请参阅Cursor
文档。
use simple_cursor::Cursor;
// Create the input string and the cursor.
let input = "123 foobar竜<!>";
let mut cursor = Cursor::new(input);
// "123"
let number_start = cursor.byte_pos();
cursor.skip_while(|c| c.is_ascii_digit());
let number_end = cursor.byte_pos();
// Some(' ')
let whitespace = cursor.bump();
// "foobar"
let ident_start = cursor.byte_pos();
cursor.skip_while(|c| c.is_ascii_alphabetic());
let ident_end = cursor.byte_pos();
// "竜<!>"
let rest_start = ident_end;
let rest_end = input.len();
assert_eq!("123", &input[number_start..number_end]);
assert_eq!(Some(' '), whitespace);
assert_eq!("foobar", &input[ident_start..ident_end]);
assert_eq!("竜<!>", &input[rest_start..rest_end]);