1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879 |
- <?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <!-- This file is generated by Nim. -->
- <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>std/pegs</title>
- <!-- Google fonts -->
- <link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
- <link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
- <!-- Favicon -->
- <link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
- <link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
- <!-- CSS -->
- <link rel="stylesheet" type="text/css" href="nimdoc.out.css?v=2.3.1">
- <!-- JS -->
- <script type="text/javascript" src="dochack.js?v=2.3.1"></script>
- </head>
- <body>
- <div class="document" id="documentId">
- <div class="container">
- <h1 class="title">std/pegs</h1>
- <div class="row">
- <div class="three columns">
- <div class="theme-select-wrapper">
- <label for="theme-select">Theme: </label>
- <select id="theme-select" onchange="setTheme(this.value)">
- <option value="auto">🌗 Match OS</option>
- <option value="dark">🌑 Dark</option>
- <option value="light">🌕 Light</option>
- </select>
- </div>
- <div id="global-links">
- <ul class="simple-boot">
- <li><a href="manual.html">Manual</a></li>
- <li><a href="lib.html">Standard library</a></li>
- <li> <a id="indexLink" href="theindex.html">Index</a></li>
- <li><a href="compiler/theindex.html">Compiler docs</a></li>
- <li><a href="https://nim-lang.github.io/fusion/theindex.html">Fusion docs</a></li>
- <li><a href="https://nim-lang.github.io/Nim/">devel</a>, <a href="https://nim-lang.org/documentation.html">stable</a></li>
- </ul>
- </div>
- <div id="searchInputDiv">
- Search: <input type="search" id="searchInput"
- oninput="search()" />
- </div>
-
- <ul class="simple simple-toc" id="toc-list">
- <li><a class="reference" id="peg-syntax-and-semantics_toc" href="#peg-syntax-and-semantics">PEG syntax and semantics</a></li>
- <ul class="simple"><li><a class="reference" id="peg-syntax-and-semantics-builtminusin-macros_toc" href="#peg-syntax-and-semantics-builtminusin-macros">Built-in macros</a></li>
- <li><a class="reference" id="peg-syntax-and-semantics-supported-peg-grammar_toc" href="#peg-syntax-and-semantics-supported-peg-grammar">Supported PEG grammar</a></li>
- <li><a class="reference" id="peg-syntax-and-semantics-examples_toc" href="#peg-syntax-and-semantics-examples">Examples</a></li>
- <li><a class="reference" id="peg-syntax-and-semantics-peg-vs-regular-expression_toc" href="#peg-syntax-and-semantics-peg-vs-regular-expression">PEG vs regular expression</a></li>
- <li><a class="reference" id="peg-syntax-and-semantics-peg-construction_toc" href="#peg-syntax-and-semantics-peg-construction">PEG construction</a></li>
- </ul><li>
- <a class="reference reference-toplevel" href="#6" id="56">Imports</a>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
- <ul class="simple simple-toc-section">
- <li><a class="reference" href="#Captures" title="Captures = object">Captures</a></li>
- <li><a class="reference" href="#EInvalidPeg" title="EInvalidPeg = object of ValueError">EInvalidPeg</a></li>
- <li><a class="reference" href="#NonTerminal" title="NonTerminal = ref NonTerminalObj">NonTerminal</a></li>
- <li><a class="reference" href="#NonTerminalFlag" title="NonTerminalFlag = enum
- ntDeclared, ntUsed">NonTerminalFlag</a></li>
- <li><a class="reference" href="#Peg" title="Peg {.shallow.} = object
- case
- of pkEmpty .. pkWhitespace:
- nil
- of pkTerminal, pkTerminalIgnoreCase, pkTerminalIgnoreStyle:
- of pkChar, pkGreedyRepChar:
- of pkCharChoice, pkGreedyRepSet:
- of pkNonTerminal:
- of pkBackRef .. pkBackRefIgnoreStyle:
- else:">Peg</a></li>
- <li><a class="reference" href="#PegKind" title="PegKind = enum
- pkEmpty, pkAny, ## any character (.)
- pkAnyRune, ## any Unicode character (_)
- pkNewLine, ## CR-LF, LF, CR
- pkLetter, ## Unicode letter
- pkLower, ## Unicode lower case letter
- pkUpper, ## Unicode upper case letter
- pkTitle, ## Unicode title character
- pkWhitespace, ## Unicode whitespace character
- pkTerminal, pkTerminalIgnoreCase, pkTerminalIgnoreStyle, pkChar, ## single character to match
- pkCharChoice, pkNonTerminal, pkSequence, ## a b c ... --> Internal DSL: peg(a, b, c)
- pkOrderedChoice, ## a / b / ... --> Internal DSL: a / b or /[a, b, c]
- pkGreedyRep, ## a* --> Internal DSL: *a
- ## a+ --> (a a*)
- pkGreedyRepChar, ## x* where x is a single character (superop)
- pkGreedyRepSet, ## [set]* (superop)
- pkGreedyAny, ## .* or _* (superop)
- pkOption, ## a? --> Internal DSL: ?a
- pkAndPredicate, ## &a --> Internal DSL: &a
- pkNotPredicate, ## !a --> Internal DSL: !a
- pkCapture, ## {a} --> Internal DSL: capture(a)
- pkBackRef, ## $i --> Internal DSL: backref(i)
- pkBackRefIgnoreCase, pkBackRefIgnoreStyle, pkSearch, ## @a --> Internal DSL: !*a
- pkCapturedSearch, ## {@} a --> Internal DSL: !*\a
- pkRule, ## a <- b
- pkList, ## a, b
- pkStartAnchor ## ^ --> Internal DSL: startAnchor()">PegKind</a></li>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#10" id="60">Consts</a></summary>
- <ul class="simple simple-toc-section">
- <li><a class="reference" href="#MaxSubpatterns" title="MaxSubpatterns = 20">MaxSubpatterns</a></li>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
- <ul class="simple simple-toc-section">
- <ul class="simple nested-toc-section">!
- <li><a class="reference" href="#%21%2CPeg" title="`!`(a: Peg): Peg">`!`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">!*
- <li><a class="reference" href="#%21%2A%2CPeg" title="`!*`(a: Peg): Peg">`!*`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">!*\
- <li><a class="reference" href="#%21%2A%5C%2CPeg" title="`!*\`(a: Peg): Peg">`!*\`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">$
- <li><a class="reference" href="#%24%2CPeg" title="`$`(r: Peg): string">`$`(r: Peg): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">&
- <li><a class="reference" href="#%26%2CPeg" title="`&`(a: Peg): Peg">`&`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">*
- <li><a class="reference" href="#%2A%2CPeg" title="`*`(a: Peg): Peg">`*`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">+
- <li><a class="reference" href="#%2B%2CPeg" title="`+`(a: Peg): Peg">`+`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">/
- <li><a class="reference" href="#%2F%2Cvarargs%5BPeg%5D" title="`/`(a: varargs[Peg]): Peg">`/`(a: varargs[Peg]): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">?
- <li><a class="reference" href="#%3F%2CPeg" title="`?`(a: Peg): Peg">`?`(a: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">any
- <li><a class="reference" href="#any" title="any(): Peg">any(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">anyRune
- <li><a class="reference" href="#anyRune" title="anyRune(): Peg">anyRune(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">backref
- <li><a class="reference" href="#backref%2Crange%5B%5D%2Cbool" title="backref(index: range[1 .. MaxSubpatterns]; reverse: bool = false): Peg">backref(index: range[1 .. MaxSubpatterns]; reverse: bool = false): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">backrefIgnoreCase
- <li><a class="reference" href="#backrefIgnoreCase%2Crange%5B%5D%2Cbool" title="backrefIgnoreCase(index: range[1 .. MaxSubpatterns]; reverse: bool = false): Peg">backrefIgnoreCase(index: range[1 .. MaxSubpatterns]; reverse: bool = false): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">backrefIgnoreStyle
- <li><a class="reference" href="#backrefIgnoreStyle%2Crange%5B%5D%2Cbool" title="backrefIgnoreStyle(index: range[1 .. MaxSubpatterns]; reverse: bool = false): Peg">backrefIgnoreStyle(index: range[1 .. MaxSubpatterns]; reverse: bool = false): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">bounds
- <li><a class="reference" href="#bounds%2CCaptures%2Crange%5B%5D" title="bounds(c: Captures; i: range[0 .. 20 - 1]): tuple[first, last: int]">bounds(c: Captures; i: range[0 .. 20 - 1]): tuple[first, last: int]</a></li>
- </ul>
- <ul class="simple nested-toc-section">capture
- <li><a class="reference" href="#capture%2CPeg" title="capture(a: Peg = Peg(kind: pkEmpty)): Peg">capture(a: Peg = Peg(kind: pkEmpty)): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">ch
- <li><a class="reference" href="#ch%2CPeg" title="ch(p: Peg): char">ch(p: Peg): char</a></li>
- </ul>
- <ul class="simple nested-toc-section">charChoice
- <li><a class="reference" href="#charChoice%2CPeg" title="charChoice(p: Peg): ref set[char]">charChoice(p: Peg): ref set[char]</a></li>
- </ul>
- <ul class="simple nested-toc-section">charSet
- <li><a class="reference" href="#charSet%2Cset%5Bchar%5D" title="charSet(s: set[char]): Peg">charSet(s: set[char]): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">col
- <li><a class="reference" href="#col%2CNonTerminal" title="col(nt: NonTerminal): int">col(nt: NonTerminal): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">contains
- <li><a class="reference" href="#contains%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint" title="contains(s: string; pattern: Peg; matches: var openArray[string]; start = 0): bool">contains(s: string; pattern: Peg; matches: var openArray[string]; start = 0): bool</a></li>
- <li><a class="reference" href="#contains%2Cstring%2CPeg%2Cint" title="contains(s: string; pattern: Peg; start = 0): bool">contains(s: string; pattern: Peg; start = 0): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">endAnchor
- <li><a class="reference" href="#endAnchor" title="endAnchor(): Peg">endAnchor(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">endsWith
- <li><a class="reference" href="#endsWith%2Cstring%2CPeg%2Cint" title="endsWith(s: string; suffix: Peg; start = 0): bool">endsWith(s: string; suffix: Peg; start = 0): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">escapePeg
- <li><a class="reference" href="#escapePeg%2Cstring" title="escapePeg(s: string): string">escapePeg(s: string): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">find
- <li><a class="reference" href="#find%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint" title="find(s: string; pattern: Peg; matches: var openArray[string]; start = 0): int">find(s: string; pattern: Peg; matches: var openArray[string]; start = 0): int</a></li>
- <li><a class="reference" href="#find%2Cstring%2CPeg%2Cint" title="find(s: string; pattern: Peg; start = 0): int">find(s: string; pattern: Peg; start = 0): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">findAll
- <li><a class="reference" href="#findAll%2Cstring%2CPeg%2Cint" title="findAll(s: string; pattern: Peg; start = 0): seq[string]">findAll(s: string; pattern: Peg; start = 0): seq[string]</a></li>
- </ul>
- <ul class="simple nested-toc-section">findBounds
- <li><a class="reference" href="#findBounds%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint" title="findBounds(s: string; pattern: Peg; matches: var openArray[string]; start = 0): tuple[
- first, last: int]">findBounds(s: string; pattern: Peg; matches: var openArray[string]; start = 0): tuple[
- first, last: int]</a></li>
- </ul>
- <ul class="simple nested-toc-section">flags
- <li><a class="reference" href="#flags%2CNonTerminal" title="flags(nt: NonTerminal): set[NonTerminalFlag]">flags(nt: NonTerminal): set[NonTerminalFlag]</a></li>
- </ul>
- <ul class="simple nested-toc-section">index
- <li><a class="reference" href="#index%2CPeg" title="index(p: Peg): range[-20 .. 20 - 1]">index(p: Peg): range[-20 .. 20 - 1]</a></li>
- </ul>
- <ul class="simple nested-toc-section">kind
- <li><a class="reference" href="#kind%2CPeg" title="kind(p: Peg): PegKind">kind(p: Peg): PegKind</a></li>
- </ul>
- <ul class="simple nested-toc-section">line
- <li><a class="reference" href="#line%2CNonTerminal" title="line(nt: NonTerminal): int">line(nt: NonTerminal): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">match
- <li><a class="reference" href="#match%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint" title="match(s: string; pattern: Peg; matches: var openArray[string]; start = 0): bool">match(s: string; pattern: Peg; matches: var openArray[string]; start = 0): bool</a></li>
- <li><a class="reference" href="#match%2Cstring%2CPeg%2Cint" title="match(s: string; pattern: Peg; start = 0): bool">match(s: string; pattern: Peg; start = 0): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">matchLen
- <li><a class="reference" href="#matchLen%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint" title="matchLen(s: string; pattern: Peg; matches: var openArray[string]; start = 0): int">matchLen(s: string; pattern: Peg; matches: var openArray[string]; start = 0): int</a></li>
- <li><a class="reference" href="#matchLen%2Cstring%2CPeg%2Cint" title="matchLen(s: string; pattern: Peg; start = 0): int">matchLen(s: string; pattern: Peg; start = 0): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">name
- <li><a class="reference" href="#name%2CNonTerminal" title="name(nt: NonTerminal): string">name(nt: NonTerminal): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">newLine
- <li><a class="reference" href="#newLine" title="newLine(): Peg">newLine(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">newNonTerminal
- <li><a class="reference" href="#newNonTerminal%2Cstring%2Cint%2Cint" title="newNonTerminal(name: string; line, column: int): NonTerminal">newNonTerminal(name: string; line, column: int): NonTerminal</a></li>
- </ul>
- <ul class="simple nested-toc-section">nonterminal
- <li><a class="reference" href="#nonterminal%2CNonTerminal" title="nonterminal(n: NonTerminal): Peg">nonterminal(n: NonTerminal): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">nt
- <li><a class="reference" href="#nt%2CPeg" title="nt(p: Peg): NonTerminal">nt(p: Peg): NonTerminal</a></li>
- </ul>
- <ul class="simple nested-toc-section">parallelReplace
- <li><a class="reference" href="#parallelReplace%2Cstring%2Cvarargs%5Btuple%5BPeg%2Cstring%5D%5D" title="parallelReplace(s: string; subs: varargs[tuple[pattern: Peg, repl: string]]): string">parallelReplace(s: string; subs: varargs[tuple[pattern: Peg, repl: string]]): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">parsePeg
- <li><a class="reference" href="#parsePeg%2Cstring%2Cstring%2Cint%2Cint" title="parsePeg(pattern: string; filename = "pattern"; line = 1; col = 0): Peg">parsePeg(pattern: string; filename = "pattern"; line = 1; col = 0): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">peg
- <li><a class="reference" href="#peg%2Cstring" title="peg(pattern: string): Peg">peg(pattern: string): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">rawMatch
- <li><a class="reference" href="#rawMatch%2Cstring%2CPeg%2Cint%2CCaptures" title="rawMatch(s: string; p: Peg; start: int; c: var Captures): int">rawMatch(s: string; p: Peg; start: int; c: var Captures): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">replace
- <li><a class="reference" href="#replace%2Cstring%2CPeg%2Cproc%28int%2Cint%2CopenArray%5Bstring%5D%29" title="replace(s: string; sub: Peg;
- cb: proc (match: int; cnt: int; caps: openArray[string]): string): string">replace(s: string; sub: Peg;
- cb: proc (match: int; cnt: int; caps: openArray[string]): string): string</a></li>
- <li><a class="reference" href="#replace%2Cstring%2CPeg%2Cstring" title="replace(s: string; sub: Peg; by = ""): string">replace(s: string; sub: Peg; by = ""): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">replacef
- <li><a class="reference" href="#replacef%2Cstring%2CPeg%2Cstring" title="replacef(s: string; sub: Peg; by: string): string">replacef(s: string; sub: Peg; by: string): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">rule
- <li><a class="reference" href="#rule%2CNonTerminal" title="rule(nt: NonTerminal): Peg">rule(nt: NonTerminal): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">sequence
- <li><a class="reference" href="#sequence%2Cvarargs%5BPeg%5D" title="sequence(a: varargs[Peg]): Peg">sequence(a: varargs[Peg]): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">split
- <li><a class="reference" href="#split%2Cstring%2CPeg" title="split(s: string; sep: Peg): seq[string]">split(s: string; sep: Peg): seq[string]</a></li>
- </ul>
- <ul class="simple nested-toc-section">startAnchor
- <li><a class="reference" href="#startAnchor" title="startAnchor(): Peg">startAnchor(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">startsWith
- <li><a class="reference" href="#startsWith%2Cstring%2CPeg%2Cint" title="startsWith(s: string; prefix: Peg; start = 0): bool">startsWith(s: string; prefix: Peg; start = 0): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">term
- <li><a class="reference" href="#term%2CPeg" title="term(p: Peg): string">term(p: Peg): string</a></li>
- <li><a class="reference" href="#term%2Cchar" title="term(t: char): Peg">term(t: char): Peg</a></li>
- <li><a class="reference" href="#term%2Cstring" title="term(t: string): Peg">term(t: string): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">termIgnoreCase
- <li><a class="reference" href="#termIgnoreCase%2Cstring" title="termIgnoreCase(t: string): Peg">termIgnoreCase(t: string): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">termIgnoreStyle
- <li><a class="reference" href="#termIgnoreStyle%2Cstring" title="termIgnoreStyle(t: string): Peg">termIgnoreStyle(t: string): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">transformFile
- <li><a class="reference" href="#transformFile%2Cstring%2Cstring%2Cvarargs%5Btuple%5BPeg%2Cstring%5D%5D" title="transformFile(infile, outfile: string;
- subs: varargs[tuple[pattern: Peg, repl: string]])">transformFile(infile, outfile: string;
- subs: varargs[tuple[pattern: Peg, repl: string]])</a></li>
- </ul>
- <ul class="simple nested-toc-section">unicodeLetter
- <li><a class="reference" href="#unicodeLetter" title="unicodeLetter(): Peg">unicodeLetter(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">unicodeLower
- <li><a class="reference" href="#unicodeLower" title="unicodeLower(): Peg">unicodeLower(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">unicodeTitle
- <li><a class="reference" href="#unicodeTitle" title="unicodeTitle(): Peg">unicodeTitle(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">unicodeUpper
- <li><a class="reference" href="#unicodeUpper" title="unicodeUpper(): Peg">unicodeUpper(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">unicodeWhitespace
- <li><a class="reference" href="#unicodeWhitespace" title="unicodeWhitespace(): Peg">unicodeWhitespace(): Peg</a></li>
- </ul>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#15" id="65">Iterators</a></summary>
- <ul class="simple simple-toc-section">
- <ul class="simple nested-toc-section">findAll
- <li><a class="reference" href="#findAll.i%2Cstring%2CPeg%2Cint" title="findAll(s: string; pattern: Peg; start = 0): string">findAll(s: string; pattern: Peg; start = 0): string</a></li>
- </ul>
- <ul class="simple nested-toc-section">items
- <li><a class="reference" href="#items.i%2CPeg" title="items(p: Peg): Peg">items(p: Peg): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">pairs
- <li><a class="reference" href="#pairs.i%2CPeg" title="pairs(p: Peg): (int, Peg)">pairs(p: Peg): (int, Peg)</a></li>
- </ul>
- <ul class="simple nested-toc-section">split
- <li><a class="reference" href="#split.i%2Cstring%2CPeg" title="split(s: string; sep: Peg): string">split(s: string; sep: Peg): string</a></li>
- </ul>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#18" id="68">Templates</a></summary>
- <ul class="simple simple-toc-section">
- <ul class="simple nested-toc-section">=~
- <li><a class="reference" href="#%3D~.t%2Cstring%2CPeg" title="`=~`(s: string; pattern: Peg): bool">`=~`(s: string; pattern: Peg): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">digits
- <li><a class="reference" href="#digits.t" title="digits(): Peg">digits(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">eventParser
- <li><a class="reference" href="#eventParser.t%2Cuntyped%2Cuntyped" title="eventParser(pegAst, handlers: untyped): (proc (s: string): int)">eventParser(pegAst, handlers: untyped): (proc (s: string): int)</a></li>
- </ul>
- <ul class="simple nested-toc-section">ident
- <li><a class="reference" href="#ident.t" title="ident(): Peg">ident(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">identChars
- <li><a class="reference" href="#identChars.t" title="identChars(): Peg">identChars(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">identStartChars
- <li><a class="reference" href="#identStartChars.t" title="identStartChars(): Peg">identStartChars(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">letters
- <li><a class="reference" href="#letters.t" title="letters(): Peg">letters(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">natural
- <li><a class="reference" href="#natural.t" title="natural(): Peg">natural(): Peg</a></li>
- </ul>
- <ul class="simple nested-toc-section">whitespace
- <li><a class="reference" href="#whitespace.t" title="whitespace(): Peg">whitespace(): Peg</a></li>
- </ul>
- </ul>
- </details>
- </li>
- </ul>
- </div>
- <div class="nine columns" id="content">
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1" class="link-seesrc" target="_blank" >Edit</a>
- <div id="tocRoot"></div>
-
- <p class="module-desc">Simple PEG (Parsing expression grammar) matching. Uses no memorization, but uses superoperators and symbol inlining to improve performance. Note: Matching performance is hopefully competitive with optimized regular expression engines.
- <h1><a class="toc-backref" id="peg-syntax-and-semantics" href="#peg-syntax-and-semantics">PEG syntax and semantics</a></h1><p>A PEG (Parsing expression grammar) is a simple deterministic grammar, that can be directly used for parsing. The current implementation has been designed as a more powerful replacement for regular expressions. UTF-8 is supported.</p>
- <p>The notation used for a PEG is similar to that of EBNF:</p>
- <table border="1" class="docutils"><tr><th>notation</th><th>meaning</th></tr>
- <tr><td><tt class="docutils literal"><span class="pre">A / ... / Z</span></tt></td><td>Ordered choice: Apply expressions <tt class="docutils literal"><span class="pre"><span class="Identifier">A</span></span></tt>, ..., <tt class="docutils literal"><span class="pre"><span class="Identifier">Z</span></span></tt>, in this order, to the text ahead, until one of them succeeds and possibly consumes some text. Indicate success if one of expressions succeeded. Otherwise, do not consume any text and indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">A ... Z</span></tt></td><td>Sequence: Apply expressions <tt class="docutils literal"><span class="pre"><span class="Identifier">A</span></span></tt>, ..., <tt class="docutils literal"><span class="pre"><span class="Identifier">Z</span></span></tt>, in this order, to consume consecutive portions of the text ahead, as long as they succeed. Indicate success if all succeeded. Otherwise, do not consume any text and indicate failure. The sequence's precedence is higher than that of ordered choice: <tt class="docutils literal"><span class="pre">A B / C</span></tt> means <tt class="docutils literal"><span class="pre">(A B) / Z</span></tt> and not <tt class="docutils literal"><span class="pre">A (B / Z)</span></tt>.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">(E)</span></tt></td><td>Grouping: Parenthesis can be used to change operator priority.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">{E}</span></tt></td><td>Capture: Apply expression <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> and store the substring that matched <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> into a <em>capture</em> that can be accessed after the matching process.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">{}</span></tt></td><td>Empty capture: Delete the last capture. No character is consumed.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">$i</span></tt></td><td>Back reference to the <tt class="docutils literal"><span class="pre">i</span></tt>th capture. <tt class="docutils literal"><span class="pre">i</span></tt> counts forwards from 1 or backwards (last capture to first) from ^1.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">$</span></tt></td><td>Anchor: Matches at the end of the input. No character is consumed. Same as <tt class="docutils literal"><span class="pre">!.</span></tt>.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">^</span></tt></td><td>Anchor: Matches at the start of the input. No character is consumed.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">&E</span></tt></td><td>And predicate: Indicate success if expression <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> matches the text ahead; otherwise indicate failure. Do not consume any text.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">!E</span></tt></td><td>Not predicate: Indicate failure if expression E matches the text ahead; otherwise indicate success. Do not consume any text.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">E+</span></tt></td><td>One or more: Apply expression <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> repeatedly to match the text ahead, as long as it succeeds. Consume the matched text (if any) and indicate success if there was at least one match. Otherwise, indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">E*</span></tt></td><td>Zero or more: Apply expression <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> repeatedly to match the text ahead, as long as it succeeds. Consume the matched text (if any). Always indicate success.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">E?</span></tt></td><td>Zero or one: If expression <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> matches the text ahead, consume it. Always indicate success.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">[s]</span></tt></td><td>Character class: If the character ahead appears in the string <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>, consume it and indicate success. Otherwise, indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">[a-b]</span></tt></td><td>Character range: If the character ahead is one from the range <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt> through <tt class="docutils literal"><span class="pre"><span class="Identifier">b</span></span></tt>, consume it and indicate success. Otherwise, indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">'s'</span></tt></td><td>String: If the text ahead is the string <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>, consume it and indicate success. Otherwise, indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">i's'</span></tt></td><td>String match ignoring case.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">y's'</span></tt></td><td>String match ignoring style.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">v's'</span></tt></td><td>Verbatim string match: Use this to override a global <tt class="docutils literal"><span class="pre">\i</span></tt> or <tt class="docutils literal"><span class="pre">\y</span></tt> modifier.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">i$j</span></tt></td><td>String match ignoring case for back reference.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">y$j</span></tt></td><td>String match ignoring style for back reference.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">v$j</span></tt></td><td>Verbatim string match for back reference.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">.</span></tt></td><td>Any character: If there is a character ahead, consume it and indicate success. Otherwise, (that is, at the end of input) indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">_</span></tt></td><td>Any Unicode character: If there is a UTF-8 character ahead, consume it and indicate success. Otherwise, indicate failure.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">@E</span></tt></td><td>Search: Shorthand for <tt class="docutils literal"><span class="pre">(!E .)* E</span></tt>. (Search loop for the pattern <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt>.)</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">{@} E</span></tt></td><td>Captured Search: Shorthand for <tt class="docutils literal"><span class="pre">{(!E .)*} E</span></tt>. (Search loop for the pattern <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt>.) Everything until and excluding <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> is captured.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">@@ E</span></tt></td><td>Same as <tt class="docutils literal"><span class="pre">{@} E</span></tt>.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">A <- E</span></tt></td><td>Rule: Bind the expression <tt class="docutils literal"><span class="pre"><span class="Identifier">E</span></span></tt> to the <em>nonterminal symbol</em> <tt class="docutils literal"><span class="pre"><span class="Identifier">A</span></span></tt>. <strong>Left recursive rules are not possible and crash the matching engine.</strong></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\identifier</span></tt></td><td>Built-in macro for a longer expression.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\ddd</span></tt></td><td>Character with decimal code <em>ddd</em>.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\"</span></tt>, etc.</td><td>Literal <tt class="docutils literal"><span class="pre">"</span></tt>, etc.</td></tr>
- </table>
- <h2><a class="toc-backref" id="peg-syntax-and-semantics-builtminusin-macros" href="#peg-syntax-and-semantics-builtminusin-macros">Built-in macros</a></h2><table border="1" class="docutils"><tr><th>macro</th><th>meaning</th></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\d</span></tt></td><td>any decimal digit: <tt class="docutils literal"><span class="pre">[0-9]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\D</span></tt></td><td>any character that is not a decimal digit: <tt class="docutils literal"><span class="pre">[^0-9]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\s</span></tt></td><td>any whitespace character: <tt class="docutils literal"><span class="pre">[ \9-\13]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\S</span></tt></td><td>any character that is not a whitespace character: <tt class="docutils literal"><span class="pre">[^ \9-\13]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\w</span></tt></td><td>any "word" character: <tt class="docutils literal"><span class="pre">[a-zA-Z0-9_]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\W</span></tt></td><td>any "non-word" character: <tt class="docutils literal"><span class="pre">[^a-zA-Z0-9_]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\a</span></tt></td><td>same as <tt class="docutils literal"><span class="pre">[a-zA-Z]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\A</span></tt></td><td>same as <tt class="docutils literal"><span class="pre">[^a-zA-Z]</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\n</span></tt></td><td>any newline combination: <tt class="docutils literal"><span class="pre">\10 / \13\10 / \13</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\i</span></tt></td><td>ignore case for matching; use this at the start of the PEG</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\y</span></tt></td><td>ignore style for matching; use this at the start of the PEG</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\skip</span></tt> pat</td><td>skip pattern <em>pat</em> before trying to match other tokens; this is useful for whitespace skipping, for example: <tt class="docutils literal"><span class="pre">\skip(\s*) {\ident} ':' {\ident}</span></tt> matches key value pairs ignoring whitespace around the <tt class="docutils literal"><span class="pre">':'</span></tt>.</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\ident</span></tt></td><td>a standard ASCII identifier: <tt class="docutils literal"><span class="pre">[a-zA-Z_][a-zA-Z_0-9]*</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\letter</span></tt></td><td>any Unicode letter</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\upper</span></tt></td><td>any Unicode uppercase letter</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\lower</span></tt></td><td>any Unicode lowercase letter</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\title</span></tt></td><td>any Unicode title letter</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\white</span></tt></td><td>any Unicode whitespace character</td></tr>
- </table><p>A backslash followed by a letter is a built-in macro, otherwise it is used for ordinary escaping:</p>
- <table border="1" class="docutils"><tr><th>notation</th><th>meaning</th></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\\</span></tt></td><td>a single backslash</td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\*</span></tt></td><td>same as <tt class="docutils literal"><span class="pre">'*'</span></tt></td></tr>
- <tr><td><tt class="docutils literal"><span class="pre">\t</span></tt></td><td>not a tabulator, but an (unknown) built-in</td></tr>
- </table>
- <h2><a class="toc-backref" id="peg-syntax-and-semantics-supported-peg-grammar" href="#peg-syntax-and-semantics-supported-peg-grammar">Supported PEG grammar</a></h2><p>The PEG parser implements this grammar (written in PEG syntax):</p>
- <pre># Example grammar of PEG in PEG syntax.
- # Comments start with '#'.
- # First symbol is the start symbol.
- grammar <- rule* / expr
- identifier <- [A-Za-z][A-Za-z0-9_]*
- charsetchar <- "\\" . / [^\]]
- charset <- "[" "^"? (charsetchar ("-" charsetchar)?)+ "]"
- stringlit <- identifier? ("\"" ("\\" . / [^"])* "\"" /
- "'" ("\\" . / [^'])* "'")
- builtin <- "\\" identifier / [^\13\10]
- comment <- '#' @ \n
- ig <- (\s / comment)* # things to ignore
- rule <- identifier \s* "<-" expr ig
- identNoArrow <- identifier !(\s* "<-")
- prefixOpr <- ig '&' / ig '!' / ig '@' / ig '{@}' / ig '@@'
- literal <- ig identifier? '$' '^'? [0-9]+ / '$' / '^' /
- ig identNoArrow /
- ig charset /
- ig stringlit /
- ig builtin /
- ig '.' /
- ig '_' /
- (ig "(" expr ig ")") /
- (ig "{" expr? ig "}")
- postfixOpr <- ig '?' / ig '*' / ig '+'
- primary <- prefixOpr* (literal postfixOpr*)
- # Concatenation has higher priority than choice:
- # ``a b / c`` means ``(a b) / c``
- seqExpr <- primary+
- expr <- seqExpr (ig "/" expr)*</pre>
- <p><strong>Note</strong>: As a special syntactic extension if the whole PEG is only a single expression, identifiers are not interpreted as non-terminals, but are interpreted as verbatim string:</p>
- <p><pre class="listing"><span class="Identifier">abc</span> <span class="Operator">=~</span> <span class="RawData">peg"abc"</span> <span class="Comment"># is true</span></pre></p>
- <p>So it is not necessary to write <tt class="docutils literal"><span class="pre">peg" 'abc' "</span></tt> in the above example.</p>
- <h2><a class="toc-backref" id="peg-syntax-and-semantics-examples" href="#peg-syntax-and-semantics-examples">Examples</a></h2><p>Check if <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> matches Nim's "while" keyword:</p>
- <p><pre class="listing"><span class="Identifier">s</span> <span class="Operator">=~</span> <span class="RawData">peg" y'while'"</span></pre></p>
- <p>Exchange (key, val)-pairs:</p>
- <p><pre class="listing"><span class="StringLit">"key: val; key2: val2"</span><span class="Operator">.</span><span class="Identifier">replacef</span><span class="Punctuation">(</span><span class="RawData">peg"{\ident} \s* ':' \s* {\ident}"</span><span class="Punctuation">,</span> <span class="StringLit">"$2: $1"</span><span class="Punctuation">)</span></pre></p>
- <p>Determine the <tt class="docutils literal"><span class="pre">#include</span></tt>'ed files of a C file:</p>
- <p><pre class="listing"><span class="Keyword">for</span> <span class="Identifier">line</span> <span class="Keyword">in</span> <span class="Identifier">lines</span><span class="Punctuation">(</span><span class="StringLit">"myfile.c"</span><span class="Punctuation">)</span><span class="Punctuation">:</span>
- <span class="Keyword">if</span> <span class="Identifier">line</span> <span class="Operator">=~</span> <span class="LongStringLit">peg"""s <- ws '#include' ws '"' {[^"]+} '"' ws
- comment <- '/*' @ '*/' / '//' .*
- ws <- (comment / \s+)* """</span><span class="Punctuation">:</span>
- <span class="Identifier">echo</span> <span class="Identifier">matches</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span></pre></p>
- <h2><a class="toc-backref" id="peg-syntax-and-semantics-peg-vs-regular-expression" href="#peg-syntax-and-semantics-peg-vs-regular-expression">PEG vs regular expression</a></h2><p>As a regular expression <tt class="docutils literal"><span class="pre">\[.*\]</span></tt> matches the longest possible text between <tt class="docutils literal"><span class="pre">'['</span></tt> and <tt class="docutils literal"><span class="pre">']'</span></tt>. As a PEG it never matches anything, because a PEG is deterministic: <tt class="docutils literal"><span class="pre">.*</span></tt> consumes the rest of the input, so <tt class="docutils literal"><span class="pre">\]</span></tt> never matches. As a PEG this needs to be written as: <tt class="docutils literal"><span class="pre">\[ ( !\] . )* \]</span></tt> (or <tt class="docutils literal"><span class="pre">\[ @ \]</span></tt>).</p>
- <p>Note that the regular expression does not behave as intended either: in the example <tt class="docutils literal"><span class="pre">*</span></tt> should not be greedy, so <tt class="docutils literal"><span class="pre">\[.*?\]</span></tt> should be used instead.</p>
- <h2><a class="toc-backref" id="peg-syntax-and-semantics-peg-construction" href="#peg-syntax-and-semantics-peg-construction">PEG construction</a></h2><p>There are two ways to construct a PEG in Nim code:</p>
- <ol class="simple"><li>Parsing a string into an AST which consists of <tt class="docutils literal"><span class="pre"><span class="Identifier">Peg</span></span></tt> nodes with the <tt class="docutils literal"><span class="pre"><span class="Identifier">peg</span></span></tt> proc.</li>
- <li>Constructing the AST directly with proc calls. This method does not support constructing rules, only simple expressions and is not as convenient. Its only advantage is that it does not pull in the whole PEG parser into your executable.</li>
- </ol>
- </p>
- <div class="section" id="6">
- <h1><a class="toc-backref" href="#6">Imports</a></h1>
- <dl class="item">
- <a class="reference external" href="syncio.html">syncio</a>, <a class="reference external" href="assertions.html">assertions</a>, <a class="reference external" href="strutils.html">strutils</a>, <a class="reference external" href="macros.html">macros</a>, <a class="reference external" href="decode_helpers.html">decode_helpers</a>, <a class="reference external" href="unicode.html">unicode</a>
- </dl>
- </div>
- <div class="section" id="7">
- <h1><a class="toc-backref" href="#7">Types</a></h1>
- <dl class="item">
- <div id="Captures">
- <dt><pre><a href="pegs.html#Captures"><span class="Identifier">Captures</span></a> <span class="Other">=</span> <span class="Keyword">object</span></pre></dt>
- <dd>
-
- contains the captured substrings.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L536" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L536" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="EInvalidPeg">
- <dt><pre><a href="pegs.html#EInvalidPeg"><span class="Identifier">EInvalidPeg</span></a> <span class="Other">=</span> <span class="Keyword">object</span> <span class="Keyword">of</span> <a href="exceptions.html#ValueError"><span class="Identifier">ValueError</span></a></pre></dt>
- <dd>
-
- raised if an invalid PEG has been detected
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1815" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1815" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="NonTerminal">
- <dt><pre><a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a> <span class="Other">=</span> <span class="Keyword">ref</span> <span class="Identifier">NonTerminalObj</span></pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L90" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L90" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="NonTerminalFlag">
- <dt><pre><a href="pegs.html#NonTerminalFlag"><span class="Identifier">NonTerminalFlag</span></a> <span class="Other">=</span> <span class="Keyword">enum</span>
- <span class="Identifier">ntDeclared</span><span class="Other">,</span> <span class="Identifier">ntUsed</span></pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L73" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L73" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="Peg">
- <dt><pre><a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">shallow</span>.} <span class="Other">=</span> <span class="Keyword">object</span>
- <span class="Keyword">case</span>
- <span class="Keyword">of</span> <span class="Identifier">pkEmpty</span> <span class="Operator">..</span> <span class="Identifier">pkWhitespace</span><span class="Other">:</span>
- <span class="Keyword">nil</span>
- <span class="Keyword">of</span> <span class="Identifier">pkTerminal</span><span class="Other">,</span> <span class="Identifier">pkTerminalIgnoreCase</span><span class="Other">,</span> <span class="Identifier">pkTerminalIgnoreStyle</span><span class="Other">:</span>
- <span class="Keyword">of</span> <span class="Identifier">pkChar</span><span class="Other">,</span> <span class="Identifier">pkGreedyRepChar</span><span class="Other">:</span>
- <span class="Keyword">of</span> <span class="Identifier">pkCharChoice</span><span class="Other">,</span> <span class="Identifier">pkGreedyRepSet</span><span class="Other">:</span>
- <span class="Keyword">of</span> <span class="Identifier">pkNonTerminal</span><span class="Other">:</span>
- <span class="Keyword">of</span> <span class="Identifier">pkBackRef</span> <span class="Operator">..</span> <span class="Identifier">pkBackRefIgnoreStyle</span><span class="Other">:</span>
- <span class="Keyword">else</span><span class="Other">:</span></pre></dt>
- <dd>
-
- type that represents a PEG
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L81" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L81" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="PegKind">
- <dt><pre><a href="pegs.html#PegKind"><span class="Identifier">PegKind</span></a> <span class="Other">=</span> <span class="Keyword">enum</span>
- <span class="Identifier">pkEmpty</span><span class="Other">,</span> <span class="Identifier">pkAny</span><span class="Other">,</span> <span class="Comment">## any character (.)</span>
- <span class="Identifier">pkAnyRune</span><span class="Other">,</span> <span class="Comment">## any Unicode character (_)</span>
- <span class="Identifier">pkNewLine</span><span class="Other">,</span> <span class="Comment">## CR-LF, LF, CR</span>
- <span class="Identifier">pkLetter</span><span class="Other">,</span> <span class="Comment">## Unicode letter</span>
- <span class="Identifier">pkLower</span><span class="Other">,</span> <span class="Comment">## Unicode lower case letter</span>
- <span class="Identifier">pkUpper</span><span class="Other">,</span> <span class="Comment">## Unicode upper case letter</span>
- <span class="Identifier">pkTitle</span><span class="Other">,</span> <span class="Comment">## Unicode title character</span>
- <span class="Identifier">pkWhitespace</span><span class="Other">,</span> <span class="Comment">## Unicode whitespace character</span>
- <span class="Identifier">pkTerminal</span><span class="Other">,</span> <span class="Identifier">pkTerminalIgnoreCase</span><span class="Other">,</span> <span class="Identifier">pkTerminalIgnoreStyle</span><span class="Other">,</span> <span class="Identifier">pkChar</span><span class="Other">,</span> <span class="Comment">## single character to match</span>
- <span class="Identifier">pkCharChoice</span><span class="Other">,</span> <span class="Identifier">pkNonTerminal</span><span class="Other">,</span> <span class="Identifier">pkSequence</span><span class="Other">,</span> <span class="Comment">## a b c ... --> Internal DSL: peg(a, b, c)</span>
- <span class="Identifier">pkOrderedChoice</span><span class="Other">,</span> <span class="Comment">## a / b / ... --> Internal DSL: a / b or /[a, b, c]</span>
- <span class="Identifier">pkGreedyRep</span><span class="Other">,</span> <span class="Comment">## a* --> Internal DSL: *a</span>
- <span class="Comment">## a+ --> (a a*)</span>
- <span class="Identifier">pkGreedyRepChar</span><span class="Other">,</span> <span class="Comment">## x* where x is a single character (superop)</span>
- <span class="Identifier">pkGreedyRepSet</span><span class="Other">,</span> <span class="Comment">## [set]* (superop)</span>
- <span class="Identifier">pkGreedyAny</span><span class="Other">,</span> <span class="Comment">## .* or _* (superop)</span>
- <span class="Identifier">pkOption</span><span class="Other">,</span> <span class="Comment">## a? --> Internal DSL: ?a</span>
- <span class="Identifier">pkAndPredicate</span><span class="Other">,</span> <span class="Comment">## &a --> Internal DSL: &a</span>
- <span class="Identifier">pkNotPredicate</span><span class="Other">,</span> <span class="Comment">## !a --> Internal DSL: !a</span>
- <span class="Identifier">pkCapture</span><span class="Other">,</span> <span class="Comment">## {a} --> Internal DSL: capture(a)</span>
- <span class="Identifier">pkBackRef</span><span class="Other">,</span> <span class="Comment">## $i --> Internal DSL: backref(i)</span>
- <span class="Identifier">pkBackRefIgnoreCase</span><span class="Other">,</span> <span class="Identifier">pkBackRefIgnoreStyle</span><span class="Other">,</span> <span class="Identifier">pkSearch</span><span class="Other">,</span> <span class="Comment">## @a --> Internal DSL: !*a</span>
- <span class="Identifier">pkCapturedSearch</span><span class="Other">,</span> <span class="Comment">## {@} a --> Internal DSL: !*\a</span>
- <span class="Identifier">pkRule</span><span class="Other">,</span> <span class="Comment">## a <- b</span>
- <span class="Identifier">pkList</span><span class="Other">,</span> <span class="Comment">## a, b</span>
- <span class="Identifier">pkStartAnchor</span> <span class="Comment">## ^ --> Internal DSL: startAnchor()</span></pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L38" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L38" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </dl>
- </div>
- <div class="section" id="10">
- <h1><a class="toc-backref" href="#10">Consts</a></h1>
- <dl class="item">
- <div id="MaxSubpatterns">
- <dt><pre><a href="pegs.html#MaxSubpatterns"><span class="Identifier">MaxSubpatterns</span></a> <span class="Other">=</span> <span class="DecNumber">20</span></pre></dt>
- <dd>
-
- defines the maximum number of subpatterns that can be captured. More subpatterns cannot be captured!
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L34" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L34" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </dl>
- </div>
- <div class="section" id="12">
- <h1><a class="toc-backref" href="#12">Procs</a></h1>
- <dl class="item">
- <div id="!-procs-all">
- <div id="!,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%21%2CPeg"><span class="Identifier">`!`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsNotPredicate"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a "not predicate" with the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L264" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L264" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="!*-procs-all">
- <div id="!*,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%21%2A%2CPeg"><span class="Identifier">`!*`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsSearch"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a "search" for the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L247" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L247" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="!*\-procs-all">
- <div id="!*\,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%21%2A%5C%2CPeg"><span class="Identifier">`!*\`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npgegsCapturedSearch"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a "captured search" for the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L251" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L251" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="$-procs-all">
- <div id="$,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%24%2CPeg"><span class="Identifier">`$`</span></a><span class="Other">(</span><span class="Identifier">r</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsToString"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- converts a PEG to its string representation
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L528" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L528" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="&-procs-all">
- <div id="&,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%26%2CPeg"><span class="Identifier">`&`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsAndPredicate"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs an "and predicate" with the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L260" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L260" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="*-procs-all">
- <div id="*,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%2A%2CPeg"><span class="Identifier">`*`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsGreedyRep"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a "greedy repetition" for the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L233" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L233" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="+-procs-all">
- <div id="+,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%2B%2CPeg"><span class="Identifier">`+`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsGreedyPosRep"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a "greedy positive repetition" with the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L256" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L256" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="/-procs-all">
- <div id="/,varargs[Peg]">
- <dt><pre><span class="Keyword">func</span> <a href="#%2F%2Cvarargs%5BPeg%5D"><span class="Identifier">`/`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="system.html#varargs"><span class="Identifier">varargs</span></a><span class="Other">[</span><a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsOrderedChoice"</span><span class="Other">,</span>
- <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs an ordered choice with the PEGs in <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L201" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L201" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="?-procs-all">
- <div id="?,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#%3F%2CPeg"><span class="Identifier">`?`</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsOptional"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs an optional for the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L223" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L223" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="any-procs-all">
- <div id="any">
- <dt><pre><span class="Keyword">func</span> <a href="#any"><span class="Identifier">any</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <span id="any-character_1">any character</span> (<tt class="docutils literal"><span class="pre">.</span></tt>)
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L268" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L268" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="anyRune-procs-all">
- <div id="anyRune">
- <dt><pre><span class="Keyword">func</span> <a href="#anyRune"><span class="Identifier">anyRune</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <span id="any-rune_1">any rune</span> (<tt class="docutils literal"><span class="pre">_</span></tt>)
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L272" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L272" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="backref-procs-all">
- <div id="backref,range[],bool">
- <dt><pre><span class="Keyword">func</span> <a href="#backref%2Crange%5B%5D%2Cbool"><span class="Identifier">backref</span></a><span class="Other">(</span><span class="Identifier">index</span><span class="Other">:</span> <a href="system.html#range"><span class="Identifier">range</span></a><span class="Other">[</span><span class="DecNumber">1</span> <span class="Operator">..</span> <span class="Identifier">MaxSubpatterns</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">reverse</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> <span class="Other">=</span> <span class="Identifier">false</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a back reference of the given <tt class="docutils literal"><span class="pre"><span class="Identifier">index</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">index</span></span></tt> starts counting from 1. <tt class="docutils literal"><span class="pre"><span class="Identifier">reverse</span></span></tt> specifies whether indexing starts from the end of the capture list.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L313" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L313" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="backrefIgnoreCase-procs-all">
- <div id="backrefIgnoreCase,range[],bool">
- <dt><pre><span class="Keyword">func</span> <a href="#backrefIgnoreCase%2Crange%5B%5D%2Cbool"><span class="Identifier">backrefIgnoreCase</span></a><span class="Other">(</span><span class="Identifier">index</span><span class="Other">:</span> <a href="system.html#range"><span class="Identifier">range</span></a><span class="Other">[</span><span class="DecNumber">1</span> <span class="Operator">..</span> <span class="Identifier">MaxSubpatterns</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">reverse</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> <span class="Other">=</span> <span class="Identifier">false</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a back reference of the given <tt class="docutils literal"><span class="pre"><span class="Identifier">index</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">index</span></span></tt> starts counting from 1. <tt class="docutils literal"><span class="pre"><span class="Identifier">reverse</span></span></tt> specifies whether indexing starts from the end of the capture list. Ignores case for matching.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L320" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L320" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="backrefIgnoreStyle-procs-all">
- <div id="backrefIgnoreStyle,range[],bool">
- <dt><pre><span class="Keyword">func</span> <a href="#backrefIgnoreStyle%2Crange%5B%5D%2Cbool"><span class="Identifier">backrefIgnoreStyle</span></a><span class="Other">(</span><span class="Identifier">index</span><span class="Other">:</span> <a href="system.html#range"><span class="Identifier">range</span></a><span class="Other">[</span><span class="DecNumber">1</span> <span class="Operator">..</span> <span class="Identifier">MaxSubpatterns</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">reverse</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> <span class="Other">=</span> <span class="Identifier">false</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a back reference of the given <tt class="docutils literal"><span class="pre"><span class="Identifier">index</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">index</span></span></tt> starts counting from 1. <tt class="docutils literal"><span class="pre"><span class="Identifier">reverse</span></span></tt> specifies whether indexing starts from the end of the capture list. Ignores style for matching.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L327" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L327" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="bounds-procs-all">
- <div id="bounds,Captures,range[]">
- <dt><pre><span class="Keyword">func</span> <a href="#bounds%2CCaptures%2Crange%5B%5D"><span class="Identifier">bounds</span></a><span class="Other">(</span><span class="Identifier">c</span><span class="Other">:</span> <a href="pegs.html#Captures"><span class="Identifier">Captures</span></a><span class="Other">;</span> <span class="Identifier">i</span><span class="Other">:</span> <a href="system.html#range"><span class="Identifier">range</span></a><span class="Other">[</span><span class="DecNumber">0</span> <span class="Operator">..</span> <span class="DecNumber">20</span> <span class="Operator">-</span> <span class="DecNumber">1</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Keyword">tuple</span><span class="Other">[</span><span class="Identifier">first</span><span class="Other">,</span> <span class="Identifier">last</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">]</span> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns the bounds <tt class="docutils literal"><span class="pre">[first..last]</span></tt> of the <tt class="docutils literal"><span class="pre"><span class="Identifier">i</span></span></tt>'th capture.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L541" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L541" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="capture-procs-all">
- <div id="capture,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#capture%2CPeg"><span class="Identifier">capture</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> <span class="Other">=</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">(</span><span class="Identifier">kind</span><span class="Other">:</span> <span class="DecNumber">pkEmpty</span><span class="Other">)</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegsCapture"</span><span class="Other">,</span>
- <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a capture with the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L309" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L309" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="ch-procs-all">
- <div id="ch,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#ch%2CPeg"><span class="Identifier">ch</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#char"><span class="Identifier">char</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns the <em>char</em> representation of a given <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L99" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L99" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="charChoice-procs-all">
- <div id="charChoice,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#charChoice%2CPeg"><span class="Identifier">charChoice</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Keyword">ref</span> <a href="system.html#set"><span class="Identifier">set</span></a><span class="Other">[</span><a href="system.html#char"><span class="Identifier">char</span></a><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns the <em>charChoice</em> field of a given <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L103" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L103" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="charSet-procs-all">
- <div id="charSet,set[char]">
- <dt><pre><span class="Keyword">func</span> <a href="#charSet%2Cset%5Bchar%5D"><span class="Identifier">charSet</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#set"><span class="Identifier">set</span></a><span class="Other">[</span><a href="system.html#char"><span class="Identifier">char</span></a><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a PEG from a character set <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L167" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L167" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="col-procs-all">
- <div id="col,NonTerminal">
- <dt><pre><span class="Keyword">func</span> <a href="#col%2CNonTerminal"><span class="Identifier">col</span></a><span class="Other">(</span><span class="Identifier">nt</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Gets the column number of the definition of the parent <em>Peg</em> object variant of a given <em>NonTerminal</em>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L133" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L133" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="contains-procs-all">
- <div id="contains,string,Peg,openArray[string],int">
- <dt><pre><span class="Keyword">func</span> <a href="#contains%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint"><span class="Identifier">contains</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">matches</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Capture"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- same as <tt class="docutils literal"><span class="pre">find(s, pattern, matches, start) >= 0</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1207" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1207" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="contains,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#contains%2Cstring%2CPeg%2Cint"><span class="Identifier">contains</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- same as <tt class="docutils literal"><span class="pre">find(s, pattern, start) >= 0</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1202" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1202" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="endAnchor-procs-all">
- <div id="endAnchor">
- <dt><pre><span class="Keyword">func</span> <a href="#endAnchor"><span class="Identifier">endAnchor</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">$</span></tt> which matches the end of the input.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L305" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L305" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="endsWith-procs-all">
- <div id="endsWith,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#endsWith%2Cstring%2CPeg%2Cint"><span class="Identifier">endsWith</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">suffix</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns true if <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> ends with the pattern <tt class="docutils literal"><span class="pre"><span class="Identifier">suffix</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1217" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1217" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="escapePeg-procs-all">
- <div id="escapePeg,string">
- <dt><pre><span class="Keyword">func</span> <a href="#escapePeg%2Cstring"><span class="Identifier">escapePeg</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- escapes <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> so that it is matched verbatim when used as a peg.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L2067" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L2067" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="find-procs-all">
- <div id="find,string,Peg,openArray[string],int">
- <dt><pre><span class="Keyword">func</span> <a href="#find%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint"><span class="Identifier">find</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">matches</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Capture"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns the starting position of <tt class="docutils literal"><span class="pre">pattern</span></tt> in <tt class="docutils literal"><span class="pre">s</span></tt> and the captured substrings in the array <tt class="docutils literal"><span class="pre">matches</span></tt>. If it does not match, nothing is written into <tt class="docutils literal"><span class="pre">matches</span></tt> and -1 is returned.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1119" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1119" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="find,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#find%2Cstring%2CPeg%2Cint"><span class="Identifier">find</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span>
- <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns the starting position of <tt class="docutils literal"><span class="pre">pattern</span></tt> in <tt class="docutils literal"><span class="pre">s</span></tt>. If it does not match, -1 is returned.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1149" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1149" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="findAll-procs-all">
- <div id="findAll,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#findAll%2Cstring%2CPeg%2Cint"><span class="Identifier">findAll</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns all matching <em>substrings</em> of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> that match <tt class="docutils literal"><span class="pre"><span class="Identifier">pattern</span></span></tt>. If it does not match, <tt class="docutils literal"><span class="pre"><span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">]</span></span></tt> is returned.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1171" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1171" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="findBounds-procs-all">
- <div id="findBounds,string,Peg,openArray[string],int">
- <dt><pre><span class="Keyword">func</span> <a href="#findBounds%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint"><span class="Identifier">findBounds</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">matches</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">;</span>
- <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <span class="Keyword">tuple</span><span class="Other">[</span><span class="Identifier">first</span><span class="Other">,</span> <span class="Identifier">last</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Capture"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns the starting position and end position of <tt class="docutils literal"><span class="pre">pattern</span></tt> in <tt class="docutils literal"><span class="pre">s</span></tt> and the captured substrings in the array <tt class="docutils literal"><span class="pre">matches</span></tt>. If it does not match, nothing is written into <tt class="docutils literal"><span class="pre">matches</span></tt> and (-1,0) is returned.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1133" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1133" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="flags-procs-all">
- <div id="flags,NonTerminal">
- <dt><pre><span class="Keyword">func</span> <a href="#flags%2CNonTerminal"><span class="Identifier">flags</span></a><span class="Other">(</span><span class="Identifier">nt</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#set"><span class="Identifier">set</span></a><span class="Other">[</span><a href="pegs.html#NonTerminalFlag"><span class="Identifier">NonTerminalFlag</span></a><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Gets the <em>NonTerminalFlag</em>-typed flags field of the parent <em>Peg</em> variant object of a given <em>NonTerminal</em>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L137" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L137" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="index-procs-all">
- <div id="index,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#index%2CPeg"><span class="Identifier">index</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#range"><span class="Identifier">range</span></a><span class="Other">[</span><span class="Operator">-</span><span class="DecNumber">20</span> <span class="Operator">..</span> <span class="DecNumber">20</span> <span class="Operator">-</span> <span class="DecNumber">1</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns the back-reference index of a captured sub-pattern in the <em>Captures</em> object for a given <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L111" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L111" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="kind-procs-all">
- <div id="kind,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#kind%2CPeg"><span class="Identifier">kind</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#PegKind"><span class="Identifier">PegKind</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns the <em>PegKind</em> of a given <em>Peg</em> object.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L92" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L92" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="line-procs-all">
- <div id="line,NonTerminal">
- <dt><pre><span class="Keyword">func</span> <a href="#line%2CNonTerminal"><span class="Identifier">line</span></a><span class="Other">(</span><span class="Identifier">nt</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Gets the line number of the definition of the parent <em>Peg</em> object variant of a given <em>NonTerminal</em>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L129" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L129" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="match-procs-all">
- <div id="match,string,Peg,openArray[string],int">
- <dt><pre><span class="Keyword">func</span> <a href="#match%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint"><span class="Identifier">match</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">matches</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Capture"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns <tt class="docutils literal"><span class="pre">true</span></tt> if <tt class="docutils literal"><span class="pre">s[start..]</span></tt> matches the <tt class="docutils literal"><span class="pre">pattern</span></tt> and the captured substrings in the array <tt class="docutils literal"><span class="pre">matches</span></tt>. If it does not match, nothing is written into <tt class="docutils literal"><span class="pre">matches</span></tt> and <tt class="docutils literal"><span class="pre">false</span></tt> is returned.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1105" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1105" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="match,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#match%2Cstring%2CPeg%2Cint"><span class="Identifier">match</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns <tt class="docutils literal"><span class="pre">true</span></tt> if <tt class="docutils literal"><span class="pre">s</span></tt> matches the <tt class="docutils literal"><span class="pre">pattern</span></tt> beginning from <tt class="docutils literal"><span class="pre">start</span></tt>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1113" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1113" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="matchLen-procs-all">
- <div id="matchLen,string,Peg,openArray[string],int">
- <dt><pre><span class="Keyword">func</span> <a href="#matchLen%2Cstring%2CPeg%2CopenArray%5Bstring%5D%2Cint"><span class="Identifier">matchLen</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">matches</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Capture"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- the same as <tt class="docutils literal"><span class="pre">match</span></tt>, but it returns the length of the match, if there is no match, -1 is returned. Note that a match length of zero can happen. It's possible that a suffix of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> remains that does not belong to the match.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1086" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1086" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="matchLen,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#matchLen%2Cstring%2CPeg%2Cint"><span class="Identifier">matchLen</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- the same as <tt class="docutils literal"><span class="pre">match</span></tt>, but it returns the length of the match, if there is no match, -1 is returned. Note that a match length of zero can happen. It's possible that a suffix of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> remains that does not belong to the match.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1096" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1096" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="name-procs-all">
- <div id="name,NonTerminal">
- <dt><pre><span class="Keyword">func</span> <a href="#name%2CNonTerminal"><span class="Identifier">name</span></a><span class="Other">(</span><span class="Identifier">nt</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Gets the name of the symbol represented by the parent <em>Peg</em> object variant of a given <em>NonTerminal</em>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L125" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L125" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="newLine-procs-all">
- <div id="newLine">
- <dt><pre><span class="Keyword">func</span> <a href="#newLine"><span class="Identifier">newLine</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <span id="newline_1">newline</span> (<tt class="docutils literal"><span class="pre">\n</span></tt>)
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L276" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L276" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="newNonTerminal-procs-all">
- <div id="newNonTerminal,string,int,int">
- <dt><pre><span class="Keyword">func</span> <a href="#newNonTerminal%2Cstring%2Cint%2Cint"><span class="Identifier">newNonTerminal</span></a><span class="Other">(</span><span class="Identifier">name</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">line</span><span class="Other">,</span> <span class="Identifier">column</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a nonterminal symbol
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L360" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L360" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="nonterminal-procs-all">
- <div id="nonterminal,NonTerminal">
- <dt><pre><span class="Keyword">func</span> <a href="#nonterminal%2CNonTerminal"><span class="Identifier">nonterminal</span></a><span class="Other">(</span><span class="Identifier">n</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a PEG that consists of the nonterminal symbol
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L350" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L350" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="nt-procs-all">
- <div id="nt,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#nt%2CPeg"><span class="Identifier">nt</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns the <em>NonTerminal</em> object of a given <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L107" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L107" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="parallelReplace-procs-all">
- <div id="parallelReplace,string,varargs[tuple[Peg,string]]">
- <dt><pre><span class="Keyword">func</span> <a href="#parallelReplace%2Cstring%2Cvarargs%5Btuple%5BPeg%2Cstring%5D%5D"><span class="Identifier">parallelReplace</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">subs</span><span class="Other">:</span> <a href="system.html#varargs"><span class="Identifier">varargs</span></a><span class="Other">[</span><span class="Keyword">tuple</span><span class="Other">[</span><span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">,</span> <span class="Identifier">repl</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns a modified copy of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> with the substitutions in <tt class="docutils literal"><span class="pre"><span class="Identifier">subs</span></span></tt> applied in parallel.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1272" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1272" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="parsePeg-procs-all">
- <div id="parsePeg,string,string,int,int">
- <dt><pre><span class="Keyword">func</span> <a href="#parsePeg%2Cstring%2Cstring%2Cint%2Cint"><span class="Identifier">parsePeg</span></a><span class="Other">(</span><span class="Identifier">pattern</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">filename</span> <span class="Other">=</span> <span class="StringLit">"pattern"</span><span class="Other">;</span> <span class="Identifier">line</span> <span class="Other">=</span> <span class="DecNumber">1</span><span class="Other">;</span> <span class="Identifier">col</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">EInvalidPeg</span><span class="Other">,</span> <span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a Peg object from <tt class="docutils literal"><span class="pre"><span class="Identifier">pattern</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">filename</span></span></tt>, <tt class="docutils literal"><span class="pre"><span class="Identifier">line</span></span></tt>, <tt class="docutils literal"><span class="pre"><span class="Identifier">col</span></span></tt> are used for error messages, but they only provide start offsets. <tt class="docutils literal"><span class="pre"><span class="Identifier">parsePeg</span></span></tt> keeps track of line and column numbers within <tt class="docutils literal"><span class="pre"><span class="Identifier">pattern</span></span></tt>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L2045" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L2045" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="peg-procs-all">
- <div id="peg,string">
- <dt><pre><span class="Keyword">func</span> <a href="#peg%2Cstring"><span class="Identifier">peg</span></a><span class="Other">(</span><span class="Identifier">pattern</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">EInvalidPeg</span><span class="Other">,</span> <span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a Peg object from the <tt class="docutils literal"><span class="pre"><span class="Identifier">pattern</span></span></tt>. The short name has been chosen to encourage its use as a raw string modifier:<pre>peg"{\ident} \s* '=' \s* {.*}"</pre>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L2060" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L2060" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="rawMatch-procs-all">
- <div id="rawMatch,string,Peg,int,Captures">
- <dt><pre><span class="Keyword">func</span> <a href="#rawMatch%2Cstring%2CPeg%2Cint%2CCaptures"><span class="Identifier">rawMatch</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">c</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="pegs.html#Captures"><span class="Identifier">Captures</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- low-level matching proc that implements the PEG interpreter. Use this for maximum efficiency (every other PEG operation ends up calling this proc). Returns -1 if it does not match, else the length of the match
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L871" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L871" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="replace-procs-all">
- <div id="replace,string,Peg,proc(int,int,openArray[string])">
- <dt><pre><span class="Keyword">func</span> <a href="#replace%2Cstring%2CPeg%2Cproc%28int%2Cint%2CopenArray%5Bstring%5D%29"><span class="Identifier">replace</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">sub</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span>
- <span class="Identifier">cb</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">match</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">cnt</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">caps</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1cb"</span><span class="Other">,</span> </span><span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">cb</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- <p>Replaces <tt class="docutils literal"><span class="pre"><span class="Identifier">sub</span></span></tt> in <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> by the resulting strings from the callback. The callback proc receives the index of the current match (starting with 0), the count of captures and an open array with the captures of each match. Examples:</p>
- <p><pre class="listing"><span class="Keyword">func</span> <span class="Identifier">handleMatches</span><span class="Operator">*</span><span class="Punctuation">(</span><span class="Identifier">m</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">,</span> <span class="Identifier">n</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">,</span> <span class="Identifier">c</span><span class="Punctuation">:</span> <span class="Identifier">openArray</span><span class="Punctuation">[</span><span class="Identifier">string</span><span class="Punctuation">]</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">string</span> <span class="Operator">=</span>
- <span class="Identifier">result</span> <span class="Operator">=</span> <span class="StringLit">""</span>
- <span class="Keyword">if</span> <span class="Identifier">m</span> <span class="Operator">></span> <span class="DecNumber">0</span><span class="Punctuation">:</span>
- <span class="Identifier">result</span><span class="Operator">.</span><span class="Identifier">add</span> <span class="StringLit">", "</span>
- <span class="Identifier">result</span><span class="Operator">.</span><span class="Identifier">add</span> <span class="Keyword">case</span> <span class="Identifier">n</span><span class="Punctuation">:</span>
- <span class="Keyword">of</span> <span class="DecNumber">2</span><span class="Punctuation">:</span> <span class="Identifier">c</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Operator">.</span><span class="Identifier">toLower</span> <span class="Operator">&</span> <span class="StringLit">": '"</span> <span class="Operator">&</span> <span class="Identifier">c</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span> <span class="Operator">&</span> <span class="StringLit">"'"</span>
- <span class="Keyword">of</span> <span class="DecNumber">1</span><span class="Punctuation">:</span> <span class="Identifier">c</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Operator">.</span><span class="Identifier">toLower</span> <span class="Operator">&</span> <span class="StringLit">": ''"</span>
- <span class="Keyword">else</span><span class="Punctuation">:</span> <span class="StringLit">""</span>
- <span class="Keyword">let</span> <span class="Identifier">s</span> <span class="Operator">=</span> <span class="StringLit">"Var1=key1;var2=Key2; VAR3"</span>
- <span class="Identifier">echo</span> <span class="Identifier">s</span><span class="Operator">.</span><span class="Identifier">replace</span><span class="Punctuation">(</span><span class="RawData">peg"{\ident}('='{\ident})* ';'* \s*"</span><span class="Punctuation">,</span> <span class="Identifier">handleMatches</span><span class="Punctuation">)</span></pre></p>
- <p>Results in:</p>
- <p><pre class="listing"><span class="StringLit">"var1: 'key1', var2: 'Key2', var3: ''"</span></pre></p>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1299" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1299" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="replace,string,Peg,string">
- <dt><pre><span class="Keyword">func</span> <a href="#replace%2Cstring%2CPeg%2Cstring"><span class="Identifier">replace</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">sub</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">by</span> <span class="Other">=</span> <span class="StringLit">""</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span>
- <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Replaces <tt class="docutils literal"><span class="pre"><span class="Identifier">sub</span></span></tt> in <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> by the string <tt class="docutils literal"><span class="pre"><span class="Identifier">by</span></span></tt>. Captures cannot be accessed in <tt class="docutils literal"><span class="pre"><span class="Identifier">by</span></span></tt>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1255" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1255" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="replacef-procs-all">
- <div id="replacef,string,Peg,string">
- <dt><pre><span class="Keyword">func</span> <a href="#replacef%2Cstring%2CPeg%2Cstring"><span class="Identifier">replacef</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">sub</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">by</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- <p>Replaces <tt class="docutils literal"><span class="pre"><span class="Identifier">sub</span></span></tt> in <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> by the string <tt class="docutils literal"><span class="pre"><span class="Identifier">by</span></span></tt>. Captures can be accessed in <tt class="docutils literal"><span class="pre"><span class="Identifier">by</span></span></tt> with the notation <tt class="docutils literal"><span class="pre">$i</span></tt> and <tt class="docutils literal"><span class="pre">$#</span></tt> (see strutils.<tt class="docutils literal"><span class="pre"><span class="Operator">%</span></span></tt>). Examples:</p>
- <p><pre class="listing"><span class="StringLit">"var1=key; var2=key2"</span><span class="Operator">.</span><span class="Identifier">replacef</span><span class="Punctuation">(</span><span class="RawData">peg"{\ident}'='{\ident}"</span><span class="Punctuation">,</span> <span class="StringLit">"$1<-$2$2"</span><span class="Punctuation">)</span></pre></p>
- <p>Results in:</p>
- <p><pre class="listing"><span class="StringLit">"var1<-keykey; val2<-key2key2"</span></pre></p>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1225" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1225" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="rule-procs-all">
- <div id="rule,NonTerminal">
- <dt><pre><span class="Keyword">func</span> <a href="#rule%2CNonTerminal"><span class="Identifier">rule</span></a><span class="Other">(</span><span class="Identifier">nt</span><span class="Other">:</span> <a href="pegs.html#NonTerminal"><span class="Identifier">NonTerminal</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Gets the <em>Peg</em> object representing the rule definition of the parent <em>Peg</em> object variant of a given <em>NonTerminal</em>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L141" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L141" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="sequence-procs-all">
- <div id="sequence,varargs[Peg]">
- <dt><pre><span class="Keyword">func</span> <a href="#sequence%2Cvarargs%5BPeg%5D"><span class="Identifier">sequence</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="system.html#varargs"><span class="Identifier">varargs</span></a><span class="Other">[</span><a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a sequence with all the PEGs from <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L218" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L218" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="split-procs-all">
- <div id="split,string,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#split%2Cstring%2CPeg"><span class="Identifier">split</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">sep</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span>
- <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Splits the string <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> into substrings.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1392" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1392" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="startAnchor-procs-all">
- <div id="startAnchor">
- <dt><pre><span class="Keyword">func</span> <a href="#startAnchor"><span class="Identifier">startAnchor</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">^</span></tt> which matches the start of the input.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L301" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L301" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="startsWith-procs-all">
- <div id="startsWith,string,Peg,int">
- <dt><pre><span class="Keyword">func</span> <a href="#startsWith%2Cstring%2CPeg%2Cint"><span class="Identifier">startsWith</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">prefix</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- returns true if <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> starts with the pattern <tt class="docutils literal"><span class="pre"><span class="Identifier">prefix</span></span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1212" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1212" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="term-procs-all">
- <div id="term,Peg">
- <dt><pre><span class="Keyword">func</span> <a href="#term%2CPeg"><span class="Identifier">term</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Returns the <em>string</em> representation of a given <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L95" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L95" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="term,char">
- <dt><pre><span class="Keyword">func</span> <a href="#term%2Cchar"><span class="Identifier">term</span></a><span class="Other">(</span><span class="Identifier">t</span><span class="Other">:</span> <a href="system.html#char"><span class="Identifier">char</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Char"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a PEG from a terminal char
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L162" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L162" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="term,string">
- <dt><pre><span class="Keyword">func</span> <a href="#term%2Cstring"><span class="Identifier">term</span></a><span class="Other">(</span><span class="Identifier">t</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1Str"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a PEG from a terminal string
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L145" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L145" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="termIgnoreCase-procs-all">
- <div id="termIgnoreCase,string">
- <dt><pre><span class="Keyword">func</span> <a href="#termIgnoreCase%2Cstring"><span class="Identifier">termIgnoreCase</span></a><span class="Other">(</span><span class="Identifier">t</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a PEG from a terminal string; ignore case for matching
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L152" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L152" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="termIgnoreStyle-procs-all">
- <div id="termIgnoreStyle,string">
- <dt><pre><span class="Keyword">func</span> <a href="#termIgnoreStyle%2Cstring"><span class="Identifier">termIgnoreStyle</span></a><span class="Other">(</span><span class="Identifier">t</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span> <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs a PEG from a terminal string; ignore style for matching
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L157" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L157" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="transformFile-procs-all">
- <div id="transformFile,string,string,varargs[tuple[Peg,string]]">
- <dt><pre><span class="Keyword">proc</span> <a href="#transformFile%2Cstring%2Cstring%2Cvarargs%5Btuple%5BPeg%2Cstring%5D%5D"><span class="Identifier">transformFile</span></a><span class="Other">(</span><span class="Identifier">infile</span><span class="Other">,</span> <span class="Identifier">outfile</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span>
- <span class="Identifier">subs</span><span class="Other">:</span> <a href="system.html#varargs"><span class="Identifier">varargs</span></a><span class="Other">[</span><span class="Keyword">tuple</span><span class="Other">[</span><span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">,</span> <span class="Identifier">repl</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">]</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">gcsafe</span><span class="Other">,</span>
- <span class="Identifier">extern</span><span class="Other">:</span> <span class="StringLit">"npegs$1"</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">,</span> <span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- <p>reads in the file <tt class="docutils literal"><span class="pre"><span class="Identifier">infile</span></span></tt>, performs a parallel replacement (calls <tt class="docutils literal"><span class="pre"><span class="Identifier">parallelReplace</span></span></tt>) and writes back to <tt class="docutils literal"><span class="pre"><span class="Identifier">outfile</span></span></tt>. Raises <tt class="docutils literal"><span class="pre">IOError</span></tt> if an error occurs. This is supposed to be used for quick scripting.</p>
- <p><strong>Note</strong>: this proc does not exist while using the JS backend.</p>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1344" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1344" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="unicodeLetter-procs-all">
- <div id="unicodeLetter">
- <dt><pre><span class="Keyword">func</span> <a href="#unicodeLetter"><span class="Identifier">unicodeLetter</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">\letter</span></tt> which matches any Unicode letter.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L280" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L280" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="unicodeLower-procs-all">
- <div id="unicodeLower">
- <dt><pre><span class="Keyword">func</span> <a href="#unicodeLower"><span class="Identifier">unicodeLower</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">\lower</span></tt> which matches any Unicode lowercase letter.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L284" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L284" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="unicodeTitle-procs-all">
- <div id="unicodeTitle">
- <dt><pre><span class="Keyword">func</span> <a href="#unicodeTitle"><span class="Identifier">unicodeTitle</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">\title</span></tt> which matches any Unicode title letter.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L292" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L292" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="unicodeUpper-procs-all">
- <div id="unicodeUpper">
- <dt><pre><span class="Keyword">func</span> <a href="#unicodeUpper"><span class="Identifier">unicodeUpper</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">\upper</span></tt> which matches any Unicode uppercase letter.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L288" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L288" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="unicodeWhitespace-procs-all">
- <div id="unicodeWhitespace">
- <dt><pre><span class="Keyword">func</span> <a href="#unicodeWhitespace"><span class="Identifier">unicodeWhitespace</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- constructs the PEG <tt class="docutils literal"><span class="pre">\white</span></tt> which matches any Unicode whitespace character.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L296" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L296" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- </dl>
- </div>
- <div class="section" id="15">
- <h1><a class="toc-backref" href="#15">Iterators</a></h1>
- <dl class="item">
- <div id="findAll-iterators-all">
- <div id="findAll.i,string,Peg,int">
- <dt><pre><span class="Keyword">iterator</span> <a href="#findAll.i%2Cstring%2CPeg%2Cint"><span class="Identifier">findAll</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">;</span> <span class="Identifier">start</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- yields all matching <em>substrings</em> of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> that match <tt class="docutils literal"><span class="pre"><span class="Identifier">pattern</span></span></tt>.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1158" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1158" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="items-iterators-all">
- <div id="items.i,Peg">
- <dt><pre><span class="Keyword">iterator</span> <a href="#items.i%2CPeg"><span class="Identifier">items</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Yields the child nodes of a <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L115" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L115" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="pairs-iterators-all">
- <div id="pairs.i,Peg">
- <dt><pre><span class="Keyword">iterator</span> <a href="#pairs.i%2CPeg"><span class="Identifier">pairs</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Other">(</span><a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">,</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Yields the indices and child nodes of a <em>Peg</em> variant object where present.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L120" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L120" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="split-iterators-all">
- <div id="split.i,string,Peg">
- <dt><pre><span class="Keyword">iterator</span> <a href="#split.i%2Cstring%2CPeg"><span class="Identifier">split</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">sep</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- <p>Splits the string <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> into substrings.</p>
- <p>Substrings are separated by the PEG <tt class="docutils literal"><span class="pre"><span class="Identifier">sep</span></span></tt>. Examples:</p>
- <p><pre class="listing"><span class="Keyword">for</span> <span class="Identifier">word</span> <span class="Keyword">in</span> <span class="Identifier">split</span><span class="Punctuation">(</span><span class="StringLit">"00232this02939is39an22example111"</span><span class="Punctuation">,</span> <span class="RawData">peg"\d+"</span><span class="Punctuation">)</span><span class="Punctuation">:</span>
- <span class="Identifier">writeLine</span><span class="Punctuation">(</span><span class="Identifier">stdout</span><span class="Punctuation">,</span> <span class="Identifier">word</span><span class="Punctuation">)</span></pre></p>
- <p>Results in:</p>
- <p><pre class="listing"><span class="StringLit">"this"</span>
- <span class="StringLit">"is"</span>
- <span class="StringLit">"an"</span>
- <span class="StringLit">"example"</span></pre></p>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1356" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1356" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- </dl>
- </div>
- <div class="section" id="18">
- <h1><a class="toc-backref" href="#18">Templates</a></h1>
- <dl class="item">
- <div id="=~-templates-all">
- <div id="=~.t,string,Peg">
- <dt><pre><span class="Keyword">template</span> <a href="#%3D~.t%2Cstring%2CPeg"><span class="Identifier">`=~`</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">;</span> <span class="Identifier">pattern</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a></pre></dt>
- <dd>
-
- <p>This calls <tt class="docutils literal"><span class="pre">match</span></tt> with an implicit declared <tt class="docutils literal"><span class="pre">matches</span></tt> array that can be used in the scope of the <tt class="docutils literal"><span class="pre">=~</span></tt> call:</p>
- <p><pre class="listing"><span class="Keyword">if</span> <span class="Identifier">line</span> <span class="Operator">=~</span> <span class="RawData">peg"\s* {\w+} \s* '=' \s* {\w+}"</span><span class="Punctuation">:</span>
- <span class="Comment"># matches a key=value pair:</span>
- <span class="Identifier">echo</span><span class="Punctuation">(</span><span class="StringLit">"Key: "</span><span class="Punctuation">,</span> <span class="Identifier">matches</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Punctuation">)</span>
- <span class="Identifier">echo</span><span class="Punctuation">(</span><span class="StringLit">"Value: "</span><span class="Punctuation">,</span> <span class="Identifier">matches</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span><span class="Punctuation">)</span>
- <span class="Keyword">elif</span> <span class="Identifier">line</span> <span class="Operator">=~</span> <span class="RawData">peg"\s*{'#'.*}"</span><span class="Punctuation">:</span>
- <span class="Comment"># matches a comment</span>
- <span class="Comment"># note that the implicit ``matches`` array is different from the</span>
- <span class="Comment"># ``matches`` array of the first branch</span>
- <span class="Identifier">echo</span><span class="Punctuation">(</span><span class="StringLit">"comment: "</span><span class="Punctuation">,</span> <span class="Identifier">matches</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Punctuation">)</span>
- <span class="Keyword">else</span><span class="Punctuation">:</span>
- <span class="Identifier">echo</span><span class="Punctuation">(</span><span class="StringLit">"syntax error"</span><span class="Punctuation">)</span></pre></p>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L1178" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L1178" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="digits-templates-all">
- <div id="digits.t">
- <dt><pre><span class="Keyword">template</span> <a href="#digits.t"><span class="Identifier">digits</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- expands to <tt class="docutils literal"><span class="pre">charset({'0'..'9'})</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L369" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L369" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="eventParser-templates-all">
- <div id="eventParser.t,untyped,untyped">
- <dt><pre><span class="Keyword">template</span> <a href="#eventParser.t%2Cuntyped%2Cuntyped"><span class="Identifier">eventParser</span></a><span class="Other">(</span><span class="Identifier">pegAst</span><span class="Other">,</span> <span class="Identifier">handlers</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Other">(</span><span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#string"><span class="Identifier">string</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">)</span></pre></dt>
- <dd>
-
- <p>Generates an interpreting event parser <em>proc</em> according to the specified PEG AST and handler code blocks. The <em>proc</em> can be called with a string to be parsed and will execute the handler code blocks whenever their associated grammar element is matched. It returns -1 if the string does not match, else the length of the total match. The following example code evaluates an arithmetic expression defined by a simple PEG:</p>
- <p><pre class="listing"><span class="Keyword">import</span> <span class="Identifier">std</span><span class="Operator">/</span><span class="Punctuation">[</span><span class="Identifier">strutils</span><span class="Punctuation">,</span> <span class="Identifier">pegs</span><span class="Punctuation">]</span>
- <span class="Keyword">let</span>
- <span class="Identifier">pegAst</span> <span class="Operator">=</span> <span class="LongStringLit">"""
- Expr <- Sum
- Sum <- Product (('+' / '-')Product)*
- Product <- Value (('*' / '/')Value)*
- Value <- [0-9]+ / '(' Expr ')'
- """</span><span class="Operator">.</span><span class="Identifier">peg</span>
- <span class="Identifier">txt</span> <span class="Operator">=</span> <span class="StringLit">"(5+3)/2-7*22"</span>
- <span class="Keyword">var</span>
- <span class="Identifier">pStack</span><span class="Punctuation">:</span> <span class="Identifier">seq</span><span class="Punctuation">[</span><span class="Identifier">string</span><span class="Punctuation">]</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">]</span>
- <span class="Identifier">valStack</span><span class="Punctuation">:</span> <span class="Identifier">seq</span><span class="Punctuation">[</span><span class="Identifier">float</span><span class="Punctuation">]</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">]</span>
- <span class="Identifier">opStack</span> <span class="Operator">=</span> <span class="StringLit">""</span>
- <span class="Keyword">let</span>
- <span class="Identifier">parseArithExpr</span> <span class="Operator">=</span> <span class="Identifier">pegAst</span><span class="Operator">.</span><span class="Identifier">eventParser</span><span class="Punctuation">:</span>
- <span class="Identifier">pkNonTerminal</span><span class="Punctuation">:</span>
- <span class="Identifier">enter</span><span class="Punctuation">:</span>
- <span class="Identifier">pStack</span><span class="Operator">.</span><span class="Identifier">add</span> <span class="Identifier">p</span><span class="Operator">.</span><span class="Identifier">nt</span><span class="Operator">.</span><span class="Identifier">name</span>
- <span class="Identifier">leave</span><span class="Punctuation">:</span>
- <span class="Identifier">pStack</span><span class="Operator">.</span><span class="Identifier">setLen</span> <span class="Identifier">pStack</span><span class="Operator">.</span><span class="Identifier">high</span>
- <span class="Keyword">if</span> <span class="Identifier">length</span> <span class="Operator">></span> <span class="DecNumber">0</span><span class="Punctuation">:</span>
- <span class="Keyword">let</span> <span class="Identifier">matchStr</span> <span class="Operator">=</span> <span class="Identifier">s</span><span class="Operator">.</span><span class="Identifier">substr</span><span class="Punctuation">(</span><span class="Identifier">start</span><span class="Punctuation">,</span> <span class="Identifier">start</span><span class="Operator">+</span><span class="Identifier">length</span><span class="Operator">-</span><span class="DecNumber">1</span><span class="Punctuation">)</span>
- <span class="Keyword">case</span> <span class="Identifier">p</span><span class="Operator">.</span><span class="Identifier">nt</span><span class="Operator">.</span><span class="Identifier">name</span>
- <span class="Keyword">of</span> <span class="StringLit">"Value"</span><span class="Punctuation">:</span>
- <span class="Keyword">try</span><span class="Punctuation">:</span>
- <span class="Identifier">valStack</span><span class="Operator">.</span><span class="Identifier">add</span> <span class="Identifier">matchStr</span><span class="Operator">.</span><span class="Identifier">parseFloat</span>
- <span class="Identifier">echo</span> <span class="Identifier">valStack</span>
- <span class="Keyword">except</span> <span class="Identifier">ValueError</span><span class="Punctuation">:</span>
- <span class="Keyword">discard</span>
- <span class="Keyword">of</span> <span class="StringLit">"Sum"</span><span class="Punctuation">,</span> <span class="StringLit">"Product"</span><span class="Punctuation">:</span>
- <span class="Keyword">try</span><span class="Punctuation">:</span>
- <span class="Keyword">let</span> <span class="Identifier">val</span> <span class="Operator">=</span> <span class="Identifier">matchStr</span><span class="Operator">.</span><span class="Identifier">parseFloat</span>
- <span class="Keyword">except</span> <span class="Identifier">ValueError</span><span class="Punctuation">:</span>
- <span class="Keyword">if</span> <span class="Identifier">valStack</span><span class="Operator">.</span><span class="Identifier">len</span> <span class="Operator">></span> <span class="DecNumber">1</span> <span class="Keyword">and</span> <span class="Identifier">opStack</span><span class="Operator">.</span><span class="Identifier">len</span> <span class="Operator">></span> <span class="DecNumber">0</span><span class="Punctuation">:</span>
- <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">2</span><span class="Punctuation">]</span> <span class="Operator">=</span> <span class="Keyword">case</span> <span class="Identifier">opStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
- <span class="Keyword">of</span> <span class="CharLit">'+'</span><span class="Punctuation">:</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">2</span><span class="Punctuation">]</span> <span class="Operator">+</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
- <span class="Keyword">of</span> <span class="CharLit">'-'</span><span class="Punctuation">:</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">2</span><span class="Punctuation">]</span> <span class="Operator">-</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
- <span class="Keyword">of</span> <span class="CharLit">'*'</span><span class="Punctuation">:</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">2</span><span class="Punctuation">]</span> <span class="Operator">*</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
- <span class="Keyword">else</span><span class="Punctuation">:</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">2</span><span class="Punctuation">]</span> <span class="Operator">/</span> <span class="Identifier">valStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
- <span class="Identifier">valStack</span><span class="Operator">.</span><span class="Identifier">setLen</span> <span class="Identifier">valStack</span><span class="Operator">.</span><span class="Identifier">high</span>
- <span class="Identifier">echo</span> <span class="Identifier">valStack</span>
- <span class="Identifier">opStack</span><span class="Operator">.</span><span class="Identifier">setLen</span> <span class="Identifier">opStack</span><span class="Operator">.</span><span class="Identifier">high</span>
- <span class="Identifier">echo</span> <span class="Identifier">opStack</span>
- <span class="Identifier">pkChar</span><span class="Punctuation">:</span>
- <span class="Identifier">leave</span><span class="Punctuation">:</span>
- <span class="Keyword">if</span> <span class="Identifier">length</span> <span class="Operator">==</span> <span class="DecNumber">1</span> <span class="Keyword">and</span> <span class="StringLit">"Value"</span> <span class="Operator">!=</span> <span class="Identifier">pStack</span><span class="Punctuation">[</span><span class="Operator">^</span><span class="DecNumber">1</span><span class="Punctuation">]</span><span class="Punctuation">:</span>
- <span class="Keyword">let</span> <span class="Identifier">matchChar</span> <span class="Operator">=</span> <span class="Identifier">s</span><span class="Punctuation">[</span><span class="Identifier">start</span><span class="Punctuation">]</span>
- <span class="Identifier">opStack</span><span class="Operator">.</span><span class="Identifier">add</span> <span class="Identifier">matchChar</span>
- <span class="Identifier">echo</span> <span class="Identifier">opStack</span>
- <span class="Keyword">let</span> <span class="Identifier">pLen</span> <span class="Operator">=</span> <span class="Identifier">parseArithExpr</span><span class="Punctuation">(</span><span class="Identifier">txt</span><span class="Punctuation">)</span></pre></p>
- <p>The <em>handlers</em> parameter consists of code blocks for <em>PegKinds</em>, which define the grammar elements of interest. Each block can contain handler code to be executed when the parser enters and leaves text matching the grammar element. An <em>enter</em> handler can access the specific PEG AST node being matched as <em>p</em>, the entire parsed string as <em>s</em> and the position of the matched text segment in <em>s</em> as <em>start</em>. A <em>leave</em> handler can access <em>p</em>, <em>s</em>, <em>start</em> and also the length of the matched text segment as <em>length</em>. For an unsuccessful match, the <em>enter</em> and <em>leave</em> handlers will be executed, with <em>length</em> set to -1.</p>
- <p>Symbols declared in an <em>enter</em> handler can be made visible in the corresponding <em>leave</em> handler by annotating them with an <em>inject</em> pragma.</p>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L957" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L957" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="ident-templates-all">
- <div id="ident.t">
- <dt><pre><span class="Keyword">template</span> <a href="#ident.t"><span class="Identifier">ident</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- same as <tt class="docutils literal"><span class="pre">[a-zA-Z_][a-zA-z_0-9]*</span></tt>; standard identifier
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L385" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L385" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="identChars-templates-all">
- <div id="identChars.t">
- <dt><pre><span class="Keyword">template</span> <a href="#identChars.t"><span class="Identifier">identChars</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- expands to <tt class="docutils literal"><span class="pre">charset({'a'..'z', 'A'..'Z', '0'..'9', '_'})</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L377" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L377" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="identStartChars-templates-all">
- <div id="identStartChars.t">
- <dt><pre><span class="Keyword">template</span> <a href="#identStartChars.t"><span class="Identifier">identStartChars</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- expands to <tt class="docutils literal"><span class="pre">charset({'A'..'Z', 'a'..'z', '_'})</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L381" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L381" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="letters-templates-all">
- <div id="letters.t">
- <dt><pre><span class="Keyword">template</span> <a href="#letters.t"><span class="Identifier">letters</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- expands to <tt class="docutils literal"><span class="pre">charset({'A'..'Z', 'a'..'z'})</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L365" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L365" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="natural-templates-all">
- <div id="natural.t">
- <dt><pre><span class="Keyword">template</span> <a href="#natural.t"><span class="Identifier">natural</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- same as <tt class="docutils literal"><span class="pre">\d+</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L390" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L390" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="whitespace-templates-all">
- <div id="whitespace.t">
- <dt><pre><span class="Keyword">template</span> <a href="#whitespace.t"><span class="Identifier">whitespace</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="pegs.html#Peg"><span class="Identifier">Peg</span></a></pre></dt>
- <dd>
-
- expands to <tt class="docutils literal"><span class="pre">charset({' ', '\9'..'\13'})</span></tt>
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/pegs.nim#L373" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/pegs.nim#L373" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- </dl>
- </div>
- </div>
- </div>
- <div class="twelve-columns footer">
- <span class="nim-sprite"></span>
- <br>
- <small style="color: var(--hint);">Made with Nim. Generated: 2025-02-03 14:57:02 UTC</small>
- </div>
- </div>
- </div>
- <script defer data-domain="nim-lang.org" src="https://plausible.io/js/plausible.js"></script>
-
- </body>
- </html>
|