From 9357758697305753a68b541b42452a8cb13eebe2 Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Sat, 20 Feb 2021 17:36:16 +0900 Subject: Add + and ? operators * a+ matches 'a' one or more times. This is equivalent to aa*. * a? matches 'a' zero or one time. --- compiler/parser.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'compiler/parser.go') diff --git a/compiler/parser.go b/compiler/parser.go index ede601d..04cd8ad 100644 --- a/compiler/parser.go +++ b/compiler/parser.go @@ -144,10 +144,16 @@ func (p *parser) parseConcat() astNode { func (p *parser) parseRepeat() astNode { group := p.parseGroup() - if !p.consume(tokenKindRepeat) { - return group + if p.consume(tokenKindRepeat) { + return newRepeatNode(group) } - return newRepeatNode(group) + if p.consume(tokenKindRepeatOneOrMore) { + return newRepeatOneOrMoreNode(group) + } + if p.consume(tokenKindOption) { + return newOptionNode(group) + } + return group } func (p *parser) parseGroup() astNode { -- cgit v1.2.3