pvm 0.1.0

A parsing virtual machine with a focus on expressibility of grammars.
Documentation
extern crate pvm;

use pvm::Machine;


fn execute_test(grammar : &str, subjects : &Vec<&str>, expected : &Vec<bool>) {
    let machine_result = Machine::<String>::new(&grammar);
    assert!(machine_result.is_ok());
    let mut machine = machine_result.ok().unwrap();
    assert!(subjects.len() == expected.len());
    for i in 0..expected.len() {
        let result = machine.execute(subjects[i].to_string().into_bytes());
        let fail = result.is_err();
        println!("{}", subjects[i]);
        println!("{:?}", result);
        assert!(!fail == expected[i]);
    }
}

#[test]
fn simple() {
    let grammar = "
        main { 
            main:1 '+' main:2
            / main:2 '*' main:3
            / 'n'
        }
    ";
    let subjects = vec!["n", "n+n", "n*n", "n+n+n", "n*n*n", "n+n*n", "n*n+n"];
    let expected = vec![true, true, true, true, true, true, true];
    execute_test(grammar, &subjects, &expected);
}