wain-syntax-text
is a crate to parse WebAssembly text format files.
This crate is part of larger wain project.
toml
[dependencies]
wain-syntax-text = "0"
Using wain_syntax_text::parse()
is the easiest way.
```rust extern crate wainsyntaxtext;
use wainsyntaxtext::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),
}
```
For the syntax tree structure parsed by this library, please see wain-ast crate.
wain_syntax_text::lexer::Lexer
lexes a text format source.
```rust extern crate wainsyntaxtext;
use wainsyntaxtext::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);
}
}
```
APIs are provided for each logic:
Working examples can be seen at examples/api/ directory
Please read documentation (not yet) for details.
.wat
file into WAT sytnax tree which is dedicated for text format resolving many
syntax sugars. Since multiple modules can be put in .wat
file, it can be parsed into multiple treeswain_ast::Root
) resolving identifiers.
Identifiers may refer things not defined yet (forward references) so .wat
file cannot be parsed
into common Wasm syntax trees directly