在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

nuere-簡(jiǎn)單小巧快速的字符串解析庫(kù)

jf_wN0SrCdH ? 來源: Rust語言中文社區(qū) ? 2023-08-14 09:54 ? 次閱讀

neure是一個(gè)簡(jiǎn)單小巧的字符串解析庫(kù), 我在開發(fā)aopt時(shí)為了優(yōu)化編譯時(shí)間而開發(fā)的替代regex的庫(kù). 目前代碼架構(gòu)非常簡(jiǎn)單, 性能上比regex更快, 和nom的速度不相上下. 設(shè)計(jì)上參考了regex.Readme有一個(gè)和regex比較的代碼,可以嘗試一下.

https://github.com/araraloren/neure

補(bǔ)充一個(gè)和nom例子比較的代碼,開啟lto=fat時(shí)性能不相上下

use neure::*;
use nom::{
    bytes::{tag, take_while_m_n},
    combinator::map_res,
    sequence::tuple,
    IResult,
};

#[derive(Debug, PartialEq)]
pub struct Color {
    pub red: u8,
    pub green: u8,
    pub blue: u8,
}

fn from_hex(input: &str) -> Result {
    u8::from_str_radix(input, 16)
}

fn is_hex_digit(c: char) -> bool {
    c.is_digit(16)
}

fn hex_primary(input: &str) -> IResult<&str, u8> {
    map_res(take_while_m_n(2, 2, is_hex_digit), from_hex)(input)
}

fn hex_color(input: &str) -> IResult<&str, Color> {
    let (input, _) = tag("#")(input)?;
    let (input, (red, green, blue)) = tuple((hex_primary, hex_primary, hex_primary))(input)?;

    Ok((input, Color { red, green, blue }))
}

fn main() -> Result<(), Box> {
    let mut storer = SpanStorer::new(1);
    let color_str = "#2F14DF";
    let parser = |storer: &mut SpanStorer, str: &str| -> Result<(), neure::Error> {
        let pound = neure!('#');
        let hex = neure!(['0' - '9' 'A' - 'F']{2});
        let mut ctx = CharsCtx::default().with_str(str);

        ctx.reset();
        ctx.try_mat(£)?;
        ctx.try_cap(0, storer, &hex)?;
        ctx.try_cap(0, storer, &hex)?;
        ctx.try_cap(0, storer, &hex)?;
        Ok(())
    };

    measure(100000, 100000, || {
        if parser(storer.reset(), color_str).is_ok() {
            let mut strs = storer.substrs(color_str, 0).unwrap();
            assert_eq!(
                Color {
                    red: u8::from_str_radix(strs.next().unwrap(), 16).unwrap(),
                    green: u8::from_str_radix(strs.next().unwrap(), 16).unwrap(),
                    blue: u8::from_str_radix(strs.next().unwrap(), 16).unwrap(),
                },
                Color {
                    red: 47,
                    green: 20,
                    blue: 223,
                }
            );
            1
        } else {
            0
        }
    });

    measure(100000, 100000, || {
        if hex_color("#2F14DF").unwrap()
            == (
                "",
                Color {
                    red: 47,
                    green: 20,
                    blue: 223,
                },
            )
        {
            1
        } else {
            0
        }
    });
    Ok(())
}

pub fn measure(n: usize, size: usize, mut f: impl FnMut() -> i32) {
    use std::Instant;

    let start = Instant::now();
    let mut sum = 0;
    for _ in 0..n {
        sum += f();
    }
    let time = start.elapsed();
    println!(
        "Size = {size}, Cost time {} with test {} times: {} --> {}",
        time.as_secs_f64(),
        n,
        time.as_secs_f64() / n as f64,
        sum,
    );
}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    585

    瀏覽量

    20612
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4835

    瀏覽量

    69117
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    662

    瀏覽量

    33066
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    474

    瀏覽量

    16613

原文標(biāo)題:【大家的項(xiàng)目】nuere - 簡(jiǎn)單小巧快速的字符串解析庫(kù)

