1 个不稳定版本
使用旧的 Rust 2015
0.0.1 | 2015年3月14日 |
---|
#14 在 #descent
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);