Parsing 如何在不使用过程宏的情况下解析Rust代码?
我正在编写一个分析器,它需要一个抽象语法树(AST)或控制流图(CFG)的锈迹代码。如果不自己实现解析器,我似乎不可能做到这一点 我注意到一些板条箱,如Parsing 如何在不使用过程宏的情况下解析Rust代码?,parsing,rust,Parsing,Rust,我正在编写一个分析器,它需要一个抽象语法树(AST)或控制流图(CFG)的锈迹代码。如果不自己实现解析器,我似乎不可能做到这一点 我注意到一些板条箱,如syn和quote,但如果不使用过程宏并创建完全不必要的项目结构,它们就无法工作。我发现有一个名为syntex\u syntax的板条箱可以满足我的要求,但是当给出一些语法更新的代码时,它不再被维护,并且会感到恐慌 有没有直接解析Rust代码的方法:从任意外部*.rs文件中读取并使用syn或quote对其进行解析,就像syntex\u synta
syn
和quote
,但如果不使用过程宏并创建完全不必要的项目结构,它们就无法工作。我发现有一个名为syntex\u syntax
的板条箱可以满足我的要求,但是当给出一些语法更新的代码时,它不再被维护,并且会感到恐慌
有没有直接解析Rust代码的方法:从任意外部*.rs文件中读取并使用
syn
或quote
对其进行解析,就像syntex\u syntax
所做的那样?syn
是一个Rust解析器,它不仅适用于过程宏。看一看。您将在那里找到这些函数(自syn 0.15起):
:这是您将在过程宏中使用的内容fn parse(tokens:proc_macro::TokenStream)->Result
:相同,但使用fn parse2(令牌:proc_macro2::TokenStream)->结果
板条箱中的proc_macro2
TokenStream
:从简单字符串解析。不需要fn parse_str(s:&str)->结果
sTokenStream
:与fn parse_文件(内容:&str)->结果
非常相似,但有一些方便的区别。看parse_str
parse_str
或parse_file
从过程宏外部解析锈迹代码。
还有几点需要注意:
- 在您的案例中不需要使用
报价。此板条箱仅用于轻松创建
s;解析时不需要它TokenStream
- 如果您只是对解析令牌感兴趣,那么也可以在过程宏之外使用
李>proc_macro2
确实已被弃用,不应再使用。一想到它是如何使用的,我就不寒而栗:Psyntex\u语法