mltoken.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. // Code generated by [/home/jnml/.cache/go-build/8c/8caee5a3e40c8f95ce279e06648579171345a0e2087ad04b75718db6cfa4a945-d/generator -lexstring mlToken -pkg tk9_0 <...>], DO NOT EDIT.
  2. package tk9_0
  3. // mlToken recognizes longest ASCII lexemes. Lower IDs take precedence on same length.
  4. //
  5. // id 0: ([^$]|\\\$)*
  6. // id 1: \$([^$]|\\\$)*[^\\]\$
  7. // id 2: \$\$([^$]|\\\$)*[^\\]\$\$
  8. //
  9. // ID == -1 is returned when no lexeme was recognized.
  10. func mlToken(s string) (id, length int) {
  11. const endOfText = 0x110000
  12. var pos, pos0, width, width1 int
  13. id = -1
  14. var r, r1 rune
  15. _ = pos0
  16. _ = r
  17. _ = r1
  18. _ = width1
  19. step := func(pos int) (r rune, n int) {
  20. if pos < len(s) {
  21. return rune(s[pos]), 1
  22. }
  23. return endOfText, 0
  24. }
  25. move := func() {
  26. pos += width
  27. if r, width = r1, width1; r != endOfText {
  28. r1, width1 = step(pos + width)
  29. }
  30. }
  31. accept := func(x rune) bool {
  32. if r == x {
  33. move()
  34. return true
  35. }
  36. return false
  37. }
  38. _ = accept
  39. accept2 := func(x rune) bool {
  40. if r <= x {
  41. move()
  42. return true
  43. }
  44. return false
  45. }
  46. _ = accept2
  47. r, r1 = endOfText, endOfText
  48. width, width1 = 0, 0
  49. r, width = step(pos)
  50. if r != endOfText {
  51. r1, width1 = step(pos + width)
  52. }
  53. id, length = 0, pos
  54. if accept('$') {
  55. goto l8
  56. }
  57. if accept('\\') {
  58. goto l86
  59. }
  60. if accept2('#') {
  61. goto l100
  62. }
  63. if r < '%' {
  64. goto l5out
  65. }
  66. if accept2('\U0010ffff') {
  67. goto l100
  68. }
  69. l5out:
  70. return id, length
  71. l8:
  72. if accept('$') {
  73. goto l15
  74. }
  75. if accept('\\') {
  76. goto l59
  77. }
  78. if accept2('#') {
  79. goto l79
  80. }
  81. if r < '%' {
  82. goto l12out
  83. }
  84. if accept2('[') {
  85. goto l79
  86. }
  87. if r < ']' {
  88. goto l12out
  89. }
  90. if accept2('\U0010ffff') {
  91. goto l79
  92. }
  93. l12out:
  94. return id, length
  95. l15:
  96. if accept('$') {
  97. goto l22
  98. }
  99. if accept('\\') {
  100. goto l31
  101. }
  102. if accept2('#') {
  103. goto l52
  104. }
  105. if r < '%' {
  106. goto l19out
  107. }
  108. if accept2('[') {
  109. goto l52
  110. }
  111. if r < ']' {
  112. goto l19out
  113. }
  114. if accept2('\U0010ffff') {
  115. goto l52
  116. }
  117. l19out:
  118. return id, length
  119. l22:
  120. id, length = 1, pos
  121. if accept('$') {
  122. goto l26
  123. }
  124. return id, length
  125. l26:
  126. if accept('$') {
  127. goto l29
  128. }
  129. return id, length
  130. l29:
  131. id, length = 2, pos
  132. return id, length
  133. l31:
  134. if accept('$') {
  135. goto l38
  136. }
  137. if accept('\\') {
  138. goto l31
  139. }
  140. if accept2('#') {
  141. goto l52
  142. }
  143. if r < '%' {
  144. goto l35out
  145. }
  146. if accept2('[') {
  147. goto l52
  148. }
  149. if r < ']' {
  150. goto l35out
  151. }
  152. if accept2('\U0010ffff') {
  153. goto l52
  154. }
  155. l35out:
  156. return id, length
  157. l38:
  158. if accept('$') {
  159. goto l45
  160. }
  161. if accept('\\') {
  162. goto l31
  163. }
  164. if accept2('#') {
  165. goto l52
  166. }
  167. if r < '%' {
  168. goto l42out
  169. }
  170. if accept2('[') {
  171. goto l52
  172. }
  173. if r < ']' {
  174. goto l42out
  175. }
  176. if accept2('\U0010ffff') {
  177. goto l52
  178. }
  179. l42out:
  180. return id, length
  181. l45:
  182. if accept('$') {
  183. goto l48
  184. }
  185. return id, length
  186. l48:
  187. id, length = 2, pos
  188. if accept('$') {
  189. goto l29
  190. }
  191. return id, length
  192. l52:
  193. if accept('$') {
  194. goto l45
  195. }
  196. if accept('\\') {
  197. goto l31
  198. }
  199. if accept2('#') {
  200. goto l52
  201. }
  202. if r < '%' {
  203. goto l56out
  204. }
  205. if accept2('[') {
  206. goto l52
  207. }
  208. if r < ']' {
  209. goto l56out
  210. }
  211. if accept2('\U0010ffff') {
  212. goto l52
  213. }
  214. l56out:
  215. return id, length
  216. l59:
  217. if accept('$') {
  218. goto l66
  219. }
  220. if accept('\\') {
  221. goto l59
  222. }
  223. if accept2('#') {
  224. goto l79
  225. }
  226. if r < '%' {
  227. goto l63out
  228. }
  229. if accept2('[') {
  230. goto l79
  231. }
  232. if r < ']' {
  233. goto l63out
  234. }
  235. if accept2('\U0010ffff') {
  236. goto l79
  237. }
  238. l63out:
  239. return id, length
  240. l66:
  241. if accept('$') {
  242. goto l73
  243. }
  244. if accept('\\') {
  245. goto l59
  246. }
  247. if accept2('#') {
  248. goto l79
  249. }
  250. if r < '%' {
  251. goto l70out
  252. }
  253. if accept2('[') {
  254. goto l79
  255. }
  256. if r < ']' {
  257. goto l70out
  258. }
  259. if accept2('\U0010ffff') {
  260. goto l79
  261. }
  262. l70out:
  263. return id, length
  264. l73:
  265. id, length = 1, pos
  266. if accept('$') {
  267. goto l77
  268. }
  269. return id, length
  270. l77:
  271. id, length = 1, pos
  272. return id, length
  273. l79:
  274. if accept('$') {
  275. goto l73
  276. }
  277. if accept('\\') {
  278. goto l59
  279. }
  280. if accept2('#') {
  281. goto l79
  282. }
  283. if r < '%' {
  284. goto l83out
  285. }
  286. if accept2('[') {
  287. goto l79
  288. }
  289. if r < ']' {
  290. goto l83out
  291. }
  292. if accept2('\U0010ffff') {
  293. goto l79
  294. }
  295. l83out:
  296. return id, length
  297. l86:
  298. id, length = 0, pos
  299. if accept('$') {
  300. goto l94
  301. }
  302. if accept('\\') {
  303. goto l86
  304. }
  305. if accept2('#') {
  306. goto l100
  307. }
  308. if r < '%' {
  309. goto l91out
  310. }
  311. if accept2('\U0010ffff') {
  312. goto l100
  313. }
  314. l91out:
  315. return id, length
  316. l94:
  317. id, length = 0, pos
  318. if accept('\\') {
  319. goto l86
  320. }
  321. if accept2('#') {
  322. goto l100
  323. }
  324. if r < '%' {
  325. goto l97out
  326. }
  327. if accept2('\U0010ffff') {
  328. goto l100
  329. }
  330. l97out:
  331. return id, length
  332. l100:
  333. id, length = 0, pos
  334. if accept('\\') {
  335. goto l86
  336. }
  337. if accept2('#') {
  338. goto l100
  339. }
  340. if r < '%' {
  341. goto l103out
  342. }
  343. if accept2('\U0010ffff') {
  344. goto l100
  345. }
  346. l103out:
  347. return id, length
  348. id, length = 0, pos
  349. if accept('$') {
  350. goto l8
  351. }
  352. if accept('\\') {
  353. goto l86
  354. }
  355. if accept2('#') {
  356. goto l100
  357. }
  358. if r < '%' {
  359. goto l111out
  360. }
  361. if accept2('\U0010ffff') {
  362. goto l100
  363. }
  364. l111out:
  365. return id, length
  366. }