diff options
-rw-r--r-- | awkreg.awk | 35 |
1 files changed, 28 insertions, 7 deletions
@@ -38,6 +38,22 @@ function match_and_eat_else(s, pfx, e) return e } +function eat_digits(s) +{ + match(s, /^[0-9]+/) + if (RLENGTH > 0) + return eat_chars(s, RLENGTH) + return s +} + +function extract_digits(s) +{ + match(s, /^[0-9]+/) + if (RLENGTH > 0) + return substr(s, 1, RLENGTH) + return "" +} + function eat_rchar(c) { if (c ~ /^\\./) @@ -117,16 +133,17 @@ function eat_bracket_exp(e, function eat_rep_notation(n, # local - o) + o, x, y) { o = n n = eat_char(n) - if (n !~ /^[0-9]/) + x = extract_digits(n) + + if (empty(x)) return o - while (n ~ /^[0-9]/) - n = eat_char(n) + n = eat_digits(n) if (matches(n, "}")) return eat_char(n) @@ -139,11 +156,15 @@ function eat_rep_notation(n, if (matches(n, "}")) return eat_char(n) - if (n !~ /^[0-9]/) + y = extract_digits(n) + + if (empty(y)) + return o + + if (x + 0 > y) return o - while (n ~ /^[0-9]/) - n = eat_char(n) + n = eat_digits(n) return match_and_eat_else(n, "}", o) } |