1 个不稳定版本

使用旧的 Rust 2015

0.2.0 2017年6月21日
0.1.0 2017年6月19日

#10 in #web-idl

MIT 许可证

68KB
1.5K SLoC

webidl-parser

LICENSE Build Status

Rust 中用于 WebIDL 的词法和语法分析器。

示例

词法分析

use webidl_parser::*;

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_parser::*;
use webidl_parser::ast::*;

let result = Parser::parse_string("[Attribute] interface Node { };");

assert_eq!(result,
           Ok(vec![Definition {
                definition_type: DefinitionType::Interface(Interface {
                    members: vec![],
                    name: "Node".to_string(),
                    type_:
                        InterfaceType::NonPartial(None),
                }),
                extended_attributes: vec![
                    Box::new(ExtendedAttribute::Other {
                        other: Other::Identifier("Attribute".to_string()),
                        rest: None,
                    })],
           }]));

依赖项

~1.6–3.5MB
~88K SLoC