2个不稳定版本
使用旧的Rust 2015
0.3.0 | 2017年8月2日 |
---|---|
0.1.0 | 2017年7月5日 |
#29 在 #ported
每月21 次下载
在 parser-c 中使用
6KB
101 行
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
git clone https://github.com/tcr/parser-c --init --recursive
对词法分析和解析器进行黑客攻击需要使用构建和运行Haskell依赖项
./regen.sh
测试套件目前正在移植。它在一个单独的crate中,因为它需要一个带有先决条件的构建脚本,因此要运行它,请使用此脚本
./test.sh
许可证
MIT
依赖项
~4MB
~91K SLoC