diff options
-rw-r--r-- | doc/ChangeLog | 5 | ||||
-rw-r--r-- | doc/gawk.info | 1104 | ||||
-rw-r--r-- | doc/gawk.texi | 24 | ||||
-rw-r--r-- | doc/gawktexi.in | 24 |
4 files changed, 610 insertions, 547 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog index f77fc00a..6505bc07 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2021-09-09 Arnold D. Robbins <arnold@skeeve.com> + + * gawktexi.in (Interval Expressions): Add some notes borrowed from + Paul Eggert in the grep documentation. + 2021-08-26 Arnold D. Robbins <arnold@skeeve.com> * gawktexi.in (Strong Regexp Constants): Document behavior diff --git a/doc/gawk.info b/doc/gawk.info index b7a050df..94ebf260 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -3977,17 +3977,33 @@ practice to always escape them with a backslash. Then the regexp constants are valid and work the way you want them to, using any version of 'awk'.(1) - Finally, when '{' and '}' appear in regexp constants in a way that -cannot be interpreted as an interval expression (such as '/q{a}/'), then -they stand for themselves. + When '{' and '}' appear in regexp constants in a way that cannot be +interpreted as an interval expression (such as '/q{a}/'), then they +stand for themselves. As mentioned, interval expressions were not traditionally available in 'awk'. In March of 2019, BWK 'awk' (finally) acquired them. - - Nonetheless, because they were not available for so many decades, -'gawk' continues to not supply them when in compatibility mode (*note +Nonetheless, because they were not available for so many decades, 'gawk' +continues to not supply them when in compatibility mode (*note Options::). + POSIX says that interval expressions containing repetition counts +greater than 255 produce unspecified results. + + In the manual for GNU 'grep', Paul Eggert notes the following: + + Interval expressions may be implemented internally via repetition. + For example, '^(a|bc){2,4}$' might be implemented as + '^(a|bc)(a|bc)((a|bc)(a|bc)?)?$'. A large repetition count may + exhaust memory or greatly slow matching. Even small counts can + cause problems if cascaded; for example, 'grep -E + ".*{10,}{10,}{10,}{10,}{10,}"' is likely to overflow a stack. + Fortunately, regular expressions like these are typically + artificial, and cascaded repetitions do not conform to POSIX so + cannot be used in portable programs anyway. + +This same caveat applies to 'gawk'. + ---------- Footnotes ---------- (1) Use two backslashes if you're using a string constant with a @@ -36221,6 +36237,8 @@ Index * EBCDIC <2>: History summary. (line 20) * effective group ID of gawk user: Auto-set. (line 172) * effective user ID of gawk user: Auto-set. (line 180) +* Eggert, Paul: Interval Expressions. + (line 36) * egrep utility: Bracket Expressions. (line 34) * egrep utility <1>: Egrep Program. (line 6) * egrep.awk program: Egrep Program. (line 76) @@ -38447,543 +38465,543 @@ Node: Regexp Operators173918 Node: Regexp Operator Details174403 Ref: Regexp Operator Details-Footnote-1181767 Node: Interval Expressions181914 -Ref: Interval Expressions-Footnote-1183335 -Node: Bracket Expressions183433 -Ref: table-char-classes185909 -Node: Leftmost Longest189235 -Node: Computed Regexps190538 -Node: GNU Regexp Operators193965 -Node: Case-sensitivity197702 -Ref: Case-sensitivity-Footnote-1200568 -Ref: Case-sensitivity-Footnote-2200803 -Node: Regexp Summary200911 -Node: Reading Files202377 -Node: Records204646 -Node: awk split records205721 -Node: gawk split records210421 -Ref: gawk split records-Footnote-1215495 -Node: Fields215532 -Node: Nonconstant Fields218273 -Ref: Nonconstant Fields-Footnote-1220509 -Node: Changing Fields220713 -Node: Field Separators226744 -Node: Default Field Splitting229442 -Node: Regexp Field Splitting230560 -Node: Single Character Fields234237 -Node: Command Line Field Separator235297 -Node: Full Line Fields238515 -Ref: Full Line Fields-Footnote-1240037 -Ref: Full Line Fields-Footnote-2240083 -Node: Field Splitting Summary240184 -Node: Constant Size242258 -Node: Fixed width data242990 -Node: Skipping intervening246457 -Node: Allowing trailing data247255 -Node: Fields with fixed data248292 -Node: Splitting By Content249810 -Ref: Splitting By Content-Footnote-1253593 -Node: More CSV253756 -Node: Testing field creation255348 -Node: Multiple Line256973 -Node: Getline263250 -Node: Plain Getline265719 -Node: Getline/Variable268292 -Node: Getline/File269443 -Node: Getline/Variable/File270831 -Ref: Getline/Variable/File-Footnote-1272436 -Node: Getline/Pipe272524 -Node: Getline/Variable/Pipe275228 -Node: Getline/Coprocess276363 -Node: Getline/Variable/Coprocess277630 -Node: Getline Notes278372 -Node: Getline Summary281169 -Ref: table-getline-variants281593 -Node: Read Timeout282341 -Ref: Read Timeout-Footnote-1286247 -Node: Retrying Input286305 -Node: Command-line directories287504 -Node: Input Summary288410 -Node: Input Exercises291582 -Node: Printing292016 -Node: Print293850 -Node: Print Examples295307 -Node: Output Separators298087 -Node: OFMT300104 -Node: Printf301460 -Node: Basic Printf302245 -Node: Control Letters303819 -Node: Format Modifiers308983 -Node: Printf Examples314998 -Node: Redirection317484 -Node: Special FD324325 -Ref: Special FD-Footnote-1327493 -Node: Special Files327567 -Node: Other Inherited Files328184 -Node: Special Network329185 -Node: Special Caveats330045 -Node: Close Files And Pipes330994 -Ref: table-close-pipe-return-values337901 -Ref: Close Files And Pipes-Footnote-1338714 -Ref: Close Files And Pipes-Footnote-2338862 -Node: Nonfatal339014 -Node: Output Summary341352 -Node: Output Exercises342574 -Node: Expressions343253 -Node: Values344441 -Node: Constants345119 -Node: Scalar Constants345810 -Ref: Scalar Constants-Footnote-1348320 -Node: Nondecimal-numbers348570 -Node: Regexp Constants351571 -Node: Using Constant Regexps352097 -Node: Standard Regexp Constants352719 -Node: Strong Regexp Constants355907 -Node: Variables359331 -Node: Using Variables359988 -Node: Assignment Options361898 -Node: Conversion364369 -Node: Strings And Numbers364893 -Ref: Strings And Numbers-Footnote-1367956 -Node: Locale influences conversions368065 -Ref: table-locale-affects370823 -Node: All Operators371441 -Node: Arithmetic Ops372070 -Node: Concatenation374786 -Ref: Concatenation-Footnote-1377633 -Node: Assignment Ops377740 -Ref: table-assign-ops382731 -Node: Increment Ops384044 -Node: Truth Values and Conditions387504 -Node: Truth Values388578 -Node: Typing and Comparison389626 -Node: Variable Typing390446 -Ref: Variable Typing-Footnote-1396909 -Ref: Variable Typing-Footnote-2396981 -Node: Comparison Operators397058 -Ref: table-relational-ops397477 -Node: POSIX String Comparison400972 -Ref: POSIX String Comparison-Footnote-1402667 -Ref: POSIX String Comparison-Footnote-2402806 -Node: Boolean Ops402890 -Ref: Boolean Ops-Footnote-1407372 -Node: Conditional Exp407464 -Node: Function Calls409200 -Node: Precedence413077 -Node: Locales416736 -Node: Expressions Summary418368 -Node: Patterns and Actions420941 -Node: Pattern Overview422061 -Node: Regexp Patterns423738 -Node: Expression Patterns424280 -Node: Ranges428061 -Node: BEGIN/END431169 -Node: Using BEGIN/END431930 -Ref: Using BEGIN/END-Footnote-1434684 -Node: I/O And BEGIN/END434790 -Node: BEGINFILE/ENDFILE437103 -Node: Empty440334 -Node: Using Shell Variables440651 -Node: Action Overview442925 -Node: Statements445250 -Node: If Statement447098 -Node: While Statement448593 -Node: Do Statement450621 -Node: For Statement451769 -Node: Switch Statement454940 -Node: Break Statement457381 -Node: Continue Statement459473 -Node: Next Statement461300 -Node: Nextfile Statement463683 -Node: Exit Statement466372 -Node: Built-in Variables468775 -Node: User-modified469908 -Node: Auto-set477675 -Ref: Auto-set-Footnote-1494482 -Ref: Auto-set-Footnote-2494688 -Node: ARGC and ARGV494744 -Node: Pattern Action Summary498957 -Node: Arrays501387 -Node: Array Basics502716 -Node: Array Intro503560 -Ref: figure-array-elements505535 -Ref: Array Intro-Footnote-1508239 -Node: Reference to Elements508367 -Node: Assigning Elements510831 -Node: Array Example511322 -Node: Scanning an Array513081 -Node: Controlling Scanning516103 -Ref: Controlling Scanning-Footnote-1522559 -Node: Numeric Array Subscripts522875 -Node: Uninitialized Subscripts525059 -Node: Delete526678 -Ref: Delete-Footnote-1529430 -Node: Multidimensional529487 -Node: Multiscanning532582 -Node: Arrays of Arrays534173 -Node: Arrays Summary538941 -Node: Functions541034 -Node: Built-in542072 -Node: Calling Built-in543153 -Node: Numeric Functions545149 -Ref: Numeric Functions-Footnote-1549177 -Ref: Numeric Functions-Footnote-2549825 -Ref: Numeric Functions-Footnote-3549873 -Node: String Functions550145 -Ref: String Functions-Footnote-1574660 -Ref: String Functions-Footnote-2574788 -Ref: String Functions-Footnote-3575036 -Node: Gory Details575123 -Ref: table-sub-escapes576914 -Ref: table-sub-proposed578433 -Ref: table-posix-sub579796 -Ref: table-gensub-escapes581337 -Ref: Gory Details-Footnote-1582160 -Node: I/O Functions582314 -Ref: table-system-return-values588768 -Ref: I/O Functions-Footnote-1590848 -Ref: I/O Functions-Footnote-2590996 -Node: Time Functions591116 -Ref: Time Functions-Footnote-1601787 -Ref: Time Functions-Footnote-2601855 -Ref: Time Functions-Footnote-3602013 -Ref: Time Functions-Footnote-4602124 -Ref: Time Functions-Footnote-5602236 -Ref: Time Functions-Footnote-6602463 -Node: Bitwise Functions602729 -Ref: table-bitwise-ops603323 -Ref: Bitwise Functions-Footnote-1609386 -Ref: Bitwise Functions-Footnote-2609559 -Node: Type Functions609750 -Node: I18N Functions612613 -Node: User-defined614264 -Node: Definition Syntax615076 -Ref: Definition Syntax-Footnote-1620770 -Node: Function Example620841 -Ref: Function Example-Footnote-1623763 -Node: Function Calling623785 -Node: Calling A Function624373 -Node: Variable Scope625331 -Node: Pass By Value/Reference628325 -Node: Function Caveats630969 -Ref: Function Caveats-Footnote-1633016 -Node: Return Statement633136 -Node: Dynamic Typing636115 -Node: Indirect Calls637045 -Ref: Indirect Calls-Footnote-1647297 -Node: Functions Summary647425 -Node: Library Functions650130 -Ref: Library Functions-Footnote-1653737 -Ref: Library Functions-Footnote-2653880 -Node: Library Names654051 -Ref: Library Names-Footnote-1657718 -Ref: Library Names-Footnote-2657941 -Node: General Functions658027 -Node: Strtonum Function659209 -Node: Assert Function662231 -Node: Round Function665557 -Node: Cliff Random Function667097 -Node: Ordinal Functions668113 -Ref: Ordinal Functions-Footnote-1671176 -Ref: Ordinal Functions-Footnote-2671428 -Node: Join Function671638 -Ref: Join Function-Footnote-1673408 -Node: Getlocaltime Function673608 -Node: Readfile Function677350 -Node: Shell Quoting679327 -Node: Isnumeric Function680755 -Node: Data File Management682143 -Node: Filetrans Function682775 -Node: Rewind Function686871 -Node: File Checking688780 -Ref: File Checking-Footnote-1690114 -Node: Empty Files690315 -Node: Ignoring Assigns692294 -Node: Getopt Function693844 -Ref: Getopt Function-Footnote-1709067 -Node: Passwd Functions709267 -Ref: Passwd Functions-Footnote-1718106 -Node: Group Functions718194 -Ref: Group Functions-Footnote-1726092 -Node: Walking Arrays726299 -Node: Library Functions Summary729307 -Node: Library Exercises730713 -Node: Sample Programs731178 -Node: Running Examples731948 -Node: Clones732676 -Node: Cut Program733900 -Node: Egrep Program744040 -Node: Id Program753041 -Node: Split Program762988 -Ref: Split Program-Footnote-1772881 -Node: Tee Program773054 -Node: Uniq Program775844 -Node: Wc Program783432 -Node: Bytes vs. Characters783819 -Node: Using extensions785367 -Node: wc program786121 -Node: Miscellaneous Programs790986 -Node: Dupword Program792199 -Node: Alarm Program794229 -Node: Translate Program799084 -Ref: Translate Program-Footnote-1803649 -Node: Labels Program803919 -Ref: Labels Program-Footnote-1807270 -Node: Word Sorting807354 -Node: History Sorting811426 -Node: Extract Program813651 -Node: Simple Sed821705 -Node: Igawk Program824779 -Ref: Igawk Program-Footnote-1839110 -Ref: Igawk Program-Footnote-2839312 -Ref: Igawk Program-Footnote-3839434 -Node: Anagram Program839549 -Node: Signature Program842611 -Node: Programs Summary843858 -Node: Programs Exercises845072 -Ref: Programs Exercises-Footnote-1849202 -Node: Advanced Features849288 -Node: Nondecimal Data851355 -Node: Array Sorting852946 -Node: Controlling Array Traversal853646 -Ref: Controlling Array Traversal-Footnote-1862014 -Node: Array Sorting Functions862132 -Ref: Array Sorting Functions-Footnote-1867506 -Node: Two-way I/O867702 -Ref: Two-way I/O-Footnote-1875428 -Ref: Two-way I/O-Footnote-2875615 -Node: TCP/IP Networking875697 -Node: Profiling878815 -Node: Extension Philosophy888124 -Node: Advanced Features Summary889603 -Node: Internationalization891618 -Node: I18N and L10N893292 -Node: Explaining gettext893979 -Ref: Explaining gettext-Footnote-1899871 -Ref: Explaining gettext-Footnote-2900056 -Node: Programmer i18n900221 -Ref: Programmer i18n-Footnote-1905170 -Node: Translator i18n905219 -Node: String Extraction906013 -Ref: String Extraction-Footnote-1907145 -Node: Printf Ordering907231 -Ref: Printf Ordering-Footnote-1910017 -Node: I18N Portability910081 -Ref: I18N Portability-Footnote-1912537 -Node: I18N Example912600 -Ref: I18N Example-Footnote-1915875 -Ref: I18N Example-Footnote-2915948 -Node: Gawk I18N916057 -Node: I18N Summary916706 -Node: Debugger918047 -Node: Debugging919047 -Node: Debugging Concepts919488 -Node: Debugging Terms921297 -Node: Awk Debugging923872 -Ref: Awk Debugging-Footnote-1924817 -Node: Sample Debugging Session924949 -Node: Debugger Invocation925483 -Node: Finding The Bug926869 -Node: List of Debugger Commands933343 -Node: Breakpoint Control934676 -Node: Debugger Execution Control938370 -Node: Viewing And Changing Data941732 -Node: Execution Stack945273 -Node: Debugger Info946910 -Node: Miscellaneous Debugger Commands950981 -Node: Readline Support956043 -Node: Limitations956939 -Node: Debugging Summary959493 -Node: Namespaces960772 -Node: Global Namespace961883 -Node: Qualified Names963281 -Node: Default Namespace964280 -Node: Changing The Namespace965021 -Node: Naming Rules966635 -Node: Internal Name Management968483 -Node: Namespace Example969525 -Node: Namespace And Features972087 -Node: Namespace Summary973522 -Node: Arbitrary Precision Arithmetic974999 -Node: Computer Arithmetic976486 -Ref: table-numeric-ranges980252 -Ref: table-floating-point-ranges980745 -Ref: Computer Arithmetic-Footnote-1981403 -Node: Math Definitions981460 -Ref: table-ieee-formats984776 -Ref: Math Definitions-Footnote-1985379 -Node: MPFR features985484 -Node: FP Math Caution987202 -Ref: FP Math Caution-Footnote-1988274 -Node: Inexactness of computations988643 -Node: Inexact representation989603 -Node: Comparing FP Values990963 -Node: Errors accumulate992204 -Node: Getting Accuracy993637 -Node: Try To Round996347 -Node: Setting precision997246 -Ref: table-predefined-precision-strings997943 -Node: Setting the rounding mode999773 -Ref: table-gawk-rounding-modes1000147 -Ref: Setting the rounding mode-Footnote-11004078 -Node: Arbitrary Precision Integers1004257 -Ref: Arbitrary Precision Integers-Footnote-11007432 -Node: Checking for MPFR1007581 -Node: POSIX Floating Point Problems1009055 -Ref: POSIX Floating Point Problems-Footnote-11013340 -Node: Floating point summary1013378 -Node: Dynamic Extensions1015568 -Node: Extension Intro1017121 -Node: Plugin License1018387 -Node: Extension Mechanism Outline1019184 -Ref: figure-load-extension1019623 -Ref: figure-register-new-function1021188 -Ref: figure-call-new-function1022280 -Node: Extension API Description1024342 -Node: Extension API Functions Introduction1026055 -Ref: table-api-std-headers1027891 -Node: General Data Types1032140 -Ref: General Data Types-Footnote-11040770 -Node: Memory Allocation Functions1041069 -Ref: Memory Allocation Functions-Footnote-11045570 -Node: Constructor Functions1045669 -Node: API Ownership of MPFR and GMP Values1049135 -Node: Registration Functions1050448 -Node: Extension Functions1051148 -Node: Exit Callback Functions1056470 -Node: Extension Version String1057720 -Node: Input Parsers1058383 -Node: Output Wrappers1071104 -Node: Two-way processors1075616 -Node: Printing Messages1077881 -Ref: Printing Messages-Footnote-11079052 -Node: Updating ERRNO1079205 -Node: Requesting Values1079944 -Ref: table-value-types-returned1080681 -Node: Accessing Parameters1081617 -Node: Symbol Table Access1082854 -Node: Symbol table by name1083366 -Ref: Symbol table by name-Footnote-11086390 -Node: Symbol table by cookie1086518 -Ref: Symbol table by cookie-Footnote-11090703 -Node: Cached values1090767 -Ref: Cached values-Footnote-11094303 -Node: Array Manipulation1094456 -Ref: Array Manipulation-Footnote-11095547 -Node: Array Data Types1095584 -Ref: Array Data Types-Footnote-11098242 -Node: Array Functions1098334 -Node: Flattening Arrays1102832 -Node: Creating Arrays1109808 -Node: Redirection API1114575 -Node: Extension API Variables1117408 -Node: Extension Versioning1118119 -Ref: gawk-api-version1118548 -Node: Extension GMP/MPFR Versioning1120279 -Node: Extension API Informational Variables1121907 -Node: Extension API Boilerplate1122980 -Node: Changes from API V11126954 -Node: Finding Extensions1128526 -Node: Extension Example1129085 -Node: Internal File Description1129883 -Node: Internal File Ops1133963 -Ref: Internal File Ops-Footnote-11145313 -Node: Using Internal File Ops1145453 -Ref: Using Internal File Ops-Footnote-11147836 -Node: Extension Samples1148110 -Node: Extension Sample File Functions1149639 -Node: Extension Sample Fnmatch1157288 -Node: Extension Sample Fork1158775 -Node: Extension Sample Inplace1159993 -Node: Extension Sample Ord1163619 -Node: Extension Sample Readdir1164455 -Ref: table-readdir-file-types1165344 -Node: Extension Sample Revout1166411 -Node: Extension Sample Rev2way1167000 -Node: Extension Sample Read write array1167740 -Node: Extension Sample Readfile1169682 -Node: Extension Sample Time1170777 -Node: Extension Sample API Tests1172529 -Node: gawkextlib1173021 -Node: Extension summary1175939 -Node: Extension Exercises1179641 -Node: Language History1180883 -Node: V7/SVR3.11182539 -Node: SVR41184691 -Node: POSIX1186125 -Node: BTL1187506 -Node: POSIX/GNU1188235 -Node: Feature History1194013 -Node: Common Extensions1211188 -Node: Ranges and Locales1212471 -Ref: Ranges and Locales-Footnote-11217087 -Ref: Ranges and Locales-Footnote-21217114 -Ref: Ranges and Locales-Footnote-31217349 -Node: Contributors1217572 -Node: History summary1223569 -Node: Installation1224949 -Node: Gawk Distribution1225893 -Node: Getting1226377 -Node: Extracting1227340 -Node: Distribution contents1228978 -Node: Unix Installation1235458 -Node: Quick Installation1236140 -Node: Compiling with MPFR1238621 -Node: Shell Startup Files1239313 -Node: Additional Configuration Options1240402 -Node: Configuration Philosophy1242717 -Node: Non-Unix Installation1245086 -Node: PC Installation1245546 -Node: PC Binary Installation1246384 -Node: PC Compiling1246819 -Node: PC Using1247936 -Node: Cygwin1251489 -Node: MSYS1252713 -Node: VMS Installation1253315 -Node: VMS Compilation1254034 -Ref: VMS Compilation-Footnote-11255263 -Node: VMS Dynamic Extensions1255321 -Node: VMS Installation Details1257006 -Node: VMS Running1259268 -Node: VMS GNV1263547 -Node: Bugs1264261 -Node: Bug definition1265141 -Node: Bug address1267645 -Node: Usenet1271033 -Node: Performance bugs1272042 -Node: Asking for help1274963 -Node: Maintainers1276925 -Node: Other Versions1278119 -Node: Installation summary1285971 -Node: Notes1287335 -Node: Compatibility Mode1288129 -Node: Additions1288911 -Node: Accessing The Source1289836 -Node: Adding Code1291273 -Node: New Ports1297492 -Node: Derived Files1301867 -Ref: Derived Files-Footnote-11307527 -Ref: Derived Files-Footnote-21307562 -Ref: Derived Files-Footnote-31308160 -Node: Future Extensions1308274 -Node: Implementation Limitations1308932 -Node: Extension Design1310142 -Node: Old Extension Problems1311286 -Ref: Old Extension Problems-Footnote-11312804 -Node: Extension New Mechanism Goals1312861 -Ref: Extension New Mechanism Goals-Footnote-11316225 -Node: Extension Other Design Decisions1316414 -Node: Extension Future Growth1318527 -Node: Notes summary1319133 -Node: Basic Concepts1320291 -Node: Basic High Level1320972 -Ref: figure-general-flow1321254 -Ref: figure-process-flow1321939 -Ref: Basic High Level-Footnote-11325240 -Node: Basic Data Typing1325425 -Node: Glossary1328753 -Node: Copying1360638 -Node: GNU Free Documentation License1398181 -Node: Index1423301 +Ref: Interval Expressions-Footnote-1184114 +Node: Bracket Expressions184212 +Ref: table-char-classes186688 +Node: Leftmost Longest190014 +Node: Computed Regexps191317 +Node: GNU Regexp Operators194744 +Node: Case-sensitivity198481 +Ref: Case-sensitivity-Footnote-1201347 +Ref: Case-sensitivity-Footnote-2201582 +Node: Regexp Summary201690 +Node: Reading Files203156 +Node: Records205425 +Node: awk split records206500 +Node: gawk split records211200 +Ref: gawk split records-Footnote-1216274 +Node: Fields216311 +Node: Nonconstant Fields219052 +Ref: Nonconstant Fields-Footnote-1221288 +Node: Changing Fields221492 +Node: Field Separators227523 +Node: Default Field Splitting230221 +Node: Regexp Field Splitting231339 +Node: Single Character Fields235016 +Node: Command Line Field Separator236076 +Node: Full Line Fields239294 +Ref: Full Line Fields-Footnote-1240816 +Ref: Full Line Fields-Footnote-2240862 +Node: Field Splitting Summary240963 +Node: Constant Size243037 +Node: Fixed width data243769 +Node: Skipping intervening247236 +Node: Allowing trailing data248034 +Node: Fields with fixed data249071 +Node: Splitting By Content250589 +Ref: Splitting By Content-Footnote-1254372 +Node: More CSV254535 +Node: Testing field creation256127 +Node: Multiple Line257752 +Node: Getline264029 +Node: Plain Getline266498 +Node: Getline/Variable269071 +Node: Getline/File270222 +Node: Getline/Variable/File271610 +Ref: Getline/Variable/File-Footnote-1273215 +Node: Getline/Pipe273303 +Node: Getline/Variable/Pipe276007 +Node: Getline/Coprocess277142 +Node: Getline/Variable/Coprocess278409 +Node: Getline Notes279151 +Node: Getline Summary281948 +Ref: table-getline-variants282372 +Node: Read Timeout283120 +Ref: Read Timeout-Footnote-1287026 +Node: Retrying Input287084 +Node: Command-line directories288283 +Node: Input Summary289189 +Node: Input Exercises292361 +Node: Printing292795 +Node: Print294629 +Node: Print Examples296086 +Node: Output Separators298866 +Node: OFMT300883 +Node: Printf302239 +Node: Basic Printf303024 +Node: Control Letters304598 +Node: Format Modifiers309762 +Node: Printf Examples315777 +Node: Redirection318263 +Node: Special FD325104 +Ref: Special FD-Footnote-1328272 +Node: Special Files328346 +Node: Other Inherited Files328963 +Node: Special Network329964 +Node: Special Caveats330824 +Node: Close Files And Pipes331773 +Ref: table-close-pipe-return-values338680 +Ref: Close Files And Pipes-Footnote-1339493 +Ref: Close Files And Pipes-Footnote-2339641 +Node: Nonfatal339793 +Node: Output Summary342131 +Node: Output Exercises343353 +Node: Expressions344032 +Node: Values345220 +Node: Constants345898 +Node: Scalar Constants346589 +Ref: Scalar Constants-Footnote-1349099 +Node: Nondecimal-numbers349349 +Node: Regexp Constants352350 +Node: Using Constant Regexps352876 +Node: Standard Regexp Constants353498 +Node: Strong Regexp Constants356686 +Node: Variables360110 +Node: Using Variables360767 +Node: Assignment Options362677 +Node: Conversion365148 +Node: Strings And Numbers365672 +Ref: Strings And Numbers-Footnote-1368735 +Node: Locale influences conversions368844 +Ref: table-locale-affects371602 +Node: All Operators372220 +Node: Arithmetic Ops372849 +Node: Concatenation375565 +Ref: Concatenation-Footnote-1378412 +Node: Assignment Ops378519 +Ref: table-assign-ops383510 +Node: Increment Ops384823 +Node: Truth Values and Conditions388283 +Node: Truth Values389357 +Node: Typing and Comparison390405 +Node: Variable Typing391225 +Ref: Variable Typing-Footnote-1397688 +Ref: Variable Typing-Footnote-2397760 +Node: Comparison Operators397837 +Ref: table-relational-ops398256 +Node: POSIX String Comparison401751 +Ref: POSIX String Comparison-Footnote-1403446 +Ref: POSIX String Comparison-Footnote-2403585 +Node: Boolean Ops403669 +Ref: Boolean Ops-Footnote-1408151 +Node: Conditional Exp408243 +Node: Function Calls409979 +Node: Precedence413856 +Node: Locales417515 +Node: Expressions Summary419147 +Node: Patterns and Actions421720 +Node: Pattern Overview422840 +Node: Regexp Patterns424517 +Node: Expression Patterns425059 +Node: Ranges428840 +Node: BEGIN/END431948 +Node: Using BEGIN/END432709 +Ref: Using BEGIN/END-Footnote-1435463 +Node: I/O And BEGIN/END435569 +Node: BEGINFILE/ENDFILE437882 +Node: Empty441113 +Node: Using Shell Variables441430 +Node: Action Overview443704 +Node: Statements446029 +Node: If Statement447877 +Node: While Statement449372 +Node: Do Statement451400 +Node: For Statement452548 +Node: Switch Statement455719 +Node: Break Statement458160 +Node: Continue Statement460252 +Node: Next Statement462079 +Node: Nextfile Statement464462 +Node: Exit Statement467151 +Node: Built-in Variables469554 +Node: User-modified470687 +Node: Auto-set478454 +Ref: Auto-set-Footnote-1495261 +Ref: Auto-set-Footnote-2495467 +Node: ARGC and ARGV495523 +Node: Pattern Action Summary499736 +Node: Arrays502166 +Node: Array Basics503495 +Node: Array Intro504339 +Ref: figure-array-elements506314 +Ref: Array Intro-Footnote-1509018 +Node: Reference to Elements509146 +Node: Assigning Elements511610 +Node: Array Example512101 +Node: Scanning an Array513860 +Node: Controlling Scanning516882 +Ref: Controlling Scanning-Footnote-1523338 +Node: Numeric Array Subscripts523654 +Node: Uninitialized Subscripts525838 +Node: Delete527457 +Ref: Delete-Footnote-1530209 +Node: Multidimensional530266 +Node: Multiscanning533361 +Node: Arrays of Arrays534952 +Node: Arrays Summary539720 +Node: Functions541813 +Node: Built-in542851 +Node: Calling Built-in543932 +Node: Numeric Functions545928 +Ref: Numeric Functions-Footnote-1549956 +Ref: Numeric Functions-Footnote-2550604 +Ref: Numeric Functions-Footnote-3550652 +Node: String Functions550924 +Ref: String Functions-Footnote-1575439 +Ref: String Functions-Footnote-2575567 +Ref: String Functions-Footnote-3575815 +Node: Gory Details575902 +Ref: table-sub-escapes577693 +Ref: table-sub-proposed579212 +Ref: table-posix-sub580575 +Ref: table-gensub-escapes582116 +Ref: Gory Details-Footnote-1582939 +Node: I/O Functions583093 +Ref: table-system-return-values589547 +Ref: I/O Functions-Footnote-1591627 +Ref: I/O Functions-Footnote-2591775 +Node: Time Functions591895 +Ref: Time Functions-Footnote-1602566 +Ref: Time Functions-Footnote-2602634 +Ref: Time Functions-Footnote-3602792 +Ref: Time Functions-Footnote-4602903 +Ref: Time Functions-Footnote-5603015 +Ref: Time Functions-Footnote-6603242 +Node: Bitwise Functions603508 +Ref: table-bitwise-ops604102 +Ref: Bitwise Functions-Footnote-1610165 +Ref: Bitwise Functions-Footnote-2610338 +Node: Type Functions610529 +Node: I18N Functions613392 +Node: User-defined615043 +Node: Definition Syntax615855 +Ref: Definition Syntax-Footnote-1621549 +Node: Function Example621620 +Ref: Function Example-Footnote-1624542 +Node: Function Calling624564 +Node: Calling A Function625152 +Node: Variable Scope626110 +Node: Pass By Value/Reference629104 +Node: Function Caveats631748 +Ref: Function Caveats-Footnote-1633795 +Node: Return Statement633915 +Node: Dynamic Typing636894 +Node: Indirect Calls637824 +Ref: Indirect Calls-Footnote-1648076 +Node: Functions Summary648204 +Node: Library Functions650909 +Ref: Library Functions-Footnote-1654516 +Ref: Library Functions-Footnote-2654659 +Node: Library Names654830 +Ref: Library Names-Footnote-1658497 +Ref: Library Names-Footnote-2658720 +Node: General Functions658806 +Node: Strtonum Function659988 +Node: Assert Function663010 +Node: Round Function666336 +Node: Cliff Random Function667876 +Node: Ordinal Functions668892 +Ref: Ordinal Functions-Footnote-1671955 +Ref: Ordinal Functions-Footnote-2672207 +Node: Join Function672417 +Ref: Join Function-Footnote-1674187 +Node: Getlocaltime Function674387 +Node: Readfile Function678129 +Node: Shell Quoting680106 +Node: Isnumeric Function681534 +Node: Data File Management682922 +Node: Filetrans Function683554 +Node: Rewind Function687650 +Node: File Checking689559 +Ref: File Checking-Footnote-1690893 +Node: Empty Files691094 +Node: Ignoring Assigns693073 +Node: Getopt Function694623 +Ref: Getopt Function-Footnote-1709846 +Node: Passwd Functions710046 +Ref: Passwd Functions-Footnote-1718885 +Node: Group Functions718973 +Ref: Group Functions-Footnote-1726871 +Node: Walking Arrays727078 +Node: Library Functions Summary730086 +Node: Library Exercises731492 +Node: Sample Programs731957 +Node: Running Examples732727 +Node: Clones733455 +Node: Cut Program734679 +Node: Egrep Program744819 +Node: Id Program753820 +Node: Split Program763767 +Ref: Split Program-Footnote-1773660 +Node: Tee Program773833 +Node: Uniq Program776623 +Node: Wc Program784211 +Node: Bytes vs. Characters784598 +Node: Using extensions786146 +Node: wc program786900 +Node: Miscellaneous Programs791765 +Node: Dupword Program792978 +Node: Alarm Program795008 +Node: Translate Program799863 +Ref: Translate Program-Footnote-1804428 +Node: Labels Program804698 +Ref: Labels Program-Footnote-1808049 +Node: Word Sorting808133 +Node: History Sorting812205 +Node: Extract Program814430 +Node: Simple Sed822484 +Node: Igawk Program825558 +Ref: Igawk Program-Footnote-1839889 +Ref: Igawk Program-Footnote-2840091 +Ref: Igawk Program-Footnote-3840213 +Node: Anagram Program840328 +Node: Signature Program843390 +Node: Programs Summary844637 +Node: Programs Exercises845851 +Ref: Programs Exercises-Footnote-1849981 +Node: Advanced Features850067 +Node: Nondecimal Data852134 +Node: Array Sorting853725 +Node: Controlling Array Traversal854425 +Ref: Controlling Array Traversal-Footnote-1862793 +Node: Array Sorting Functions862911 +Ref: Array Sorting Functions-Footnote-1868285 +Node: Two-way I/O868481 +Ref: Two-way I/O-Footnote-1876207 +Ref: Two-way I/O-Footnote-2876394 +Node: TCP/IP Networking876476 +Node: Profiling879594 +Node: Extension Philosophy888903 +Node: Advanced Features Summary890382 +Node: Internationalization892397 +Node: I18N and L10N894071 +Node: Explaining gettext894758 +Ref: Explaining gettext-Footnote-1900650 +Ref: Explaining gettext-Footnote-2900835 +Node: Programmer i18n901000 +Ref: Programmer i18n-Footnote-1905949 +Node: Translator i18n905998 +Node: String Extraction906792 +Ref: String Extraction-Footnote-1907924 +Node: Printf Ordering908010 +Ref: Printf Ordering-Footnote-1910796 +Node: I18N Portability910860 +Ref: I18N Portability-Footnote-1913316 +Node: I18N Example913379 +Ref: I18N Example-Footnote-1916654 +Ref: I18N Example-Footnote-2916727 +Node: Gawk I18N916836 +Node: I18N Summary917485 +Node: Debugger918826 +Node: Debugging919826 +Node: Debugging Concepts920267 +Node: Debugging Terms922076 +Node: Awk Debugging924651 +Ref: Awk Debugging-Footnote-1925596 +Node: Sample Debugging Session925728 +Node: Debugger Invocation926262 +Node: Finding The Bug927648 +Node: List of Debugger Commands934122 +Node: Breakpoint Control935455 +Node: Debugger Execution Control939149 +Node: Viewing And Changing Data942511 +Node: Execution Stack946052 +Node: Debugger Info947689 +Node: Miscellaneous Debugger Commands951760 +Node: Readline Support956822 +Node: Limitations957718 +Node: Debugging Summary960272 +Node: Namespaces961551 +Node: Global Namespace962662 +Node: Qualified Names964060 +Node: Default Namespace965059 +Node: Changing The Namespace965800 +Node: Naming Rules967414 +Node: Internal Name Management969262 +Node: Namespace Example970304 +Node: Namespace And Features972866 +Node: Namespace Summary974301 +Node: Arbitrary Precision Arithmetic975778 +Node: Computer Arithmetic977265 +Ref: table-numeric-ranges981031 +Ref: table-floating-point-ranges981524 +Ref: Computer Arithmetic-Footnote-1982182 +Node: Math Definitions982239 +Ref: table-ieee-formats985555 +Ref: Math Definitions-Footnote-1986158 +Node: MPFR features986263 +Node: FP Math Caution987981 +Ref: FP Math Caution-Footnote-1989053 +Node: Inexactness of computations989422 +Node: Inexact representation990382 +Node: Comparing FP Values991742 +Node: Errors accumulate992983 +Node: Getting Accuracy994416 +Node: Try To Round997126 +Node: Setting precision998025 +Ref: table-predefined-precision-strings998722 +Node: Setting the rounding mode1000552 +Ref: table-gawk-rounding-modes1000926 +Ref: Setting the rounding mode-Footnote-11004857 +Node: Arbitrary Precision Integers1005036 +Ref: Arbitrary Precision Integers-Footnote-11008211 +Node: Checking for MPFR1008360 +Node: POSIX Floating Point Problems1009834 +Ref: POSIX Floating Point Problems-Footnote-11014119 +Node: Floating point summary1014157 +Node: Dynamic Extensions1016347 +Node: Extension Intro1017900 +Node: Plugin License1019166 +Node: Extension Mechanism Outline1019963 +Ref: figure-load-extension1020402 +Ref: figure-register-new-function1021967 +Ref: figure-call-new-function1023059 +Node: Extension API Description1025121 +Node: Extension API Functions Introduction1026834 +Ref: table-api-std-headers1028670 +Node: General Data Types1032919 +Ref: General Data Types-Footnote-11041549 +Node: Memory Allocation Functions1041848 +Ref: Memory Allocation Functions-Footnote-11046349 +Node: Constructor Functions1046448 +Node: API Ownership of MPFR and GMP Values1049914 +Node: Registration Functions1051227 +Node: Extension Functions1051927 +Node: Exit Callback Functions1057249 +Node: Extension Version String1058499 +Node: Input Parsers1059162 +Node: Output Wrappers1071883 +Node: Two-way processors1076395 +Node: Printing Messages1078660 +Ref: Printing Messages-Footnote-11079831 +Node: Updating ERRNO1079984 +Node: Requesting Values1080723 +Ref: table-value-types-returned1081460 +Node: Accessing Parameters1082396 +Node: Symbol Table Access1083633 +Node: Symbol table by name1084145 +Ref: Symbol table by name-Footnote-11087169 +Node: Symbol table by cookie1087297 +Ref: Symbol table by cookie-Footnote-11091482 +Node: Cached values1091546 +Ref: Cached values-Footnote-11095082 +Node: Array Manipulation1095235 +Ref: Array Manipulation-Footnote-11096326 +Node: Array Data Types1096363 +Ref: Array Data Types-Footnote-11099021 +Node: Array Functions1099113 +Node: Flattening Arrays1103611 +Node: Creating Arrays1110587 +Node: Redirection API1115354 +Node: Extension API Variables1118187 +Node: Extension Versioning1118898 +Ref: gawk-api-version1119327 +Node: Extension GMP/MPFR Versioning1121058 +Node: Extension API Informational Variables1122686 +Node: Extension API Boilerplate1123759 +Node: Changes from API V11127733 +Node: Finding Extensions1129305 +Node: Extension Example1129864 +Node: Internal File Description1130662 +Node: Internal File Ops1134742 +Ref: Internal File Ops-Footnote-11146092 +Node: Using Internal File Ops1146232 +Ref: Using Internal File Ops-Footnote-11148615 +Node: Extension Samples1148889 +Node: Extension Sample File Functions1150418 +Node: Extension Sample Fnmatch1158067 +Node: Extension Sample Fork1159554 +Node: Extension Sample Inplace1160772 +Node: Extension Sample Ord1164398 +Node: Extension Sample Readdir1165234 +Ref: table-readdir-file-types1166123 +Node: Extension Sample Revout1167190 +Node: Extension Sample Rev2way1167779 +Node: Extension Sample Read write array1168519 +Node: Extension Sample Readfile1170461 +Node: Extension Sample Time1171556 +Node: Extension Sample API Tests1173308 +Node: gawkextlib1173800 +Node: Extension summary1176718 +Node: Extension Exercises1180420 +Node: Language History1181662 +Node: V7/SVR3.11183318 +Node: SVR41185470 +Node: POSIX1186904 +Node: BTL1188285 +Node: POSIX/GNU1189014 +Node: Feature History1194792 +Node: Common Extensions1211967 +Node: Ranges and Locales1213250 +Ref: Ranges and Locales-Footnote-11217866 +Ref: Ranges and Locales-Footnote-21217893 +Ref: Ranges and Locales-Footnote-31218128 +Node: Contributors1218351 +Node: History summary1224348 +Node: Installation1225728 +Node: Gawk Distribution1226672 +Node: Getting1227156 +Node: Extracting1228119 +Node: Distribution contents1229757 +Node: Unix Installation1236237 +Node: Quick Installation1236919 +Node: Compiling with MPFR1239400 +Node: Shell Startup Files1240092 +Node: Additional Configuration Options1241181 +Node: Configuration Philosophy1243496 +Node: Non-Unix Installation1245865 +Node: PC Installation1246325 +Node: PC Binary Installation1247163 +Node: PC Compiling1247598 +Node: PC Using1248715 +Node: Cygwin1252268 +Node: MSYS1253492 +Node: VMS Installation1254094 +Node: VMS Compilation1254813 +Ref: VMS Compilation-Footnote-11256042 +Node: VMS Dynamic Extensions1256100 +Node: VMS Installation Details1257785 +Node: VMS Running1260047 +Node: VMS GNV1264326 +Node: Bugs1265040 +Node: Bug definition1265920 +Node: Bug address1268424 +Node: Usenet1271812 +Node: Performance bugs1272821 +Node: Asking for help1275742 +Node: Maintainers1277704 +Node: Other Versions1278898 +Node: Installation summary1286750 +Node: Notes1288114 +Node: Compatibility Mode1288908 +Node: Additions1289690 +Node: Accessing The Source1290615 +Node: Adding Code1292052 +Node: New Ports1298271 +Node: Derived Files1302646 +Ref: Derived Files-Footnote-11308306 +Ref: Derived Files-Footnote-21308341 +Ref: Derived Files-Footnote-31308939 +Node: Future Extensions1309053 +Node: Implementation Limitations1309711 +Node: Extension Design1310921 +Node: Old Extension Problems1312065 +Ref: Old Extension Problems-Footnote-11313583 +Node: Extension New Mechanism Goals1313640 +Ref: Extension New Mechanism Goals-Footnote-11317004 +Node: Extension Other Design Decisions1317193 +Node: Extension Future Growth1319306 +Node: Notes summary1319912 +Node: Basic Concepts1321070 +Node: Basic High Level1321751 +Ref: figure-general-flow1322033 +Ref: figure-process-flow1322718 +Ref: Basic High Level-Footnote-11326019 +Node: Basic Data Typing1326204 +Node: Glossary1329532 +Node: Copying1361417 +Node: GNU Free Documentation License1398960 +Node: Index1424080 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 7d5aa4dc..84707907 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -6093,17 +6093,37 @@ regexp constants are valid and work the way you want them to, using any version of @command{awk}.@footnote{Use two backslashes if you're using a string constant with a regexp operator or function.} -Finally, when @samp{@{} and @samp{@}} appear in regexp constants +When @samp{@{} and @samp{@}} appear in regexp constants in a way that cannot be interpreted as an interval expression (such as @code{/q@{a@}/}), then they stand for themselves. As mentioned, interval expressions were not traditionally available in @command{awk}. In March of 2019, BWK @command{awk} (finally) acquired them. - Nonetheless, because they were not available for so many decades, @command{gawk} continues to not supply them when in compatibility mode (@pxref{Options}). +POSIX says that interval expressions containing repetition counts greater +than 255 produce unspecified results. + +@cindex Eggert, Paul +In the manual for GNU @command{grep}, Paul Eggert notes the following: + +@quotation +Interval expressions may be implemented internally via repetition. +For example, @samp{^(a|bc)@{2,4@}$} might be implemented as +@samp{^(a|bc)(a|bc)((a|bc)(a|bc)?)?$}. A large repetition count may +exhaust memory or greatly slow matching. Even small counts can cause +problems if cascaded; for example, @samp{grep -E +".*@{10,@}@{10,@}@{10,@}@{10,@}@{10,@}"} is likely to overflow a +stack. Fortunately, regular expressions like these are typically +artificial, and cascaded repetitions do not conform to POSIX so cannot +be used in portable programs anyway. +@end quotation + +@noindent +This same caveat applies to @command{gawk}. + @node Bracket Expressions @section Using Bracket Expressions @cindex bracket expressions diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 6ace2e85..9513cf11 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -5821,17 +5821,37 @@ regexp constants are valid and work the way you want them to, using any version of @command{awk}.@footnote{Use two backslashes if you're using a string constant with a regexp operator or function.} -Finally, when @samp{@{} and @samp{@}} appear in regexp constants +When @samp{@{} and @samp{@}} appear in regexp constants in a way that cannot be interpreted as an interval expression (such as @code{/q@{a@}/}), then they stand for themselves. As mentioned, interval expressions were not traditionally available in @command{awk}. In March of 2019, BWK @command{awk} (finally) acquired them. - Nonetheless, because they were not available for so many decades, @command{gawk} continues to not supply them when in compatibility mode (@pxref{Options}). +POSIX says that interval expressions containing repetition counts greater +than 255 produce unspecified results. + +@cindex Eggert, Paul +In the manual for GNU @command{grep}, Paul Eggert notes the following: + +@quotation +Interval expressions may be implemented internally via repetition. +For example, @samp{^(a|bc)@{2,4@}$} might be implemented as +@samp{^(a|bc)(a|bc)((a|bc)(a|bc)?)?$}. A large repetition count may +exhaust memory or greatly slow matching. Even small counts can cause +problems if cascaded; for example, @samp{grep -E +".*@{10,@}@{10,@}@{10,@}@{10,@}@{10,@}"} is likely to overflow a +stack. Fortunately, regular expressions like these are typically +artificial, and cascaded repetitions do not conform to POSIX so cannot +be used in portable programs anyway. +@end quotation + +@noindent +This same caveat applies to @command{gawk}. + @node Bracket Expressions @section Using Bracket Expressions @cindex bracket expressions |