文章出處:【微信號(hào):Rust語言中文社區(qū),微信公眾號(hào):Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    字符串移位包含的問題解決方案

    問題:給定字符串s和t,判斷是否字符串t能通過將s移位后的字符串所包含。 方法一 最簡(jiǎn)單的方法就是將s進(jìn)行循環(huán)移位,再判斷移位后的字符串是否
    發(fā)表于 11-29 10:05 ?1071次閱讀

    什么是復(fù)制字符串?Python如何復(fù)制字符串

    連續(xù)幾篇文章都在寫 Python 字符串,這出乎我的意料了。但是,有的問題,不寫不行,特別是那種靈機(jī)一動(dòng)想到的問題,最后你發(fā)現(xiàn),很多人根本不懂卻又誤以為自己懂了。那就繼續(xù)刨根問底,探究個(gè)明白吧
    發(fā)表于 11-25 10:32 ?3060次閱讀

    strtok拆分字符串

    就是字符格式。有些場(chǎng)景需要使用多個(gè)處理器協(xié)同工作,比如單片機(jī)+openmv,它們之間需要通信,可以采用字符格式的編碼方式。操作字符串,無非是兩件事兒:生成字符串
    發(fā)表于 01-13 15:46 ?8次下載
    strtok拆分<b class='flag-5'>字符串</b>

    字符串操作

    labview字符串操作
    發(fā)表于 06-28 15:09 ?2次下載

    C語言總結(jié)_字符串全方位練習(xí)

    C語言字符串全方位練習(xí),涉及知識(shí)點(diǎn):字符串解析、大小寫判斷、字符串插入、字符串刪除、字符串排序、
    的頭像 發(fā)表于 08-14 09:41 ?1569次閱讀

    關(guān)于STEP7庫(kù)功能字符串轉(zhuǎn)換

    庫(kù)libraries---Standard Libray---TI-S7 Converting Blocks) FC編號(hào) 功能名稱 描述 FC5 DI_STRING 雙整數(shù)轉(zhuǎn)字符串 FC16
    的頭像 發(fā)表于 10-10 10:50 ?4371次閱讀

    鏈?zhǔn)酱鎯?chǔ)字符串簡(jiǎn)單實(shí)現(xiàn)

    除了順序,還有鏈,所謂鏈,就是鏈?zhǔn)酱鎯?chǔ)的字符串
    的頭像 發(fā)表于 01-18 10:51 ?1334次閱讀
    鏈?zhǔn)酱鎯?chǔ)<b class='flag-5'>字符串</b>的<b class='flag-5'>簡(jiǎn)單</b>實(shí)現(xiàn)

    python字符串有哪些特定方法

    python字符串序列操作也適用于列表和元組。 python字符串還有獨(dú)有方法,即字符串對(duì)象的函數(shù),其他對(duì)象不可調(diào)用,只有字符串對(duì)象可調(diào)用。
    的頭像 發(fā)表于 02-23 15:02 ?768次閱讀

    字符串的相關(guān)知識(shí)

    TCL 中的數(shù)據(jù)類型只有一種:字符串。這些字符串可以是字母、數(shù)字、布爾值、標(biāo)點(diǎn)符號(hào)等特殊字符的組合。在某些特殊命令的作用下,字符串可以向其他數(shù)據(jù)類型轉(zhuǎn)換。下面將系統(tǒng)的講解或回顧下
    的頭像 發(fā)表于 03-29 11:41 ?1196次閱讀

    mysql字符串包含某個(gè)字符串

    MySQL是一種開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),被廣泛用于構(gòu)建Web應(yīng)用程序和其他大型數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用。在進(jìn)行MySQL數(shù)據(jù)庫(kù)查詢時(shí),經(jīng)常需要使用字符串包含操作,即判斷一個(gè)字符串是否包含另一
    的頭像 發(fā)表于 11-16 14:52 ?3946次閱讀

    MySQL替換字符串函數(shù)REPLACE

    MySQL是目前非常流行的開源數(shù)據(jù)庫(kù)管理系統(tǒng)之一,它具有強(qiáng)大的功能和性能。其中之一的字符串函數(shù)REPLACE,可以用于替換字符串中的指定字符字符串
    的頭像 發(fā)表于 11-30 10:44 ?1658次閱讀

    oracle判斷字符串包含某個(gè)字符

    字符串操作是任何編程語言中都非常重要的一部分,Oracle數(shù)據(jù)庫(kù)作為目前最常用的關(guān)系型數(shù)據(jù)庫(kù)之一,也提供了豐富的字符串操作函數(shù)和方法。在本文中,我們將詳細(xì)
    的頭像 發(fā)表于 12-06 09:53 ?1.6w次閱讀

    oracle字符串split成多個(gè)

    Oracle是一種廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它提供了許多強(qiáng)大的功能和函數(shù),用于處理和操作數(shù)據(jù)。其中之一就是字符串分割(split)方法,該方法用于將一個(gè)字符串按照指定的分隔符分割成多個(gè)子
    的頭像 發(fā)表于 12-06 09:54 ?5472次閱讀

    字符串字符數(shù)組的區(qū)別

    大多數(shù)編程語言中是一個(gè)高級(jí)數(shù)據(jù)結(jié)構(gòu),通常由語言的運(yùn)行時(shí)環(huán)境直接支持。字符串通常以連續(xù)的字符序列存儲(chǔ),但它們不僅僅是字符簡(jiǎn)單集合。字符串對(duì)象
    的頭像 發(fā)表于 01-07 15:29 ?309次閱讀

    字符串在數(shù)據(jù)庫(kù)中的存儲(chǔ)方式

    數(shù)據(jù)庫(kù)是現(xiàn)代信息技術(shù)中存儲(chǔ)和管理數(shù)據(jù)的核心組件。字符串作為最常見的數(shù)據(jù)類型之一,在數(shù)據(jù)庫(kù)中的存儲(chǔ)方式對(duì)其性能和可擴(kuò)展性有著重要影響。 數(shù)據(jù)類型 固定長(zhǎng)度字符串 :如CHAR類型,它為每
    的頭像 發(fā)表于 01-07 15:41 ?212次閱讀
    主站蜘蛛池模板: 人人干狠狠干 | 日韩性xxx | 日本在线一本 | 免费的毛片| 永久黄网站色视频免费观看 | av 狼| 人人精品| a一级| 久久精品国产夜色 | 色女人天堂 | 在线视频黄 | 5252色欧美在线激情 | 精品在线一区二区三区 | 黄色网址播放 | 成人a毛片手机免费播放 | 亚洲成人免费网站 | 国产成人在线网址 | 欧美大香a蕉免费 | 亚洲一本高清 | 日韩有码电影 | 天天插在线视频 | 又潮又黄的叫床视频 | 青青久操视频 | 麦克斯奥特曼免费观看 | 国产精品视频第一区二区三区 | 中文日产国产精品久久 | 日韩一二三级 | 正在播放一区二区 | 久久国内精品视频 | 久热国产精品 | 美女黄18| 女生张开腿让男人桶 | 免费人成黄页在线观看1024 | 免费鲁丝片一级观看 | 米奇色影院 | 最近最新中文字幕在线第一页 | 啊用力太猛了啊好深视频免费 | 日韩欧美卡一卡二卡新区 | 欧美亚洲韩国国产综合五月天 | www四虎影院 | 人与牲动交xxxxbbbb |