5个版本
0.2.1 | 2023年11月18日 |
---|---|
0.2.0 | 2020年6月11日 |
0.1.2 | 2020年5月24日 |
0.1.1 | 2020年4月14日 |
0.1.0 | 2020年3月29日 |
#290 in WebAssembly
在 2 包中使用
325KB
7.5K SLoC
wain-syntax-text
wain-syntax-text
是一个用于解析WebAssembly文本格式文件的crate。
该crate是更大的wain项目的一部分。
安装
[dependencies]
wain-syntax-text = "0"
使用方法
使用 wain_syntax_text::parse()
是最简单的方法。
extern crate wain_syntax_text;
use wain_syntax_text::parse;
let source = "(module
(memory 0 2)
(table 0 1 1 funcref)
(export "_start" (func $_start))
(func $_start)
)";
match parse(source) {
Ok(tree) => { /* `tree` is a parsed syntax tree */ }
Err(err) => eprintln!("Error! {}", err),
}
有关此库解析的语法树结构,请参阅wain-ast crate。
wain_syntax_text::lexer::Lexer
逐行解析文本格式源。
extern crate wain_syntax_text;
use wain_syntax_text::lexer::Lexer;
let source = "(module
(memory 0 2)
(table 0 1 1 funcref)
(export "_start" (func $_start))
(func $_start)
)";
// Lexer implements Iterator which traverses tokens in the given source
let mut lexer = Lexer::new(source);
for lexed in lexer {
let (token, offset) = lexed.unwrap();
// `token` is a lexed token
// `offset` is a byte offset in the source
if let Token::Symbol(sym) = token {
println!("Symbol found: {}", sym);
}
}
为每个逻辑提供了API
- WAT语法树的解析器和词法分析器
- WAT到WASM的转换
- 将多个WASM模块组合成单个WASM模块
可以在examples/api/ 目录中看到工作示例
请阅读文档(尚未提供)以获取详细信息。
实现
- 解析
.wat
文件到WAT语法树,该语法树专门用于解决许多语法糖。由于多个模块可以放在.wat
文件中,因此它可以解析成多个树 - 将WAT语法树转换为通用的Wasm语法树(
wain_ast::Root
),解决标识符。标识符可能引用尚未定义的内容(前向引用),因此.wat
文件不能直接解析成通用的Wasm语法树 - 根据规范将多个Wasm语法树组合成一个单个模块