#regex-parser #recursion #regular #descent #expressions #basic

nightly parse-regex

正则表达式递归下降解析器

1 个不稳定版本

使用旧的 Rust 2015

0.0.1 2015年3月14日

#14#descent

MIT 许可证

5KB
109 代码行,不包括注释

正则表达式解析器

这是一个用 Rust 编写的正则表达式递归下降解析器。给定一个正则表达式作为输入,它输出一个 AST。它遵循这个非常简单的 LL(1) 语法

<regex> ::= <term> '|' <regex>
         |  <term>

<term> ::= { <factor> }

<factor> ::= <base> { '*' }

<base> ::= <char>
        |  '(' <regex> ')'

用法

let mut p = RegExParser::new("((a|b*)|a*)|aab".to_string());
let res = Ok(Or(
    Box::new(Sequence(vec![Box::new(Or(
        Box::new(Sequence(
            vec![Box::new(Or(Box::new(Sequence(vec![Box::new(Terminal('a'))])),
                             Box::new(Sequence(
                                 vec![Box::new(Repetition(Box::new(Terminal('b'))))]))))])),
        Box::new(Sequence(vec![Box::new(Repetition(Box::new(Terminal('a'))))]))))])),
    Box::new(Sequence(vec![Box::new(Terminal('a')), Box::new(Terminal('a')),
                           Box::new(Terminal('b'))]))));
assert_eq!(p.parse(), res);

无运行时依赖