android_bp 0.3.1

Android.bp parser
Documentation
## android-bp

a rust crate to parse Android.bp files

### Usage

```rust
    use android_bp::BluePrint;

    let bp = BluePrint::from_file("fixtures/example.bp").unwrap();
    println!("{:#?}", bp);

    // variables are accessible as a rust HashMap
    println!("{:#?}", bp.variables);
    for m in &bp.modules {
        if m.typ == "rust_binary" {
            println!("{:?}", m.get("name").unwrap());
        }
    }
    // or iter them by type
    for m in bp.modules_by_type("rust_host_test") {
        // m.get return an sometime inconvenient Option<&Value>
        // so some helper methods are provided
        let name = m.get_string("name").unwrap();
        let srcs = m.get_array("srcs").unwrap();
        println!("{:?} {:?}", name, srcs);
    }
```

### Status

- [x] The project parses successfully all the Android.bp files in the AOSP tree.
      Test files are present in the src/test_db.tar.xz archive.

- [x] different possible values are abstracted in the `Value` enum
    - [x] strings
    - [x] arrays
    - [x] integers
    - [x] booleans
    - [x] expressions
    - [x] functions
    - [x] identifiers

- [x] modules (`module { ... }`)

- [x] variables (`var = "value"`)

- [x] variables extend (`var += [ "new value" ]`)
    - [x] arrays
    - [x] strings
    - [x] integers
    - [ ] expressions with other variables

- [x] expressions (`var : "value" + \n"value"`), used for strings long enough to be split in multiple lines
    - [x] arrays (automatically merged)
    - [x] strings (automatically merged)
    - [x] with identifiers (kept as an expression)