1个不稳定版本
0.0.1 | 2019年10月3日 |
---|
#10 在 #lalrpop
10KB
101 行
关于
zypo-parser
是 zypo-rs
参考编译器的主要解析器实现。本包使用了 LALRPOP 库,这是一个类似 yacc 的 Rust 的 LR(1)
解析器组合器。此包还包含了 Zypo 的 AST(抽象语法树)以及所有公共 AST 结构,枚举和相关函数都在此包的基础级别。
请注意,此包正在积极开发中,并且作为子包与主 Zypo 编译器一起开发。如果您正在寻找基础 zypo-rs
编译器,您可能在这里找到它 [链接].
示例
解析 AST 的快捷方式或在任何给定输入中发生错误时引发恐慌
use zypo_parser::{
Function,
VarType,
Parameter,
ast_result
}; // All but ast_result are from the AST. ast_result is the shortcut func
fn main() {
let input = "fun shortcut_test_func(my_param: int) {}";
let expected = vec![
Function {
ident: "shortcut_test_func".to_string(),
params: vec![
Parameter { ident: "my_param".to_string(), ty: VarType::Int }
],
body: vec![],
return_type: VarType::Void
}
];
assert_eq!(ast_result(input), expected);
}
更可控但更底层的 LALRPOP
绑定,用于手动处理生成的解析错误
use zypo_parser::{
Function,
VarType,
parser
}; // Function and VarType are from the AST, parser is generated by LALRPOP
fn main() {
let input = "fun test_func() {}";
let expected = vec![
Function {
ident: "test_func".to_string(),
params: vec![],
body: vec![],
return_type: VarType::Void
}
];
assert_eq!(parser::GrammarParser::new().parse(input).unwrap(), expected);
}
依赖项
~2.2–4MB
~70K SLoC