BoiHardFail.baseline 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713
  1. REGEX AST /^token/ {
  2. Concat()
  3. {
  4. BOL()
  5. MatchLiteral("token")
  6. }
  7. }
  8. REGEX ANNOTATED AST /^token/ {
  9. Concat()
  10. <
  11. features: {BOL,MatchLiteral,Concat}
  12. firstSet: [\x00-\uffff]
  13. followSet: [\x00-\uffff]
  14. prevConsumes: [0]
  15. thisConsumes: [5]
  16. followConsumes: [0]
  17. isThisIrrefutable: false
  18. isFollowIrrefutable: true
  19. isWord: false
  20. isThisWillNotProgress: true
  21. isThisWillNotRegress: true
  22. isPrevWillNotProgress: false
  23. isPrevWillNotRegress: true
  24. isDeterministic: true
  25. isNotInLoop: true
  26. isNotNegated: true
  27. isAtLeastOnce: true
  28. hasInitialHardFailBOI: true
  29. >
  30. {
  31. BOL()
  32. <
  33. features: {BOL}
  34. firstSet: [\x00-\uffff]
  35. followSet: [t]
  36. prevConsumes: [0]
  37. thisConsumes: [0]
  38. followConsumes: [5]
  39. isThisIrrefutable: false
  40. isFollowIrrefutable: false
  41. isWord: false
  42. isThisWillNotProgress: true
  43. isThisWillNotRegress: true
  44. isPrevWillNotProgress: false
  45. isPrevWillNotRegress: true
  46. isDeterministic: true
  47. isNotInLoop: true
  48. isNotNegated: true
  49. isAtLeastOnce: true
  50. hasInitialHardFailBOI: true
  51. >
  52. MatchLiteral("token")
  53. <
  54. features: {MatchLiteral}
  55. firstSet: [t] (exact)
  56. followSet: [\x00-\uffff]
  57. prevConsumes: [0]
  58. thisConsumes: [5]
  59. followConsumes: [0]
  60. isThisIrrefutable: false
  61. isFollowIrrefutable: true
  62. isWord: true
  63. isThisWillNotProgress: true
  64. isThisWillNotRegress: true
  65. isPrevWillNotProgress: false
  66. isPrevWillNotRegress: true
  67. isDeterministic: true
  68. isNotInLoop: true
  69. isNotNegated: true
  70. isAtLeastOnce: true
  71. hasInitialHardFailBOI: false
  72. >
  73. }
  74. }
  75. REGEX PROGRAM /^token/
  76. Program {
  77. source: ^token
  78. litbuf: token
  79. litbufLen: 5
  80. flags:
  81. numGroups: 1
  82. numLoops: 0
  83. instructions: {
  84. BOITest(hardFail: true)
  85. L0000: MatchLiteral(literal: "token")
  86. L0001: Succ()
  87. }
  88. }
  89. REGEX AST /(\w)?^token/ {
  90. Concat()
  91. {
  92. Loop([0-1], greedy)
  93. {
  94. DefineGroup(1)
  95. {
  96. MatchSet(positive, [0-9A-Z_a-z])
  97. }
  98. }
  99. BOL()
  100. MatchLiteral("token")
  101. }
  102. }
  103. REGEX ANNOTATED AST /(\w)?^token/ {
  104. Concat()
  105. <
  106. features: {BOL,MatchLiteral,Concat,DefineGroup,Loop,MatchSet}
  107. firstSet: [\x00-\uffff]
  108. followSet: [\x00-\uffff]
  109. prevConsumes: [0]
  110. thisConsumes: [5-6]
  111. followConsumes: [0]
  112. isThisIrrefutable: false
  113. isFollowIrrefutable: true
  114. isWord: false
  115. isThisWillNotProgress: true
  116. isThisWillNotRegress: false
  117. isPrevWillNotProgress: false
  118. isPrevWillNotRegress: true
  119. isDeterministic: false
  120. isNotInLoop: true
  121. isNotNegated: true
  122. isAtLeastOnce: true
  123. hasInitialHardFailBOI: false
  124. >
  125. {
  126. Loop([0-1], greedy)
  127. <
  128. features: {DefineGroup,Loop,MatchSet}
  129. firstSet: [0-9A-Z_a-z]
  130. followSet: [\x00-\uffff]
  131. prevConsumes: [0]
  132. thisConsumes: [0-1]
  133. followConsumes: [5]
  134. isThisIrrefutable: true
  135. isFollowIrrefutable: false
  136. isWord: false
  137. isThisWillNotProgress: true
  138. isThisWillNotRegress: false
  139. isPrevWillNotProgress: false
  140. isPrevWillNotRegress: true
  141. isDeterministic: false
  142. isNotInLoop: true
  143. isNotNegated: true
  144. isAtLeastOnce: true
  145. hasInitialHardFailBOI: false
  146. >
  147. {
  148. DefineGroup(1)
  149. <
  150. features: {DefineGroup,MatchSet}
  151. firstSet: [0-9A-Z_a-z] (exact)
  152. followSet: [\x00-\uffff]
  153. prevConsumes: [0]
  154. thisConsumes: [1]
  155. followConsumes: [5]
  156. isThisIrrefutable: false
  157. isFollowIrrefutable: false
  158. isWord: true
  159. isThisWillNotProgress: true
  160. isThisWillNotRegress: true
  161. isPrevWillNotProgress: false
  162. isPrevWillNotRegress: false
  163. isDeterministic: true
  164. isNotInLoop: false
  165. isNotNegated: true
  166. isAtLeastOnce: false
  167. hasInitialHardFailBOI: false
  168. >
  169. {
  170. MatchSet(positive, [0-9A-Z_a-z])
  171. <
  172. features: {MatchSet}
  173. firstSet: [0-9A-Z_a-z] (exact)
  174. followSet: [\x00-\uffff]
  175. prevConsumes: [0]
  176. thisConsumes: [1]
  177. followConsumes: [5]
  178. isThisIrrefutable: false
  179. isFollowIrrefutable: false
  180. isWord: true
  181. isThisWillNotProgress: true
  182. isThisWillNotRegress: true
  183. isPrevWillNotProgress: false
  184. isPrevWillNotRegress: false
  185. isDeterministic: true
  186. isNotInLoop: false
  187. isNotNegated: true
  188. isAtLeastOnce: false
  189. hasInitialHardFailBOI: false
  190. >
  191. }
  192. }
  193. BOL()
  194. <
  195. features: {BOL}
  196. firstSet: [\x00-\uffff]
  197. followSet: [t]
  198. prevConsumes: [0-1]
  199. thisConsumes: [0]
  200. followConsumes: [5]
  201. isThisIrrefutable: false
  202. isFollowIrrefutable: false
  203. isWord: false
  204. isThisWillNotProgress: true
  205. isThisWillNotRegress: true
  206. isPrevWillNotProgress: false
  207. isPrevWillNotRegress: false
  208. isDeterministic: true
  209. isNotInLoop: true
  210. isNotNegated: true
  211. isAtLeastOnce: true
  212. hasInitialHardFailBOI: false
  213. >
  214. MatchLiteral("token")
  215. <
  216. features: {MatchLiteral}
  217. firstSet: [t] (exact)
  218. followSet: [\x00-\uffff]
  219. prevConsumes: [0-1]
  220. thisConsumes: [5]
  221. followConsumes: [0]
  222. isThisIrrefutable: false
  223. isFollowIrrefutable: true
  224. isWord: true
  225. isThisWillNotProgress: true
  226. isThisWillNotRegress: true
  227. isPrevWillNotProgress: false
  228. isPrevWillNotRegress: false
  229. isDeterministic: true
  230. isNotInLoop: true
  231. isNotNegated: true
  232. isAtLeastOnce: true
  233. hasInitialHardFailBOI: false
  234. >
  235. }
  236. }
  237. REGEX PROGRAM /(\w)?^token/
  238. Program {
  239. source: (\w)?^token
  240. litbuf: token
  241. litbufLen: 5
  242. flags:
  243. numGroups: 2
  244. numLoops: 0
  245. instructions: {
  246. L0000: SyncToLiteralAndBackupInstT<ScannerMixin> aka SyncToLiteralAndBackup(literal: "token" (with full map Boyer-Moore scanner), backup: [0-1])
  247. L0001: TryMatchSet(set: [0-9A-Z_a-z], failLabel: Lffff)
  248. L0002: DefineGroupFixed(groupId: 1, length: 1, noNeedToSave: false)
  249. L0003: BOITest(<hardFail>: false)
  250. L0004: MatchLiteral(literal: "token")
  251. L0005: Succ()
  252. }
  253. }
  254. REGEX AST /token/ {
  255. MatchLiteral("token")
  256. }
  257. REGEX ANNOTATED AST /token/ {
  258. MatchLiteral("token")
  259. <
  260. features: {MatchLiteral}
  261. firstSet: [t] (exact)
  262. followSet: [\x00-\uffff]
  263. prevConsumes: [0]
  264. thisConsumes: [5]
  265. followConsumes: [0]
  266. isThisIrrefutable: false
  267. isFollowIrrefutable: true
  268. isWord: true
  269. isThisWillNotProgress: true
  270. isThisWillNotRegress: true
  271. isPrevWillNotProgress: false
  272. isPrevWillNotRegress: true
  273. isDeterministic: true
  274. isNotInLoop: true
  275. isNotNegated: true
  276. isAtLeastOnce: true
  277. hasInitialHardFailBOI: false
  278. >
  279. }
  280. REGEX PROGRAM /token/
  281. Program {
  282. source: token
  283. litbuf: token
  284. litbufLen: 5
  285. flags:
  286. numGroups: 1
  287. numLoops: 0
  288. instructions: {
  289. L0000: SyncToLiteralAndConsumeInstT<ScannerMixin> aka SyncToLiteralAndConsume(literal: "token" (with full map Boyer-Moore scanner))
  290. L0001: Succ()
  291. }
  292. }
  293. REGEX AST /^^token/ {
  294. Concat()
  295. {
  296. BOL()
  297. BOL()
  298. MatchLiteral("token")
  299. }
  300. }
  301. REGEX ANNOTATED AST /^^token/ {
  302. Concat()
  303. <
  304. features: {BOL,MatchLiteral,Concat}
  305. firstSet: [\x00-\uffff]
  306. followSet: [\x00-\uffff]
  307. prevConsumes: [0]
  308. thisConsumes: [5]
  309. followConsumes: [0]
  310. isThisIrrefutable: false
  311. isFollowIrrefutable: true
  312. isWord: false
  313. isThisWillNotProgress: true
  314. isThisWillNotRegress: true
  315. isPrevWillNotProgress: false
  316. isPrevWillNotRegress: true
  317. isDeterministic: true
  318. isNotInLoop: true
  319. isNotNegated: true
  320. isAtLeastOnce: true
  321. hasInitialHardFailBOI: true
  322. >
  323. {
  324. BOL()
  325. <
  326. features: {BOL}
  327. firstSet: [\x00-\uffff]
  328. followSet: [\x00-\uffff]
  329. prevConsumes: [0]
  330. thisConsumes: [0]
  331. followConsumes: [5]
  332. isThisIrrefutable: false
  333. isFollowIrrefutable: false
  334. isWord: false
  335. isThisWillNotProgress: true
  336. isThisWillNotRegress: true
  337. isPrevWillNotProgress: false
  338. isPrevWillNotRegress: true
  339. isDeterministic: true
  340. isNotInLoop: true
  341. isNotNegated: true
  342. isAtLeastOnce: true
  343. hasInitialHardFailBOI: true
  344. >
  345. BOL()
  346. <
  347. features: {BOL}
  348. firstSet: [\x00-\uffff]
  349. followSet: [t]
  350. prevConsumes: [0]
  351. thisConsumes: [0]
  352. followConsumes: [5]
  353. isThisIrrefutable: false
  354. isFollowIrrefutable: false
  355. isWord: false
  356. isThisWillNotProgress: true
  357. isThisWillNotRegress: true
  358. isPrevWillNotProgress: false
  359. isPrevWillNotRegress: true
  360. isDeterministic: true
  361. isNotInLoop: true
  362. isNotNegated: true
  363. isAtLeastOnce: true
  364. hasInitialHardFailBOI: true
  365. >
  366. MatchLiteral("token")
  367. <
  368. features: {MatchLiteral}
  369. firstSet: [t] (exact)
  370. followSet: [\x00-\uffff]
  371. prevConsumes: [0]
  372. thisConsumes: [5]
  373. followConsumes: [0]
  374. isThisIrrefutable: false
  375. isFollowIrrefutable: true
  376. isWord: true
  377. isThisWillNotProgress: true
  378. isThisWillNotRegress: true
  379. isPrevWillNotProgress: false
  380. isPrevWillNotRegress: true
  381. isDeterministic: true
  382. isNotInLoop: true
  383. isNotNegated: true
  384. isAtLeastOnce: true
  385. hasInitialHardFailBOI: false
  386. >
  387. }
  388. }
  389. REGEX PROGRAM /^^token/
  390. Program {
  391. source: ^^token
  392. litbuf: token
  393. litbufLen: 5
  394. flags:
  395. numGroups: 1
  396. numLoops: 0
  397. instructions: {
  398. BOITest(hardFail: true)
  399. L0000: MatchLiteral(literal: "token")
  400. L0001: Succ()
  401. }
  402. }
  403. REGEX AST /token^/ {
  404. Concat()
  405. {
  406. MatchLiteral("token")
  407. BOL()
  408. }
  409. }
  410. REGEX ANNOTATED AST /token^/ {
  411. Concat()
  412. <
  413. features: {BOL,MatchLiteral,Concat}
  414. firstSet: [t] (exact)
  415. followSet: [\x00-\uffff]
  416. prevConsumes: [0]
  417. thisConsumes: [5]
  418. followConsumes: [0]
  419. isThisIrrefutable: false
  420. isFollowIrrefutable: true
  421. isWord: false
  422. isThisWillNotProgress: true
  423. isThisWillNotRegress: true
  424. isPrevWillNotProgress: false
  425. isPrevWillNotRegress: true
  426. isDeterministic: true
  427. isNotInLoop: true
  428. isNotNegated: true
  429. isAtLeastOnce: true
  430. hasInitialHardFailBOI: false
  431. >
  432. {
  433. MatchLiteral("token")
  434. <
  435. features: {MatchLiteral}
  436. firstSet: [t] (exact)
  437. followSet: [\x00-\uffff]
  438. prevConsumes: [0]
  439. thisConsumes: [5]
  440. followConsumes: [0]
  441. isThisIrrefutable: false
  442. isFollowIrrefutable: false
  443. isWord: true
  444. isThisWillNotProgress: true
  445. isThisWillNotRegress: true
  446. isPrevWillNotProgress: false
  447. isPrevWillNotRegress: true
  448. isDeterministic: true
  449. isNotInLoop: true
  450. isNotNegated: true
  451. isAtLeastOnce: true
  452. hasInitialHardFailBOI: false
  453. >
  454. BOL()
  455. <
  456. features: {BOL}
  457. firstSet: [\x00-\uffff]
  458. followSet: [\x00-\uffff]
  459. prevConsumes: [5]
  460. thisConsumes: [0]
  461. followConsumes: [0]
  462. isThisIrrefutable: false
  463. isFollowIrrefutable: true
  464. isWord: false
  465. isThisWillNotProgress: true
  466. isThisWillNotRegress: true
  467. isPrevWillNotProgress: false
  468. isPrevWillNotRegress: true
  469. isDeterministic: true
  470. isNotInLoop: true
  471. isNotNegated: true
  472. isAtLeastOnce: true
  473. hasInitialHardFailBOI: false
  474. >
  475. }
  476. }
  477. REGEX PROGRAM /token^/
  478. Program {
  479. source: token^
  480. litbuf: token
  481. litbufLen: 5
  482. flags:
  483. numGroups: 1
  484. numLoops: 0
  485. instructions: {
  486. L0000: SyncToLiteralAndConsumeInstT<ScannerMixin> aka SyncToLiteralAndConsume(literal: "token" (with full map Boyer-Moore scanner))
  487. L0001: BOIHardFailTest(<hardFail>: true)
  488. L0002: Succ()
  489. }
  490. }
  491. REGEX AST /token^token/ {
  492. Concat()
  493. {
  494. MatchLiteral("token")
  495. BOL()
  496. MatchLiteral("token")
  497. }
  498. }
  499. REGEX ANNOTATED AST /token^token/ {
  500. Concat()
  501. <
  502. features: {BOL,MatchLiteral,Concat}
  503. firstSet: [t] (exact)
  504. followSet: [\x00-\uffff]
  505. prevConsumes: [0]
  506. thisConsumes: [10]
  507. followConsumes: [0]
  508. isThisIrrefutable: false
  509. isFollowIrrefutable: true
  510. isWord: false
  511. isThisWillNotProgress: true
  512. isThisWillNotRegress: true
  513. isPrevWillNotProgress: false
  514. isPrevWillNotRegress: true
  515. isDeterministic: true
  516. isNotInLoop: true
  517. isNotNegated: true
  518. isAtLeastOnce: true
  519. hasInitialHardFailBOI: false
  520. >
  521. {
  522. MatchLiteral("token")
  523. <
  524. features: {MatchLiteral}
  525. firstSet: [t] (exact)
  526. followSet: [\x00-\uffff]
  527. prevConsumes: [0]
  528. thisConsumes: [5]
  529. followConsumes: [5]
  530. isThisIrrefutable: false
  531. isFollowIrrefutable: false
  532. isWord: true
  533. isThisWillNotProgress: true
  534. isThisWillNotRegress: true
  535. isPrevWillNotProgress: false
  536. isPrevWillNotRegress: true
  537. isDeterministic: true
  538. isNotInLoop: true
  539. isNotNegated: true
  540. isAtLeastOnce: true
  541. hasInitialHardFailBOI: false
  542. >
  543. BOL()
  544. <
  545. features: {BOL}
  546. firstSet: [\x00-\uffff]
  547. followSet: [t]
  548. prevConsumes: [5]
  549. thisConsumes: [0]
  550. followConsumes: [5]
  551. isThisIrrefutable: false
  552. isFollowIrrefutable: false
  553. isWord: false
  554. isThisWillNotProgress: true
  555. isThisWillNotRegress: true
  556. isPrevWillNotProgress: false
  557. isPrevWillNotRegress: true
  558. isDeterministic: true
  559. isNotInLoop: true
  560. isNotNegated: true
  561. isAtLeastOnce: true
  562. hasInitialHardFailBOI: false
  563. >
  564. MatchLiteral("token")
  565. <
  566. features: {MatchLiteral}
  567. firstSet: [t] (exact)
  568. followSet: [\x00-\uffff]
  569. prevConsumes: [5]
  570. thisConsumes: [5]
  571. followConsumes: [0]
  572. isThisIrrefutable: false
  573. isFollowIrrefutable: true
  574. isWord: true
  575. isThisWillNotProgress: true
  576. isThisWillNotRegress: true
  577. isPrevWillNotProgress: false
  578. isPrevWillNotRegress: true
  579. isDeterministic: true
  580. isNotInLoop: true
  581. isNotNegated: true
  582. isAtLeastOnce: true
  583. hasInitialHardFailBOI: false
  584. >
  585. }
  586. }
  587. REGEX PROGRAM /token^token/
  588. Program {
  589. source: token^token
  590. litbuf: tokentoken
  591. litbufLen: 10
  592. flags:
  593. numGroups: 1
  594. numLoops: 0
  595. instructions: {
  596. L0000: SyncToLiteralAndConsumeInstT<ScannerMixin> aka SyncToLiteralAndConsume(literal: "token" (with full map Boyer-Moore scanner))
  597. L0001: BOIHardFailTest(<hardFail>: true)
  598. L0002: MatchLiteral(literal: "token")
  599. L0003: Succ()
  600. }
  601. }
  602. REGEX AST /^token|^abc/ {
  603. Alt()
  604. {
  605. Concat()
  606. {
  607. BOL()
  608. MatchLiteral("token")
  609. }
  610. Concat()
  611. {
  612. BOL()
  613. MatchLiteral("abc")
  614. }
  615. }
  616. }
  617. REGEX ANNOTATED AST /^token|^abc/ {
  618. Alt()
  619. <
  620. features: {BOL,MatchLiteral,Concat,Alt}
  621. firstSet: [\x00-\uffff]
  622. followSet: [\x00-\uffff]
  623. prevConsumes: [0]
  624. thisConsumes: [3-5]
  625. followConsumes: [0]
  626. isThisIrrefutable: false
  627. isFollowIrrefutable: true
  628. isWord: false
  629. isThisWillNotProgress: true
  630. isThisWillNotRegress: false
  631. isPrevWillNotProgress: false
  632. isPrevWillNotRegress: true
  633. isDeterministic: false
  634. isNotInLoop: true
  635. isNotNegated: true
  636. isAtLeastOnce: true
  637. hasInitialHardFailBOI: false
  638. >
  639. {
  640. Concat()
  641. <
  642. features: {BOL,MatchLiteral,Concat}
  643. firstSet: [\x00-\uffff]
  644. followSet: [\x00-\uffff]
  645. prevConsumes: [0]
  646. thisConsumes: [5]
  647. followConsumes: [0]
  648. isThisIrrefutable: false
  649. isFollowIrrefutable: true
  650. isWord: false
  651. isThisWillNotProgress: true
  652. isThisWillNotRegress: true
  653. isPrevWillNotProgress: false
  654. isPrevWillNotRegress: true
  655. isDeterministic: true
  656. isNotInLoop: true
  657. isNotNegated: true
  658. isAtLeastOnce: false
  659. hasInitialHardFailBOI: false
  660. >
  661. {
  662. BOL()
  663. <
  664. features: {BOL}
  665. firstSet: [\x00-\uffff]
  666. followSet: [t]
  667. prevConsumes: [0]
  668. thisConsumes: [0]
  669. followConsumes: [5]
  670. isThisIrrefutable: false
  671. isFollowIrrefutable: false
  672. isWord: false
  673. isThisWillNotProgress: true
  674. isThisWillNotRegress: true
  675. isPrevWillNotProgress: false
  676. isPrevWillNotRegress: true
  677. isDeterministic: true
  678. isNotInLoop: true
  679. isNotNegated: true
  680. isAtLeastOnce: false
  681. hasInitialHardFailBOI: false
  682. >
  683. MatchLiteral("token")
  684. <
  685. features: {MatchLiteral}
  686. firstSet: [t] (exact)
  687. followSet: [\x00-\uffff]
  688. prevConsumes: [0]
  689. thisConsumes: [5]
  690. followConsumes: [0]
  691. isThisIrrefutable: false
  692. isFollowIrrefutable: true
  693. isWord: true
  694. isThisWillNotProgress: true
  695. isThisWillNotRegress: true
  696. isPrevWillNotProgress: false
  697. isPrevWillNotRegress: true
  698. isDeterministic: true
  699. isNotInLoop: true
  700. isNotNegated: true
  701. isAtLeastOnce: false
  702. hasInitialHardFailBOI: false
  703. >
  704. }
  705. Concat()
  706. <
  707. features: {BOL,MatchLiteral,Concat}
  708. firstSet: [\x00-\uffff]
  709. followSet: [\x00-\uffff]
  710. prevConsumes: [0]
  711. thisConsumes: [3]
  712. followConsumes: [0]
  713. isThisIrrefutable: false
  714. isFollowIrrefutable: true
  715. isWord: false
  716. isThisWillNotProgress: true
  717. isThisWillNotRegress: true
  718. isPrevWillNotProgress: false
  719. isPrevWillNotRegress: true
  720. isDeterministic: true
  721. isNotInLoop: true
  722. isNotNegated: true
  723. isAtLeastOnce: false
  724. hasInitialHardFailBOI: false
  725. >
  726. {
  727. BOL()
  728. <
  729. features: {BOL}
  730. firstSet: [\x00-\uffff]
  731. followSet: [a]
  732. prevConsumes: [0]
  733. thisConsumes: [0]
  734. followConsumes: [3]
  735. isThisIrrefutable: false
  736. isFollowIrrefutable: false
  737. isWord: false
  738. isThisWillNotProgress: true
  739. isThisWillNotRegress: true
  740. isPrevWillNotProgress: false
  741. isPrevWillNotRegress: true
  742. isDeterministic: true
  743. isNotInLoop: true
  744. isNotNegated: true
  745. isAtLeastOnce: false
  746. hasInitialHardFailBOI: false
  747. >
  748. MatchLiteral("abc")
  749. <
  750. features: {MatchLiteral}
  751. firstSet: [a] (exact)
  752. followSet: [\x00-\uffff]
  753. prevConsumes: [0]
  754. thisConsumes: [3]
  755. followConsumes: [0]
  756. isThisIrrefutable: false
  757. isFollowIrrefutable: true
  758. isWord: true
  759. isThisWillNotProgress: true
  760. isThisWillNotRegress: true
  761. isPrevWillNotProgress: false
  762. isPrevWillNotRegress: true
  763. isDeterministic: true
  764. isNotInLoop: true
  765. isNotNegated: true
  766. isAtLeastOnce: false
  767. hasInitialHardFailBOI: false
  768. >
  769. }
  770. }
  771. }
  772. REGEX PROGRAM /^token|^abc/
  773. Program {
  774. source: ^token|^abc
  775. litbuf: tokenabc
  776. litbufLen: 8
  777. flags:
  778. numGroups: 1
  779. numLoops: 0
  780. instructions: {
  781. L0000: Try(failLabel: Lffff)
  782. L0001: BOITest(<hardFail>: false)
  783. L0002: MatchLiteral(literal: "token")
  784. L0003: Jump(targetLabel: Lffff)
  785. L0004: BOITest(<hardFail>: false)
  786. L0005: MatchLiteral(literal: "abc")
  787. L0006: Succ()
  788. }
  789. }
  790. REGEX AST /(?!token)^abc/ {
  791. Concat()
  792. {
  793. Assertion(negative)
  794. {
  795. MatchLiteral("token")
  796. }
  797. BOL()
  798. MatchLiteral("abc")
  799. }
  800. }
  801. REGEX ANNOTATED AST /(?!token)^abc/ {
  802. Concat()
  803. <
  804. features: {BOL,MatchLiteral,Concat,Assertion}
  805. firstSet: [\x00-\uffff]
  806. followSet: [\x00-\uffff]
  807. prevConsumes: [0]
  808. thisConsumes: [3]
  809. followConsumes: [0]
  810. isThisIrrefutable: false
  811. isFollowIrrefutable: true
  812. isWord: false
  813. isThisWillNotProgress: true
  814. isThisWillNotRegress: true
  815. isPrevWillNotProgress: false
  816. isPrevWillNotRegress: true
  817. isDeterministic: true
  818. isNotInLoop: true
  819. isNotNegated: true
  820. isAtLeastOnce: true
  821. hasInitialHardFailBOI: true
  822. >
  823. {
  824. Assertion(negative)
  825. <
  826. features: {MatchLiteral,Assertion}
  827. firstSet: [\x00-\uffff]
  828. followSet: [\x00-\uffff]
  829. prevConsumes: [0]
  830. thisConsumes: [0]
  831. followConsumes: [3]
  832. isThisIrrefutable: false
  833. isFollowIrrefutable: false
  834. isWord: false
  835. isThisWillNotProgress: true
  836. isThisWillNotRegress: true
  837. isPrevWillNotProgress: false
  838. isPrevWillNotRegress: true
  839. isDeterministic: true
  840. isNotInLoop: true
  841. isNotNegated: true
  842. isAtLeastOnce: true
  843. hasInitialHardFailBOI: false
  844. >
  845. {
  846. MatchLiteral("token")
  847. <
  848. features: {MatchLiteral}
  849. firstSet: [t] (exact)
  850. followSet: [\x00-\uffff]
  851. prevConsumes: [0]
  852. thisConsumes: [5]
  853. followConsumes: [0-inf]
  854. isThisIrrefutable: false
  855. isFollowIrrefutable: true
  856. isWord: true
  857. isThisWillNotProgress: true
  858. isThisWillNotRegress: true
  859. isPrevWillNotProgress: false
  860. isPrevWillNotRegress: true
  861. isDeterministic: true
  862. isNotInLoop: true
  863. isNotNegated: false
  864. isAtLeastOnce: true
  865. hasInitialHardFailBOI: false
  866. >
  867. }
  868. BOL()
  869. <
  870. features: {BOL}
  871. firstSet: [\x00-\uffff]
  872. followSet: [a]
  873. prevConsumes: [0]
  874. thisConsumes: [0]
  875. followConsumes: [3]
  876. isThisIrrefutable: false
  877. isFollowIrrefutable: false
  878. isWord: false
  879. isThisWillNotProgress: true
  880. isThisWillNotRegress: true
  881. isPrevWillNotProgress: false
  882. isPrevWillNotRegress: true
  883. isDeterministic: true
  884. isNotInLoop: true
  885. isNotNegated: true
  886. isAtLeastOnce: true
  887. hasInitialHardFailBOI: true
  888. >
  889. MatchLiteral("abc")
  890. <
  891. features: {MatchLiteral}
  892. firstSet: [a] (exact)
  893. followSet: [\x00-\uffff]
  894. prevConsumes: [0]
  895. thisConsumes: [3]
  896. followConsumes: [0]
  897. isThisIrrefutable: false
  898. isFollowIrrefutable: true
  899. isWord: true
  900. isThisWillNotProgress: true
  901. isThisWillNotRegress: true
  902. isPrevWillNotProgress: false
  903. isPrevWillNotRegress: true
  904. isDeterministic: true
  905. isNotInLoop: true
  906. isNotNegated: true
  907. isAtLeastOnce: true
  908. hasInitialHardFailBOI: false
  909. >
  910. }
  911. }
  912. REGEX PROGRAM /(?!token)^abc/
  913. Program {
  914. source: (?!token)^abc
  915. litbuf: tokenabc
  916. litbufLen: 8
  917. flags:
  918. numGroups: 1
  919. numLoops: 0
  920. instructions: {
  921. L0000: BeginAssertion(minBodyGroupId: 1, maxBodyGroupId: -1, isNegation: true, nextLabel: Lffff)
  922. L0001: MatchLiteral(literal: "token")
  923. L0002: EndAssertion()
  924. L0003: BOIHardFailTest(<hardFail>: true)
  925. L0004: MatchLiteral(literal: "abc")
  926. L0005: Succ()
  927. }
  928. }
  929. REGEX AST /(?=^abc)/ {
  930. Assertion(positive)
  931. {
  932. Concat()
  933. {
  934. BOL()
  935. MatchLiteral("abc")
  936. }
  937. }
  938. }
  939. REGEX ANNOTATED AST /(?=^abc)/ {
  940. Assertion(positive)
  941. <
  942. features: {BOL,MatchLiteral,Concat,Assertion}
  943. firstSet: [\x00-\uffff]
  944. followSet: [\x00-\uffff]
  945. prevConsumes: [0]
  946. thisConsumes: [0]
  947. followConsumes: [0]
  948. isThisIrrefutable: false
  949. isFollowIrrefutable: true
  950. isWord: false
  951. isThisWillNotProgress: true
  952. isThisWillNotRegress: true
  953. isPrevWillNotProgress: false
  954. isPrevWillNotRegress: true
  955. isDeterministic: true
  956. isNotInLoop: true
  957. isNotNegated: true
  958. isAtLeastOnce: true
  959. hasInitialHardFailBOI: true
  960. >
  961. {
  962. Concat()
  963. <
  964. features: {BOL,MatchLiteral,Concat}
  965. firstSet: [\x00-\uffff]
  966. followSet: [\x00-\uffff]
  967. prevConsumes: [0]
  968. thisConsumes: [3]
  969. followConsumes: [0-inf]
  970. isThisIrrefutable: false
  971. isFollowIrrefutable: true
  972. isWord: false
  973. isThisWillNotProgress: true
  974. isThisWillNotRegress: true
  975. isPrevWillNotProgress: false
  976. isPrevWillNotRegress: true
  977. isDeterministic: true
  978. isNotInLoop: true
  979. isNotNegated: true
  980. isAtLeastOnce: true
  981. hasInitialHardFailBOI: true
  982. >
  983. {
  984. BOL()
  985. <
  986. features: {BOL}
  987. firstSet: [\x00-\uffff]
  988. followSet: [a]
  989. prevConsumes: [0]
  990. thisConsumes: [0]
  991. followConsumes: [3-inf]
  992. isThisIrrefutable: false
  993. isFollowIrrefutable: false
  994. isWord: false
  995. isThisWillNotProgress: true
  996. isThisWillNotRegress: true
  997. isPrevWillNotProgress: false
  998. isPrevWillNotRegress: true
  999. isDeterministic: true
  1000. isNotInLoop: true
  1001. isNotNegated: true
  1002. isAtLeastOnce: true
  1003. hasInitialHardFailBOI: true
  1004. >
  1005. MatchLiteral("abc")
  1006. <
  1007. features: {MatchLiteral}
  1008. firstSet: [a] (exact)
  1009. followSet: [\x00-\uffff]
  1010. prevConsumes: [0]
  1011. thisConsumes: [3]
  1012. followConsumes: [0-inf]
  1013. isThisIrrefutable: false
  1014. isFollowIrrefutable: true
  1015. isWord: true
  1016. isThisWillNotProgress: true
  1017. isThisWillNotRegress: true
  1018. isPrevWillNotProgress: false
  1019. isPrevWillNotRegress: true
  1020. isDeterministic: true
  1021. isNotInLoop: true
  1022. isNotNegated: true
  1023. isAtLeastOnce: true
  1024. hasInitialHardFailBOI: false
  1025. >
  1026. }
  1027. }
  1028. }
  1029. REGEX PROGRAM /(?=^abc)/
  1030. Program {
  1031. source: (?=^abc)
  1032. litbuf: abc
  1033. litbufLen: 3
  1034. flags:
  1035. numGroups: 1
  1036. numLoops: 0
  1037. instructions: {
  1038. L0000: BeginAssertion(minBodyGroupId: 1, maxBodyGroupId: -1, isNegation: false, nextLabel: Lffff)
  1039. L0001: BOIHardFailTest(<hardFail>: true)
  1040. L0002: MatchLiteral(literal: "abc")
  1041. L0003: EndAssertion()
  1042. L0004: Succ()
  1043. }
  1044. }
  1045. REGEX AST /(^token)/ {
  1046. DefineGroup(1)
  1047. {
  1048. Concat()
  1049. {
  1050. BOL()
  1051. MatchLiteral("token")
  1052. }
  1053. }
  1054. }
  1055. REGEX ANNOTATED AST /(^token)/ {
  1056. DefineGroup(1)
  1057. <
  1058. features: {BOL,MatchLiteral,Concat,DefineGroup}
  1059. firstSet: [\x00-\uffff]
  1060. followSet: [\x00-\uffff]
  1061. prevConsumes: [0]
  1062. thisConsumes: [5]
  1063. followConsumes: [0]
  1064. isThisIrrefutable: false
  1065. isFollowIrrefutable: true
  1066. isWord: false
  1067. isThisWillNotProgress: true
  1068. isThisWillNotRegress: true
  1069. isPrevWillNotProgress: false
  1070. isPrevWillNotRegress: true
  1071. isDeterministic: true
  1072. isNotInLoop: true
  1073. isNotNegated: true
  1074. isAtLeastOnce: true
  1075. hasInitialHardFailBOI: true
  1076. >
  1077. {
  1078. Concat()
  1079. <
  1080. features: {BOL,MatchLiteral,Concat}
  1081. firstSet: [\x00-\uffff]
  1082. followSet: [\x00-\uffff]
  1083. prevConsumes: [0]
  1084. thisConsumes: [5]
  1085. followConsumes: [0]
  1086. isThisIrrefutable: false
  1087. isFollowIrrefutable: true
  1088. isWord: false
  1089. isThisWillNotProgress: true
  1090. isThisWillNotRegress: true
  1091. isPrevWillNotProgress: false
  1092. isPrevWillNotRegress: true
  1093. isDeterministic: true
  1094. isNotInLoop: true
  1095. isNotNegated: true
  1096. isAtLeastOnce: true
  1097. hasInitialHardFailBOI: true
  1098. >
  1099. {
  1100. BOL()
  1101. <
  1102. features: {BOL}
  1103. firstSet: [\x00-\uffff]
  1104. followSet: [t]
  1105. prevConsumes: [0]
  1106. thisConsumes: [0]
  1107. followConsumes: [5]
  1108. isThisIrrefutable: false
  1109. isFollowIrrefutable: false
  1110. isWord: false
  1111. isThisWillNotProgress: true
  1112. isThisWillNotRegress: true
  1113. isPrevWillNotProgress: false
  1114. isPrevWillNotRegress: true
  1115. isDeterministic: true
  1116. isNotInLoop: true
  1117. isNotNegated: true
  1118. isAtLeastOnce: true
  1119. hasInitialHardFailBOI: true
  1120. >
  1121. MatchLiteral("token")
  1122. <
  1123. features: {MatchLiteral}
  1124. firstSet: [t] (exact)
  1125. followSet: [\x00-\uffff]
  1126. prevConsumes: [0]
  1127. thisConsumes: [5]
  1128. followConsumes: [0]
  1129. isThisIrrefutable: false
  1130. isFollowIrrefutable: true
  1131. isWord: true
  1132. isThisWillNotProgress: true
  1133. isThisWillNotRegress: true
  1134. isPrevWillNotProgress: false
  1135. isPrevWillNotRegress: true
  1136. isDeterministic: true
  1137. isNotInLoop: true
  1138. isNotNegated: true
  1139. isAtLeastOnce: true
  1140. hasInitialHardFailBOI: false
  1141. >
  1142. }
  1143. }
  1144. }
  1145. REGEX PROGRAM /(^token)/
  1146. Program {
  1147. source: (^token)
  1148. litbuf: token
  1149. litbufLen: 5
  1150. flags:
  1151. numGroups: 2
  1152. numLoops: 0
  1153. instructions: {
  1154. BOITest(hardFail: true)
  1155. L0000: MatchLiteral(literal: "token")
  1156. L0001: DefineGroupFixed(groupId: 1, length: 5, noNeedToSave: true)
  1157. L0002: Succ()
  1158. }
  1159. }
  1160. REGEX AST /(^a)+/ {
  1161. Loop([1-inf], greedy)
  1162. {
  1163. DefineGroup(1)
  1164. {
  1165. Concat()
  1166. {
  1167. BOL()
  1168. MatchChar('a')
  1169. }
  1170. }
  1171. }
  1172. }
  1173. REGEX ANNOTATED AST /(^a)+/ {
  1174. Loop([1-inf], greedy)
  1175. <
  1176. features: {BOL,MatchChar,Concat,DefineGroup,Loop}
  1177. firstSet: [\x00-\uffff]
  1178. followSet: [\x00-\uffff]
  1179. prevConsumes: [0]
  1180. thisConsumes: [1-inf]
  1181. followConsumes: [0]
  1182. isThisIrrefutable: false
  1183. isFollowIrrefutable: true
  1184. isWord: false
  1185. isThisWillNotProgress: true
  1186. isThisWillNotRegress: false
  1187. isPrevWillNotProgress: false
  1188. isPrevWillNotRegress: true
  1189. isDeterministic: false
  1190. isNotInLoop: true
  1191. isNotNegated: true
  1192. isAtLeastOnce: true
  1193. hasInitialHardFailBOI: false
  1194. >
  1195. {
  1196. DefineGroup(1)
  1197. <
  1198. features: {BOL,MatchChar,Concat,DefineGroup}
  1199. firstSet: [\x00-\uffff]
  1200. followSet: [\x00-\uffff]
  1201. prevConsumes: [0-inf]
  1202. thisConsumes: [1]
  1203. followConsumes: [0-inf]
  1204. isThisIrrefutable: false
  1205. isFollowIrrefutable: true
  1206. isWord: false
  1207. isThisWillNotProgress: true
  1208. isThisWillNotRegress: true
  1209. isPrevWillNotProgress: false
  1210. isPrevWillNotRegress: false
  1211. isDeterministic: true
  1212. isNotInLoop: false
  1213. isNotNegated: true
  1214. isAtLeastOnce: true
  1215. hasInitialHardFailBOI: false
  1216. >
  1217. {
  1218. Concat()
  1219. <
  1220. features: {BOL,MatchChar,Concat}
  1221. firstSet: [\x00-\uffff]
  1222. followSet: [\x00-\uffff]
  1223. prevConsumes: [0-inf]
  1224. thisConsumes: [1]
  1225. followConsumes: [0-inf]
  1226. isThisIrrefutable: false
  1227. isFollowIrrefutable: true
  1228. isWord: false
  1229. isThisWillNotProgress: true
  1230. isThisWillNotRegress: true
  1231. isPrevWillNotProgress: false
  1232. isPrevWillNotRegress: false
  1233. isDeterministic: true
  1234. isNotInLoop: false
  1235. isNotNegated: true
  1236. isAtLeastOnce: true
  1237. hasInitialHardFailBOI: false
  1238. >
  1239. {
  1240. BOL()
  1241. <
  1242. features: {BOL}
  1243. firstSet: [\x00-\uffff]
  1244. followSet: [a]
  1245. prevConsumes: [0-inf]
  1246. thisConsumes: [0]
  1247. followConsumes: [1-inf]
  1248. isThisIrrefutable: false
  1249. isFollowIrrefutable: false
  1250. isWord: false
  1251. isThisWillNotProgress: true
  1252. isThisWillNotRegress: true
  1253. isPrevWillNotProgress: false
  1254. isPrevWillNotRegress: false
  1255. isDeterministic: true
  1256. isNotInLoop: false
  1257. isNotNegated: true
  1258. isAtLeastOnce: true
  1259. hasInitialHardFailBOI: false
  1260. >
  1261. MatchChar('a')
  1262. <
  1263. features: {MatchChar}
  1264. firstSet: [a] (exact)
  1265. followSet: [\x00-\uffff]
  1266. prevConsumes: [0-inf]
  1267. thisConsumes: [1]
  1268. followConsumes: [0-inf]
  1269. isThisIrrefutable: false
  1270. isFollowIrrefutable: true
  1271. isWord: true
  1272. isThisWillNotProgress: true
  1273. isThisWillNotRegress: true
  1274. isPrevWillNotProgress: false
  1275. isPrevWillNotRegress: false
  1276. isDeterministic: true
  1277. isNotInLoop: false
  1278. isNotNegated: true
  1279. isAtLeastOnce: true
  1280. hasInitialHardFailBOI: false
  1281. >
  1282. }
  1283. }
  1284. }
  1285. }
  1286. REGEX PROGRAM /(^a)+/
  1287. Program {
  1288. source: (^a)+
  1289. litbuf: <NONE>
  1290. litbufLen: 0
  1291. flags:
  1292. numGroups: 2
  1293. numLoops: 1
  1294. instructions: {
  1295. L0000: SyncToCharAndBackup(c: 'a', backup: [0-inf])
  1296. L0001: BeginLoopFixedGroupLastIteration(loopId: 0, repeats: [1-inf], hasOuterLoops: false, hasInnerNondet: false, exitLabel: Lffff, , length: 1, groupId: 1, noNeedToSave: true)
  1297. L0002: BOITest(<hardFail>: false)
  1298. L0003: MatchChar(c: 'a')
  1299. L0004: RepeatLoopFixedGroupLastIteration(beginLabel: Lffff)
  1300. L0005: Succ()
  1301. }
  1302. }
  1303. REGEX AST /(?=^)/ {
  1304. Assertion(positive)
  1305. {
  1306. BOL()
  1307. }
  1308. }
  1309. REGEX ANNOTATED AST /(?=^)/ {
  1310. Assertion(positive)
  1311. <
  1312. features: {BOL,Assertion}
  1313. firstSet: [\x00-\uffff]
  1314. followSet: [\x00-\uffff]
  1315. prevConsumes: [0]
  1316. thisConsumes: [0]
  1317. followConsumes: [0]
  1318. isThisIrrefutable: false
  1319. isFollowIrrefutable: true
  1320. isWord: false
  1321. isThisWillNotProgress: true
  1322. isThisWillNotRegress: true
  1323. isPrevWillNotProgress: false
  1324. isPrevWillNotRegress: true
  1325. isDeterministic: true
  1326. isNotInLoop: true
  1327. isNotNegated: true
  1328. isAtLeastOnce: true
  1329. hasInitialHardFailBOI: true
  1330. >
  1331. {
  1332. BOL()
  1333. <
  1334. features: {BOL}
  1335. firstSet: [\x00-\uffff]
  1336. followSet: [\x00-\uffff]
  1337. prevConsumes: [0]
  1338. thisConsumes: [0]
  1339. followConsumes: [0-inf]
  1340. isThisIrrefutable: false
  1341. isFollowIrrefutable: true
  1342. isWord: false
  1343. isThisWillNotProgress: true
  1344. isThisWillNotRegress: true
  1345. isPrevWillNotProgress: false
  1346. isPrevWillNotRegress: true
  1347. isDeterministic: true
  1348. isNotInLoop: true
  1349. isNotNegated: true
  1350. isAtLeastOnce: true
  1351. hasInitialHardFailBOI: true
  1352. >
  1353. }
  1354. }
  1355. REGEX PROGRAM /(?=^)/
  1356. Program {
  1357. source: (?=^)
  1358. litbuf: <NONE>
  1359. litbufLen: 0
  1360. flags:
  1361. numGroups: 1
  1362. numLoops: 0
  1363. instructions: {
  1364. L0000: BeginAssertion(minBodyGroupId: 1, maxBodyGroupId: -1, isNegation: false, nextLabel: Lffff)
  1365. L0001: BOIHardFailTest(<hardFail>: true)
  1366. L0002: EndAssertion()
  1367. L0003: Succ()
  1368. }
  1369. }
  1370. REGEX AST /(^)/ {
  1371. DefineGroup(1)
  1372. {
  1373. BOL()
  1374. }
  1375. }
  1376. REGEX ANNOTATED AST /(^)/ {
  1377. DefineGroup(1)
  1378. <
  1379. features: {BOL,DefineGroup}
  1380. firstSet: [\x00-\uffff]
  1381. followSet: [\x00-\uffff]
  1382. prevConsumes: [0]
  1383. thisConsumes: [0]
  1384. followConsumes: [0]
  1385. isThisIrrefutable: false
  1386. isFollowIrrefutable: true
  1387. isWord: false
  1388. isThisWillNotProgress: true
  1389. isThisWillNotRegress: true
  1390. isPrevWillNotProgress: false
  1391. isPrevWillNotRegress: true
  1392. isDeterministic: true
  1393. isNotInLoop: true
  1394. isNotNegated: true
  1395. isAtLeastOnce: true
  1396. hasInitialHardFailBOI: true
  1397. >
  1398. {
  1399. BOL()
  1400. <
  1401. features: {BOL}
  1402. firstSet: [\x00-\uffff]
  1403. followSet: [\x00-\uffff]
  1404. prevConsumes: [0]
  1405. thisConsumes: [0]
  1406. followConsumes: [0]
  1407. isThisIrrefutable: false
  1408. isFollowIrrefutable: true
  1409. isWord: false
  1410. isThisWillNotProgress: true
  1411. isThisWillNotRegress: true
  1412. isPrevWillNotProgress: false
  1413. isPrevWillNotRegress: true
  1414. isDeterministic: true
  1415. isNotInLoop: true
  1416. isNotNegated: true
  1417. isAtLeastOnce: true
  1418. hasInitialHardFailBOI: true
  1419. >
  1420. }
  1421. }
  1422. REGEX PROGRAM /(^)/
  1423. Program {
  1424. source: (^)
  1425. litbuf: <NONE>
  1426. litbufLen: 0
  1427. flags:
  1428. numGroups: 2
  1429. numLoops: 0
  1430. instructions: {
  1431. BOITest(hardFail: true)
  1432. L0000: DefineGroupFixed(groupId: 1, length: 0, noNeedToSave: true)
  1433. L0001: Succ()
  1434. }
  1435. }
  1436. REGEX AST /(^)+/ {
  1437. Loop([1-inf], greedy)
  1438. {
  1439. DefineGroup(1)
  1440. {
  1441. BOL()
  1442. }
  1443. }
  1444. }
  1445. REGEX ANNOTATED AST /(^)+/ {
  1446. Loop([1-inf], greedy)
  1447. <
  1448. features: {BOL,DefineGroup,Loop}
  1449. firstSet: [\x00-\uffff]
  1450. followSet: [\x00-\uffff]
  1451. prevConsumes: [0]
  1452. thisConsumes: [0]
  1453. followConsumes: [0]
  1454. isThisIrrefutable: false
  1455. isFollowIrrefutable: true
  1456. isWord: false
  1457. isThisWillNotProgress: true
  1458. isThisWillNotRegress: false
  1459. isPrevWillNotProgress: false
  1460. isPrevWillNotRegress: true
  1461. isDeterministic: false
  1462. isNotInLoop: true
  1463. isNotNegated: true
  1464. isAtLeastOnce: true
  1465. hasInitialHardFailBOI: false
  1466. >
  1467. {
  1468. DefineGroup(1)
  1469. <
  1470. features: {BOL,DefineGroup}
  1471. firstSet: [\x00-\uffff]
  1472. followSet: [\x00-\uffff]
  1473. prevConsumes: [0]
  1474. thisConsumes: [0]
  1475. followConsumes: [0]
  1476. isThisIrrefutable: false
  1477. isFollowIrrefutable: false
  1478. isWord: false
  1479. isThisWillNotProgress: true
  1480. isThisWillNotRegress: true
  1481. isPrevWillNotProgress: false
  1482. isPrevWillNotRegress: false
  1483. isDeterministic: true
  1484. isNotInLoop: false
  1485. isNotNegated: true
  1486. isAtLeastOnce: true
  1487. hasInitialHardFailBOI: false
  1488. >
  1489. {
  1490. BOL()
  1491. <
  1492. features: {BOL}
  1493. firstSet: [\x00-\uffff]
  1494. followSet: [\x00-\uffff]
  1495. prevConsumes: [0]
  1496. thisConsumes: [0]
  1497. followConsumes: [0]
  1498. isThisIrrefutable: false
  1499. isFollowIrrefutable: false
  1500. isWord: false
  1501. isThisWillNotProgress: true
  1502. isThisWillNotRegress: true
  1503. isPrevWillNotProgress: false
  1504. isPrevWillNotRegress: false
  1505. isDeterministic: true
  1506. isNotInLoop: false
  1507. isNotNegated: true
  1508. isAtLeastOnce: true
  1509. hasInitialHardFailBOI: false
  1510. >
  1511. }
  1512. }
  1513. }
  1514. REGEX PROGRAM /(^)+/
  1515. Program {
  1516. source: (^)+
  1517. litbuf: <NONE>
  1518. litbufLen: 0
  1519. flags:
  1520. numGroups: 2
  1521. numLoops: 1
  1522. instructions: {
  1523. L0000: BeginLoop(loopId: 0, repeats: [1-inf], hasOuterLoops: false, hasInnerNondet: false, exitLabel: Lffff, , minBodyGroupId: 1, maxBodyGroupId: 1, greedy: true)
  1524. L0001: BOITest(<hardFail>: false)
  1525. L0002: DefineGroupFixed(groupId: 1, length: 0, noNeedToSave: false)
  1526. L0003: RepeatLoop(beginLabel: Lffff)
  1527. L0004: Succ()
  1528. }
  1529. }
  1530. REGEX AST /(?!^)/ {
  1531. Assertion(negative)
  1532. {
  1533. BOL()
  1534. }
  1535. }
  1536. REGEX ANNOTATED AST /(?!^)/ {
  1537. Assertion(negative)
  1538. <
  1539. features: {BOL,Assertion}
  1540. firstSet: [\x00-\uffff]
  1541. followSet: [\x00-\uffff]
  1542. prevConsumes: [0]
  1543. thisConsumes: [0]
  1544. followConsumes: [0]
  1545. isThisIrrefutable: false
  1546. isFollowIrrefutable: true
  1547. isWord: false
  1548. isThisWillNotProgress: true
  1549. isThisWillNotRegress: true
  1550. isPrevWillNotProgress: false
  1551. isPrevWillNotRegress: true
  1552. isDeterministic: true
  1553. isNotInLoop: true
  1554. isNotNegated: true
  1555. isAtLeastOnce: true
  1556. hasInitialHardFailBOI: false
  1557. >
  1558. {
  1559. BOL()
  1560. <
  1561. features: {BOL}
  1562. firstSet: [\x00-\uffff]
  1563. followSet: [\x00-\uffff]
  1564. prevConsumes: [0]
  1565. thisConsumes: [0]
  1566. followConsumes: [0-inf]
  1567. isThisIrrefutable: false
  1568. isFollowIrrefutable: true
  1569. isWord: false
  1570. isThisWillNotProgress: true
  1571. isThisWillNotRegress: true
  1572. isPrevWillNotProgress: false
  1573. isPrevWillNotRegress: true
  1574. isDeterministic: true
  1575. isNotInLoop: true
  1576. isNotNegated: false
  1577. isAtLeastOnce: true
  1578. hasInitialHardFailBOI: false
  1579. >
  1580. }
  1581. }
  1582. REGEX PROGRAM /(?!^)/
  1583. Program {
  1584. source: (?!^)
  1585. litbuf: <NONE>
  1586. litbufLen: 0
  1587. flags:
  1588. numGroups: 1
  1589. numLoops: 0
  1590. instructions: {
  1591. L0000: BeginAssertion(minBodyGroupId: 1, maxBodyGroupId: -1, isNegation: true, nextLabel: Lffff)
  1592. L0001: BOITest(<hardFail>: false)
  1593. L0002: EndAssertion()
  1594. L0003: Succ()
  1595. }
  1596. }
  1597. REGEX AST /(?:^abc)+?/ {
  1598. Loop([1-inf], non-greedy)
  1599. {
  1600. Concat()
  1601. {
  1602. BOL()
  1603. MatchLiteral("abc")
  1604. }
  1605. }
  1606. }
  1607. REGEX ANNOTATED AST /(?:^abc)+?/ {
  1608. Loop([1-inf], non-greedy)
  1609. <
  1610. features: {BOL,MatchLiteral,Concat,Loop}
  1611. firstSet: [\x00-\uffff]
  1612. followSet: [\x00-\uffff]
  1613. prevConsumes: [0]
  1614. thisConsumes: [3-inf]
  1615. followConsumes: [0]
  1616. isThisIrrefutable: false
  1617. isFollowIrrefutable: true
  1618. isWord: false
  1619. isThisWillNotProgress: false
  1620. isThisWillNotRegress: true
  1621. isPrevWillNotProgress: false
  1622. isPrevWillNotRegress: true
  1623. isDeterministic: false
  1624. isNotInLoop: true
  1625. isNotNegated: true
  1626. isAtLeastOnce: true
  1627. hasInitialHardFailBOI: false
  1628. >
  1629. {
  1630. Concat()
  1631. <
  1632. features: {BOL,MatchLiteral,Concat}
  1633. firstSet: [\x00-\uffff]
  1634. followSet: [\x00-\uffff]
  1635. prevConsumes: [0-inf]
  1636. thisConsumes: [3]
  1637. followConsumes: [0-inf]
  1638. isThisIrrefutable: false
  1639. isFollowIrrefutable: true
  1640. isWord: false
  1641. isThisWillNotProgress: true
  1642. isThisWillNotRegress: true
  1643. isPrevWillNotProgress: false
  1644. isPrevWillNotRegress: true
  1645. isDeterministic: true
  1646. isNotInLoop: false
  1647. isNotNegated: true
  1648. isAtLeastOnce: true
  1649. hasInitialHardFailBOI: false
  1650. >
  1651. {
  1652. BOL()
  1653. <
  1654. features: {BOL}
  1655. firstSet: [\x00-\uffff]
  1656. followSet: [a]
  1657. prevConsumes: [0-inf]
  1658. thisConsumes: [0]
  1659. followConsumes: [3-inf]
  1660. isThisIrrefutable: false
  1661. isFollowIrrefutable: false
  1662. isWord: false
  1663. isThisWillNotProgress: true
  1664. isThisWillNotRegress: true
  1665. isPrevWillNotProgress: false
  1666. isPrevWillNotRegress: true
  1667. isDeterministic: true
  1668. isNotInLoop: false
  1669. isNotNegated: true
  1670. isAtLeastOnce: true
  1671. hasInitialHardFailBOI: false
  1672. >
  1673. MatchLiteral("abc")
  1674. <
  1675. features: {MatchLiteral}
  1676. firstSet: [a] (exact)
  1677. followSet: [\x00-\uffff]
  1678. prevConsumes: [0-inf]
  1679. thisConsumes: [3]
  1680. followConsumes: [0-inf]
  1681. isThisIrrefutable: false
  1682. isFollowIrrefutable: true
  1683. isWord: true
  1684. isThisWillNotProgress: true
  1685. isThisWillNotRegress: true
  1686. isPrevWillNotProgress: false
  1687. isPrevWillNotRegress: true
  1688. isDeterministic: true
  1689. isNotInLoop: false
  1690. isNotNegated: true
  1691. isAtLeastOnce: true
  1692. hasInitialHardFailBOI: false
  1693. >
  1694. }
  1695. }
  1696. }
  1697. REGEX PROGRAM /(?:^abc)+?/
  1698. Program {
  1699. source: (?:^abc)+?
  1700. litbuf: abc
  1701. litbufLen: 3
  1702. flags:
  1703. numGroups: 1
  1704. numLoops: 1
  1705. instructions: {
  1706. L0000: SyncToLiteralAndBackupInstT<ScannerMixin_WithLinearCharMap> aka SyncToLinearLiteralAndBackup(literal: "abc" (with linear map Boyer-Moore scanner), backup: [0-inf])
  1707. L0001: BeginLoop(loopId: 0, repeats: [1-inf], hasOuterLoops: false, hasInnerNondet: false, exitLabel: Lffff, , minBodyGroupId: 1, maxBodyGroupId: -1, greedy: false)
  1708. L0002: BOIHardFailTest(<hardFail>: true)
  1709. L0003: MatchLiteral(literal: "abc")
  1710. L0004: RepeatLoop(beginLabel: Lffff)
  1711. L0005: Succ()
  1712. }
  1713. }