#cursor #string #iterator #tokenizer #lexer #no-alloc

no-std simple-cursor

一个针对词法分析器/标记化器的超简单字符光标实现

2个版本

0.1.1 2023年7月13日
0.1.0 2023年7月13日

#258 in 解析工具

MIT/Apache

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]);

无运行时依赖