Skip to content

A recursive descent parser for basic regular expressions in Rust

Notifications You must be signed in to change notification settings

gsingh93/regex-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Regex Parser

This is a recursive descent parser written in Rust for regular expresssions. Given a regular expression as input, it outputs an AST. It follows this very simple LL(1) grammar:

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

<term> ::= { <factor> }

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

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

Usage

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);

About

A recursive descent parser for basic regular expressions in Rust

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages