webidl-rs
A lexer and parser for WebIDL in Rust.
Example
Lexing
use *;
let lexer = new;
assert_eq!;
Parsing
use *;
use *;
let result = parse_string;
assert_eq!;
A lexer and parser for WebIDL in Rust.
use webidl::*;
let lexer = Lexer::new("/* Example taken from emscripten site */\n\
enum EnumClass_EnumWithinClass {\n\
\"EnumClass::e_val\"\n\
};");
assert_eq!(lexer.collect::<Vec<_>>(),
vec![Ok((41, Token::Enum, 45)),
Ok((46, Token::Identifier("EnumClass_EnumWithinClass".to_string()), 71)),
Ok((72, Token::LeftBrace, 73)),
Ok((74, Token::StringLiteral("EnumClass::e_val".to_string()), 92)),
Ok((93, Token::RightBrace, 94)),
Ok((94, Token::Semicolon, 95))]);
use webidl::*;
use webidl::ast::*;
let result = Parser::parse_string("[Attribute] interface Node { };");
assert_eq!(result,
Ok(vec![Definition::Interface(Interface::NonPartial(NonPartialInterface {
extended_attributes: vec![
Box::new(ExtendedAttribute::NoArguments(
Other::Identifier("Attribute".to_string())))],
inherits: None,
members: vec![],
name: "Node".to_string()
}))]));