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