diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | awkgram.c | 4 | ||||
-rw-r--r-- | awkgram.y | 4 | ||||
-rw-r--r-- | test/ChangeLog | 6 | ||||
-rw-r--r-- | test/Makefile.am | 5 | ||||
-rw-r--r-- | test/Makefile.in | 10 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/regexpbrack2.awk | 2 | ||||
-rw-r--r-- | test/regexpbrack2.in | 2 | ||||
-rw-r--r-- | test/regexpbrack2.ok | 2 |
10 files changed, 39 insertions, 6 deletions
@@ -1,3 +1,8 @@ +2015-04-27 Arnold D. Robbins <arnold@skeeve.com> + + * awkgram.y (yylex): Make change of Jan 7 for parsing regexps + work better. Thanks to Nelson Beebe. + 2015-04-26 Arnold D. Robbins <arnold@skeeve.com> * dfa.c: Sync with grep. @@ -5388,8 +5388,8 @@ yylex(void) pushback(); break; case ']': - if (tok[-1] == '[' - || (tok[-2] == '[' && tok[-1] == '^')) + if ((tok[-1] == '[' && tok[-2] != '\\') + || (tok[-2] == '[' && tok[-3] != '\\' && tok[-1] == '^')) /* do nothing */; else in_brack--; @@ -3049,8 +3049,8 @@ yylex(void) pushback(); break; case ']': - if (tok[-1] == '[' - || (tok[-2] == '[' && tok[-1] == '^')) + if ((tok[-1] == '[' && tok[-2] != '\\') + || (tok[-2] == '[' && tok[-3] != '\\' && tok[-1] == '^')) /* do nothing */; else in_brack--; diff --git a/test/ChangeLog b/test/ChangeLog index 201f8a32..cde85f80 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2015-04-27 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (regexpbrack2): New test. + * regexpbrack2.awk, regexpbrack2.in, regexpbrack2.ok: New files. + Thanks to Nelson Beebe. + 2015-04-14 Arnold D. Robbins <arnold@skeeve.com> * indirectbuiltin.awk: Add another test (gensub 3 args). diff --git a/test/Makefile.am b/test/Makefile.am index e2ccdc56..bf1d073c 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -768,6 +768,9 @@ EXTRA_DIST = \ regexpbrack.awk \ regexpbrack.in \ regexpbrack.ok \ + regexpbrack2.awk \ + regexpbrack2.in \ + regexpbrack2.ok \ regexprange.awk \ regexprange.ok \ reginttrad.awk \ @@ -1026,7 +1029,7 @@ BASIC_TESTS = \ paramdup paramres paramtyp paramuninitglobal parse1 parsefld parseme \ pcntplus posix2008sub prdupval prec printf0 printf1 prmarscl prmreuse \ prt1eval prtoeval \ - rand range1 rebt8b1 redfilnm regeq regexpbrack regexprange regrange reindops \ + rand range1 rebt8b1 redfilnm regeq regexpbrack regexpbrack2 regexprange regrange reindops \ reparse resplit rri1 rs rsnul1nl rsnulbig rsnulbig2 rstest1 rstest2 \ rstest3 rstest4 rstest5 rswhite \ scalar sclforin sclifin sortempty sortglos splitargv splitarr splitdef \ diff --git a/test/Makefile.in b/test/Makefile.in index 6ed035fd..0cd10604 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1025,6 +1025,9 @@ EXTRA_DIST = \ regexpbrack.awk \ regexpbrack.in \ regexpbrack.ok \ + regexpbrack2.awk \ + regexpbrack2.in \ + regexpbrack2.ok \ regexprange.awk \ regexprange.ok \ reginttrad.awk \ @@ -1282,7 +1285,7 @@ BASIC_TESTS = \ paramdup paramres paramtyp paramuninitglobal parse1 parsefld parseme \ pcntplus posix2008sub prdupval prec printf0 printf1 prmarscl prmreuse \ prt1eval prtoeval \ - rand range1 rebt8b1 redfilnm regeq regexpbrack regexprange regrange reindops \ + rand range1 rebt8b1 redfilnm regeq regexpbrack regexpbrack2 regexprange regrange reindops \ reparse resplit rri1 rs rsnul1nl rsnulbig rsnulbig2 rstest1 rstest2 \ rstest3 rstest4 rstest5 rswhite \ scalar sclforin sclifin sortempty sortglos splitargv splitarr splitdef \ @@ -3212,6 +3215,11 @@ regexpbrack: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +regexpbrack2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + regexprange: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 5ee49061..e9c89852 100644 --- a/test/Maketests +++ b/test/Maketests @@ -712,6 +712,11 @@ regexpbrack: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +regexpbrack2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + regexprange: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/regexpbrack2.awk b/test/regexpbrack2.awk new file mode 100644 index 00000000..81424844 --- /dev/null +++ b/test/regexpbrack2.awk @@ -0,0 +1,2 @@ +NR == 1 { gsub(/\\\\[;?!,()<>|+@%\]\[]/, " ") ; print "\"" $0 "\"" } +NR == 2 { gsub(/\\\\[;?!,()<>|+@%\]\[^]/, " ") ; print "\"" $0 "\"" } diff --git a/test/regexpbrack2.in b/test/regexpbrack2.in new file mode 100644 index 00000000..42888dd0 --- /dev/null +++ b/test/regexpbrack2.in @@ -0,0 +1,2 @@ +test: \\; \\? \\! +test: \\; \\? \\! diff --git a/test/regexpbrack2.ok b/test/regexpbrack2.ok new file mode 100644 index 00000000..9c2a2922 --- /dev/null +++ b/test/regexpbrack2.ok @@ -0,0 +1,2 @@ +"test: " +"test: " |