]> granicus.if.org Git - re2c/commit
Base '*' (zero or more repetitions) on '+' (one or more repetitions).
authorUlya Trofimovich <skvadrik@gmail.com>
Mon, 26 Sep 2016 11:29:27 +0000 (12:29 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Mon, 26 Sep 2016 11:29:27 +0000 (12:29 +0100)
commit30cebcbb3ecbead10dd9f2a379429bf6061559ce
tree30e379d63ddb7c5282a4d338bb600bb3d61e562d
parent4f153f7717bfd8d23852b17f1f92b4f853a5c7be
Base '*' (zero or more repetitions) on '+' (one or more repetitions).

This commit effectively reverts commit 5cf441dc936c16e2264e49038ebe9a108dc750b9
"Base '+' (one or more repetitions) on '*' (zero or more repetitions)."

It turn out, there is a good reason for using '+' as base operation:
'*' can be expressed in terms of '+' as 'r* ::= r+ | <empty>', while
'+' expands as 'r+ ::= r r*' and 'r' is duplicated.

Duplication becomes crucial in presence of tags: if the duplicated
subexpression has tags, then duplication causes an error.
re2c/bootstrap/src/parse/lex.cc
re2c/bootstrap/src/parse/parser.cc
re2c/src/ir/nfa/regexps2nfa.cc
re2c/src/ir/regexp/nullable.cc
re2c/src/ir/regexp/regexp.cc
re2c/src/ir/regexp/regexp.h
re2c/src/parse/parser.ypp
re2c/test/tags/iter_plus.i--tags.c [new file with mode: 0644]
re2c/test/tags/iter_plus.i--tags.re [new file with mode: 0644]