4 releases (2 breaking)
Uses old Rust 2015
0.3.0 | Aug 2, 2017 |
---|---|
0.2.1 | Jul 5, 2017 |
0.2.0 | Jul 5, 2017 |
0.0.1 | Jun 6, 2017 |
#2366 in Rust patterns
23 downloads per month
4MB
134K
SLoC
Contains (obscure autoconf code, 1KB) deps/happy-rust/doc/configure.ac, (obscure autoconf code, 1KB) deps/alex-rust/doc/configure.ac
parser-c
Rust module for parsing C code. Port of Haskell's language-c, semi-automatically translated using Corollary.
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:
- Building up an equivalent test bed to language-c's, then automatically cross-check
- Fix errors in the ported code to support those test cases
- Converting portions of the code into Rust idioms without breaking tests
- Figure out a porting story for the alex/happy generated parser output
parser-c
requires nightly (for now). See tests/
for some working examples, or try this example:
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);
}
}
}
Result is:
success: Right(
CTranslationUnit(
[
CFDefExt(
CFunctionDef(
[
CTypeSpec(
CIntType(
..
)
)
],
CDeclarator(
Some(
Ident(
"main",
124382170,
..
)
),
...
Development
Clone this crate and install its Haskell dependencies:
git clone https://github.com/tcr/parser-c --init --recursive
stack install alex happy
License
MIT
Dependencies
~5.5MB
~127K SLoC