Skip to content

Commit

Permalink
Implement * in build_expr
Browse files Browse the repository at this point in the history
  • Loading branch information
fhahn committed Jul 17, 2013
1 parent cc21859 commit 58b3445
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
5 changes: 5 additions & 0 deletions luna/modules/patterns.py
Expand Up @@ -143,6 +143,7 @@ def find(expr, string, start):
'a': (ord('A'), ord('z'))
}


def build_expr(pattern, plain):
expr = None
seq = False
Expand All @@ -169,6 +170,10 @@ def build_expr(pattern, plain):
else:
assert 0

if i+1 < len(pattern) and pattern[i+1] == '*':
new_expr = Star(new_expr)
i += 1

if seq:
expr = Sequence(expr, new_expr)
else:
Expand Down
31 changes: 31 additions & 0 deletions luna/tests/modules/test_pattern.py
Expand Up @@ -125,3 +125,34 @@ def test_chars_and_special_a_build_expr(self):
def test_escape_percent_build_expr(self):
expr = build_expr('%%', False)
assert expr.eq(Char('%'))

def test_build_expr_pattern_with_star(self):
expr = build_expr('a*', False)
assert expr.eq(Star(Char('a')))

def test_build_expr_pattern_with_star_2(self):
expr = build_expr('a*b*', False)
assert expr.eq(
Sequence(Star(Char('a')), Star(Char('b')))
)

def test_build_expr_pattern_with_star_3(self):
expr = build_expr('a*cb*', False)
assert expr.eq(
Sequence(
Sequence(Star(Char('a')), Char('c')),
Star(Char('b'))
)
)

def test_build_expr_pattern_with_star_4(self):
expr = build_expr('a.*c%a*', False)
assert expr.eq(
Sequence(
Sequence(
Sequence(Char('a'), Star(Dot())),
Char('c')
),
Star(CharRange(ord('A'), ord('z')))
)
)

0 comments on commit 58b3445

Please sign in to comment.