parseid 0.1.0

Parser for Asmodeus language with AST generation
Documentation
use parseid::{parse_source, ast::*};

#[test]
fn test_macro_definition() {
    let program = parse_source(r#"
        MAKRO add_numbers param1 param2
            DOD param1
            DOD param2
        KONM
    "#).unwrap();
    
    assert_eq!(program.elements.len(), 1);
    
    if let ProgramElement::MacroDefinition(macro_def) = &program.elements[0] {
        assert_eq!(macro_def.name, "add_numbers");
        assert_eq!(macro_def.parameters, vec!["param1", "param2"]);
        assert_eq!(macro_def.body.len(), 2);
    } else {
        panic!("Expected macro definition");
    }
}

#[test]
fn test_macro_call() {
    let program = parse_source("add_numbers 10 20").unwrap();
    assert_eq!(program.elements.len(), 1);
    
    if let ProgramElement::MacroCall(macro_call) = &program.elements[0] {
        assert_eq!(macro_call.name, "add_numbers");
        assert_eq!(macro_call.arguments, vec!["10", "20"]);
    } else {
        panic!("Expected macro call");
    }
}