亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Rust實現(xiàn)一個表達式Parser小結

 更新時間:2022年11月18日 15:13:58   作者:EthanTeng  
這篇文章主要為大家介紹了Rust實現(xiàn)一個表達式Parser小結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

src/lib.rs 補上一個函數(shù)和一個 smoke test, 如下

pub use traversal::{eval, format};

pub fn build_ast(expr: &str) -> Result<Node, String> {
    let root = syntax(lex(expr)?)?;
    Ok(root)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn smoke() {
        let expr = "1*2+(3/(4+(-5)))";
        let ast = build_ast(expr).unwrap();

        assert_eq!(-1, eval(&ast));
        assert_eq!("1 * 2 + 3 / (4 + (-5))", format(&ast));
    }
}
復制代碼

lexer

Lexer 模塊主要圍繞 DFA 展開講了很多, 具體實現(xiàn)的時候其實并沒有那么復雜, 主要是需要設計好存儲結構, 并理解清楚狀態(tài)轉移表的含義

parser

Parser 模塊大部分篇幅都在講文法和 Parser Combinator, 最后真正實現(xiàn)的時候反而非常簡單, 這里有兩點需要注意

  • 文法的處理
    • 處理優(yōu)先級
    • 消除左遞歸
  • Parser Combinator 的封裝和設計理念

Parser Combinator 只是一種工具而已, 同類型的還有 Parser Generator, 由于筆者接觸不多, 就不好展開講了

不過這里個人認為, 比起 Parser Combinator 本身, 他的設計理念更值得關注, 尤其是這種相對比較小眾的函數(shù)式編程思維, 個人覺得很有意思

traversal

Traversal 模塊最主要的就是訪問者模式了, 根據(jù)我查到的資料來看, 普通的 AST 基本只有這一種遍歷方式

借助訪問者模式, 將所有的 visitor 單獨抽離進行實現(xiàn), 代碼可讀性和耦合度得到了很大的優(yōu)化, 筆者最開始其實是希望實現(xiàn)一個最最最簡化的表達式解析器, 因此第一版并沒有引入訪問者模式, 而在實現(xiàn)最后的兩個需求時發(fā)現(xiàn)代碼完全耦合在一起實在很惡心, 就干脆加進來了, 反正遍歷 AST 基本逃不掉這個訪問者模式

說在最后

個人感覺很多內容其實都講的有遺漏或者有不規(guī)范的地方, 但是整個編譯領域, 光入門的理論知識就太多太多了, 況且筆者只是自己寫了個玩具, 而且?guī)缀跏莻€純編譯前端的項目, 也不敢說入門了, 因此就權當是學習筆記的分享了

源碼中有大量注釋, 個人感覺結合著看會更加清晰, 可以看一下, 在這里可以看

以上就是Rust實現(xiàn)一個表達式Parser小結的詳細內容,更多關于Rust Parser表達式小結的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Rust中的變量與常量

    詳解Rust中的變量與常量

    大多數(shù)嘗試過 Rust 的人都希望繼續(xù)使用它。但是如果你沒有使用過它,你可能會想——什么是 Rust,如何理解Rust中的變量與常量,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • Rust初體驗:手把手教你構建‘Hello,?World!’

    Rust初體驗:手把手教你構建‘Hello,?World!’

    "準備好了嗎?一起踏上Rust編程語言的精彩旅程!在這篇「Rust初體驗」中,我們將手把手教你構建經(jīng)典程序“Hello,?World!”,感受Rust的強大與安全,短短幾行代碼,就能讓你對這個系統(tǒng)級語言的魅力一探究竟!快加入吧,驚喜等你發(fā)現(xiàn)!"
    2024-01-01
  • Rust中的Vector多值存儲使用方法

    Rust中的Vector多值存儲使用方法

    Vector在Rust中是一個非常靈活和強大的數(shù)據(jù)結構,通過有效利用它,我們可以更加方便地處理和操作多個值,使得代碼更加清晰和易于維護,這篇文章主要介紹了Rust中的Vector多值存儲的利器,需要的朋友可以參考下
    2024-02-02
  • Rust指南之生命周期機制詳解

    Rust指南之生命周期機制詳解

    Rust?生命周期機制是與所有權機制同等重要的資源管理機制,之所以引入這個概念主要是應對復雜類型系統(tǒng)中資源管理的問題,這篇文章主要介紹了Rust指南之生命周期機制詳解,需要的朋友可以參考下
    2022-10-10
  • rust文件讀寫的實現(xiàn)示例

    rust文件讀寫的實現(xiàn)示例

    Rust語言提供了強大的文件讀寫庫,使得開發(fā)者可以更加方便地進行文件操作,并且其安全性可以有效避免文件操作中可能出現(xiàn)的風險,本文就來詳細的介紹了rust文件讀寫的實現(xiàn)示例,感興趣的可以了解一下
    2023-12-12
  • 最新Rust錯誤處理簡介

    最新Rust錯誤處理簡介

    Rust并不像C++一樣使用try?catch的異常機制來進行錯誤處理,他將錯誤分為可恢復錯誤和不可恢復錯誤兩類,主要使用panic!宏和Result<T,E>類型來進行錯誤處理,這篇文章主要介紹了Rust錯誤處理簡介,需要的朋友可以參考下
    2022-11-11
  • Rust 中的文件操作示例詳解

    Rust 中的文件操作示例詳解

    Rust 中的路徑操作是跨平臺的,std::path 模塊提供的了兩個用于描述路徑的類型,本文給大家介紹Rust 中的文件操作示例詳解,感興趣的朋友一起看看吧
    2021-11-11
  • 詳解Rust 生命周期符號使用的方法和規(guī)律

    詳解Rust 生命周期符號使用的方法和規(guī)律

    生命周期是 Rust 中處理引用和所有權的關鍵概念,通過正確使用生命周期符號和遵循相關規(guī)律,你可以編寫出安全、高效的 Rust 代碼,這篇文章主要介紹了Rust 生命周期符號使用的方法和規(guī)律,需要的朋友可以參考下
    2024-03-03
  • Rust處理命令行參數(shù)

    Rust處理命令行參數(shù)

    在Rust中,命令行參數(shù)是程序從命令行接收的輸入,它們?yōu)槌绦蛱峁┝诉\行時配置和數(shù)據(jù)的靈活性,本文就來介紹一下Rust處理命令行參數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Rust 原始指針功能探索

    Rust 原始指針功能探索

    這篇文章主要為大家介紹了Rust 原始指針功能探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論