parser-c 0.2.1

Parses C into an AST.
Documentation
# parser-c

Rust module for parsing C code. Port of Haskell's [language-c](https://github.com/visq/language-c), semi-automatically translated using [Corollary](https://github.com/tcr/corrode-but-in-rust).

**This port is a work in progress.** A lot of work remains to parse anything but very simple C files; while most source code has been translated from Haskell, errors in translation prevent it from matching language-c's functionality yet. Here are the next steps for achieving parity, in order:

1. Building up an equivalent test bed to language-c's, then automatically cross-check
1. Fix errors in the ported code to support those test cases
1. Converting portions of the code into Rust idioms without breaking tests
1. Figure out a porting story for the alex/happy generated parser output

`parser-c` requires nightly. Example usage:

```rust
extern crate parser_c;

use parser_c::parse;

const INPUT: &'static str = r#"

int main() {
    return 0;
}

"#;

fn main() {
    match parse(INPUT, "simple.c") {
        Err(err) => {
            panic!("error: {:?}", err);
        }
        Ok(ast) => {
            println!("success: {:?}", ast);
        }
    }
}
```

Result is:

```
OUT Right(
    CTranslationUnit(
        [
            CFDefExt(
                CFunctionDef(
                    [
                        CTypeSpec(
                            CIntType(
                                NodeInfo(
                                    Position {
                                        posOffset: 0,
                                        posFile: "./tests/simple.c",
                                        posRow: 1,
                                        posColumn: 1
                                    },
                                    (
                                        Position {
                                            posOffset: 0,
                                            posFile: "./tests/simple.c",
                                            posRow: 1,
                                            posColumn: 1
                                        },
                                        3
                                    ),
                                    Name(
                                        1
                                    )
                                )
                            )
                        )
                    ],
                    CDeclarator(
                        Some(
                            Ident(
                                "main",
                                124382170,
                                ...
```

## License

MIT or Apache-2.0, at your option.