4 个版本 (2 个破坏性更新)
使用旧的 Rust 2015
0.3.0 | 2017 年 8 月 2 日 |
---|---|
0.2.1 | 2017 年 7 月 5 日 |
0.2.0 | 2017 年 7 月 5 日 |
0.0.1 | 2017 年 6 月 6 日 |
#2366 in Rust 模式
每月 23 次下载
4MB
134K SLoC
包含 (模糊的 autoconf 代码, 1KB) deps/happy-rust/doc/configure.ac, (模糊的 autoconf 代码, 1KB) deps/alex-rust/doc/configure.ac
parser-c
Rust 模块用于解析 C 代码。Haskell 的 language-c 的移植,使用 Corollary 半自动翻译。
此移植正在进行中。 解析除非常简单的 C 文件之外的所有文件都需要大量工作;虽然大部分源代码已从 Haskell 翻译过来,但翻译错误阻止了它与 language-c 的功能相匹配。以下是实现等价的下一步步骤,按顺序
- 构建与 language-c 相当的测试平台,然后自动交叉检查
- 修复移植代码中的错误以支持这些测试用例
- 在不破坏测试的情况下将代码的部分转换为 Rust 习惯用法
- 确定对 alex/happy 生成的解析器输出的移植方案
parser-c
需要 nightly(目前如此)。查看 tests/
中的某些工作示例,或尝试此示例
extern crate parser_c;
use parser_c::parse;
const INPUT: &'static str = r#"
int main() {
printf("hello world!\n");
return 0;
}
"#;
fn main() {
match parse(INPUT, "simple.c") {
Err(err) => {
panic!("error: {:?}", err);
}
Ok(ast) => {
println!("success: {:#?}", ast);
}
}
}
结果是
success: Right(
CTranslationUnit(
[
CFDefExt(
CFunctionDef(
[
CTypeSpec(
CIntType(
..
)
)
],
CDeclarator(
Some(
Ident(
"main",
124382170,
..
)
),
...
开发
克隆此crate并安装其 Haskell 依赖项
git clone https://github.com/tcr/parser-c --init --recursive
stack install alex happy
许可证
MIT
依赖项
~5.5MB
~127K SLoC