spacepaste

  1.  
  2. /++
  3. This module was automatically generated from the following grammar:
  4. assemblyFile:
  5. list <- line+ EOF
  6. line <- :WS? (comment / instruction)
  7. comment <- :';' ~((!'\n' .)*) EOL / EOL
  8. label_list <- (label :WS? / comment? :WS?)*
  9. label <- ~(!operation ([a-zA-Z_] [a-zA-Z0-9_]*)) :WS? ':'?
  10. operation <- opcode :'.' modifier BOUND / opcode BOUND
  11. opcode <~ 'dat'i / 'mov'i / 'add'i /
  12. 'sub'i / 'mul'i / 'div'i /
  13. 'mod'i / 'jmp'i / 'jmz'i /
  14. 'jmn'i / 'djn'i / 'cmp'i /
  15. 'slt'i / 'spl'i / 'sne'i /
  16. 'seq'i / 'org'i / 'equ'i /
  17. 'end'i / 'for'i / 'rof'i
  18. pseudo_opcode <- 'org'i / 'equ'i / 'end'i / 'for'i / 'rof'i
  19. modifier <- 'ab'i / 'ba'i / 'a'i / 'b'i / 'f'i / 'x'i / 'i'i / eps
  20. mode <- '#' / '$' / '@' / '<' / '>' / '{' / '}' / '*' / eps
  21. expr <- [-+] :WS? expr / '(' :WS? expr :WS? ')' :WS? tail / term :WS? tail
  22. tail <- '%' :WS? expr / '/' :WS? expr / '*' :WS? expr / '-' :WS? expr / '+' :WS? expr / '&' :WS? expr / eps
  23. term <- label / number / expr
  24. assign <- label :WS? '=' :WS? expr
  25. number <~ [0-9]+
  26. WS <- [ \t]+
  27. EOL <- :'\n' / EOF
  28. EOF <- !.
  29. BOUND <- WS / EOL / EOF
  30. instruction <- label_list :WS? operation :WS? mode :WS? (assign / expr) :WS? ',' :WS? mode :WS? (expr / assign) :WS? comment /
  31. label_list :WS? operation :WS? mode :WS? (assign / expr) :WS? comment /
  32. label_list :WS? pseudo_opcode :WS? comment
  33. +/
  34. module grammar;
  35. public import pegged.peg;
  36. import std.algorithm: startsWith;
  37. import std.functional: toDelegate;
  38. struct GenericassemblyFile(TParseTree)
  39. {
  40. import pegged.dynamic.grammar;
  41. struct assemblyFile
  42. {
  43. enum name = "assemblyFile";
  44. static ParseTree delegate(ParseTree)[string] before;
  45. static ParseTree delegate(ParseTree)[string] after;
  46. static ParseTree delegate(ParseTree)[string] rules;
  47. static this()
  48. {
  49. rules["list"] = toDelegate(&list);
  50. rules["line"] = toDelegate(&line);
  51. rules["comment"] = toDelegate(&comment);
  52. rules["label_list"] = toDelegate(&label_list);
  53. rules["label"] = toDelegate(&label);
  54. rules["operation"] = toDelegate(&operation);
  55. rules["opcode"] = toDelegate(&opcode);
  56. rules["pseudo_opcode"] = toDelegate(&pseudo_opcode);
  57. rules["modifier"] = toDelegate(&modifier);
  58. rules["mode"] = toDelegate(&mode);
  59. rules["expr"] = toDelegate(&expr);
  60. rules["tail"] = toDelegate(&tail);
  61. rules["term"] = toDelegate(&term);
  62. rules["assign"] = toDelegate(&assign);
  63. rules["number"] = toDelegate(&number);
  64. rules["WS"] = toDelegate(&WS);
  65. rules["EOL"] = toDelegate(&EOL);
  66. rules["EOF"] = toDelegate(&EOF);
  67. rules["BOUND"] = toDelegate(&BOUND);
  68. rules["instruction"] = toDelegate(&instruction);
  69. rules["Spacing"] = toDelegate(&Spacing);
  70. }
  71. template hooked(alias r, string name)
  72. {
  73. static ParseTree hooked(ParseTree p)
  74. {
  75. ParseTree result;
  76. if (name in before)
  77. {
  78. result = before[name](p);
  79. if (result.successful)
  80. return result;
  81. }
  82. result = r(p);
  83. if (result.successful || name !in after)
  84. return result;
  85. result = after[name](p);
  86. return result;
  87. }
  88. static ParseTree hooked(string input)
  89. {
  90. return hooked!(r, name)(ParseTree("",false,[],input));
  91. }
  92. }
  93. static void addRuleBefore(string parentRule, string ruleSyntax)
  94. {
  95. // enum name is the current grammar name
  96. DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules);
  97. foreach(ruleName,rule; dg.rules)
  98. if (ruleName != "Spacing") // Keep the local Spacing rule, do not overwrite it
  99. rules[ruleName] = rule;
  100. before[parentRule] = rules[dg.startingRule];
  101. }
  102. static void addRuleAfter(string parentRule, string ruleSyntax)
  103. {
  104. // enum name is the current grammar named
  105. DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules);
  106. foreach(name,rule; dg.rules)
  107. {
  108. if (name != "Spacing")
  109. rules[name] = rule;
  110. }
  111. after[parentRule] = rules[dg.startingRule];
  112. }
  113. static bool isRule(string s)
  114. {
  115. return s.startsWith("assemblyFile.");
  116. }
  117. import std.typecons:Tuple, tuple;
  118. static TParseTree[Tuple!(string, size_t)] memo;
  119. static bool blockMemo = false;
  120. mixin decimateTree;
  121. alias spacing Spacing;
  122. static TParseTree list(TParseTree p)
  123. {
  124. if(__ctfe)
  125. {
  126. return pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(line), EOF), "assemblyFile.list")(p);
  127. }
  128. else
  129. {
  130. if (blockMemo)
  131. return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(line), EOF), "assemblyFile.list"), "list")(p);
  132. else
  133. {
  134. if (auto m = tuple(`list`, p.end) in memo)
  135. return *m;
  136. else
  137. {
  138. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(line), EOF), "assemblyFile.list"), "list")(p);
  139. memo[tuple(`list`, p.end)] = result;
  140. return result;
  141. }
  142. }
  143. }
  144. }
  145. static TParseTree list(string s)
  146. {
  147. if(__ctfe)
  148. {
  149. return pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(line), EOF), "assemblyFile.list")(TParseTree("", false,[], s));
  150. }
  151. else
  152. {
  153. memo = null;
  154. return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(line), EOF), "assemblyFile.list"), "list")(TParseTree("", false,[], s));
  155. }
  156. }
  157. static string list(GetName g)
  158. {
  159. return "assemblyFile.list";
  160. }
  161. static TParseTree line(TParseTree p)
  162. {
  163. if(__ctfe)
  164. {
  165. return pegged.peg.defined!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(comment, instruction)), "assemblyFile.line")(p);
  166. }
  167. else
  168. {
  169. if (blockMemo)
  170. return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(comment, instruction)), "assemblyFile.line"), "line")(p);
  171. else
  172. {
  173. if (auto m = tuple(`line`, p.end) in memo)
  174. return *m;
  175. else
  176. {
  177. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(comment, instruction)), "assemblyFile.line"), "line")(p);
  178. memo[tuple(`line`, p.end)] = result;
  179. return result;
  180. }
  181. }
  182. }
  183. }
  184. static TParseTree line(string s)
  185. {
  186. if(__ctfe)
  187. {
  188. return pegged.peg.defined!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(comment, instruction)), "assemblyFile.line")(TParseTree("", false,[], s));
  189. }
  190. else
  191. {
  192. memo = null;
  193. return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(comment, instruction)), "assemblyFile.line"), "line")(TParseTree("", false,[], s));
  194. }
  195. }
  196. static string line(GetName g)
  197. {
  198. return "assemblyFile.line";
  199. }
  200. static TParseTree comment(TParseTree p)
  201. {
  202. if(__ctfe)
  203. {
  204. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.literal!(";")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("\n")), pegged.peg.any))), EOL), EOL), "assemblyFile.comment")(p);
  205. }
  206. else
  207. {
  208. if (blockMemo)
  209. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.literal!(";")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("\n")), pegged.peg.any))), EOL), EOL), "assemblyFile.comment"), "comment")(p);
  210. else
  211. {
  212. if (auto m = tuple(`comment`, p.end) in memo)
  213. return *m;
  214. else
  215. {
  216. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.literal!(";")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("\n")), pegged.peg.any))), EOL), EOL), "assemblyFile.comment"), "comment")(p);
  217. memo[tuple(`comment`, p.end)] = result;
  218. return result;
  219. }
  220. }
  221. }
  222. }
  223. static TParseTree comment(string s)
  224. {
  225. if(__ctfe)
  226. {
  227. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.literal!(";")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("\n")), pegged.peg.any))), EOL), EOL), "assemblyFile.comment")(TParseTree("", false,[], s));
  228. }
  229. else
  230. {
  231. memo = null;
  232. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.discard!(pegged.peg.literal!(";")), pegged.peg.fuse!(pegged.peg.zeroOrMore!(pegged.peg.and!(pegged.peg.negLookahead!(pegged.peg.literal!("\n")), pegged.peg.any))), EOL), EOL), "assemblyFile.comment"), "comment")(TParseTree("", false,[], s));
  233. }
  234. }
  235. static string comment(GetName g)
  236. {
  237. return "assemblyFile.comment";
  238. }
  239. static TParseTree label_list(TParseTree p)
  240. {
  241. if(__ctfe)
  242. {
  243. return pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS))), pegged.peg.and!(pegged.peg.option!(comment), pegged.peg.discard!(pegged.peg.option!(WS))))), "assemblyFile.label_list")(p);
  244. }
  245. else
  246. {
  247. if (blockMemo)
  248. return hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS))), pegged.peg.and!(pegged.peg.option!(comment), pegged.peg.discard!(pegged.peg.option!(WS))))), "assemblyFile.label_list"), "label_list")(p);
  249. else
  250. {
  251. if (auto m = tuple(`label_list`, p.end) in memo)
  252. return *m;
  253. else
  254. {
  255. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS))), pegged.peg.and!(pegged.peg.option!(comment), pegged.peg.discard!(pegged.peg.option!(WS))))), "assemblyFile.label_list"), "label_list")(p);
  256. memo[tuple(`label_list`, p.end)] = result;
  257. return result;
  258. }
  259. }
  260. }
  261. }
  262. static TParseTree label_list(string s)
  263. {
  264. if(__ctfe)
  265. {
  266. return pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS))), pegged.peg.and!(pegged.peg.option!(comment), pegged.peg.discard!(pegged.peg.option!(WS))))), "assemblyFile.label_list")(TParseTree("", false,[], s));
  267. }
  268. else
  269. {
  270. memo = null;
  271. return hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS))), pegged.peg.and!(pegged.peg.option!(comment), pegged.peg.discard!(pegged.peg.option!(WS))))), "assemblyFile.label_list"), "label_list")(TParseTree("", false,[], s));
  272. }
  273. }
  274. static string label_list(GetName g)
  275. {
  276. return "assemblyFile.label_list";
  277. }
  278. static TParseTree label(TParseTree p)
  279. {
  280. if(__ctfe)
  281. {
  282. return pegged.peg.defined!(pegged.peg.and!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.negLookahead!(operation), pegged.peg.and!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_")), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('0', '9'), pegged.peg.literal!("_")))))), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.option!(pegged.peg.literal!(":"))), "assemblyFile.label")(p);
  283. }
  284. else
  285. {
  286. if (blockMemo)
  287. return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.negLookahead!(operation), pegged.peg.and!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_")), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('0', '9'), pegged.peg.literal!("_")))))), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.option!(pegged.peg.literal!(":"))), "assemblyFile.label"), "label")(p);
  288. else
  289. {
  290. if (auto m = tuple(`label`, p.end) in memo)
  291. return *m;
  292. else
  293. {
  294. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.negLookahead!(operation), pegged.peg.and!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_")), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('0', '9'), pegged.peg.literal!("_")))))), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.option!(pegged.peg.literal!(":"))), "assemblyFile.label"), "label")(p);
  295. memo[tuple(`label`, p.end)] = result;
  296. return result;
  297. }
  298. }
  299. }
  300. }
  301. static TParseTree label(string s)
  302. {
  303. if(__ctfe)
  304. {
  305. return pegged.peg.defined!(pegged.peg.and!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.negLookahead!(operation), pegged.peg.and!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_")), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('0', '9'), pegged.peg.literal!("_")))))), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.option!(pegged.peg.literal!(":"))), "assemblyFile.label")(TParseTree("", false,[], s));
  306. }
  307. else
  308. {
  309. memo = null;
  310. return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.fuse!(pegged.peg.and!(pegged.peg.negLookahead!(operation), pegged.peg.and!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.literal!("_")), pegged.peg.zeroOrMore!(pegged.peg.or!(pegged.peg.charRange!('a', 'z'), pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('0', '9'), pegged.peg.literal!("_")))))), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.option!(pegged.peg.literal!(":"))), "assemblyFile.label"), "label")(TParseTree("", false,[], s));
  311. }
  312. }
  313. static string label(GetName g)
  314. {
  315. return "assemblyFile.label";
  316. }
  317. static TParseTree operation(TParseTree p)
  318. {
  319. if(__ctfe)
  320. {
  321. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(opcode, pegged.peg.discard!(pegged.peg.literal!(".")), modifier, BOUND), pegged.peg.and!(opcode, BOUND)), "assemblyFile.operation")(p);
  322. }
  323. else
  324. {
  325. if (blockMemo)
  326. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(opcode, pegged.peg.discard!(pegged.peg.literal!(".")), modifier, BOUND), pegged.peg.and!(opcode, BOUND)), "assemblyFile.operation"), "operation")(p);
  327. else
  328. {
  329. if (auto m = tuple(`operation`, p.end) in memo)
  330. return *m;
  331. else
  332. {
  333. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(opcode, pegged.peg.discard!(pegged.peg.literal!(".")), modifier, BOUND), pegged.peg.and!(opcode, BOUND)), "assemblyFile.operation"), "operation")(p);
  334. memo[tuple(`operation`, p.end)] = result;
  335. return result;
  336. }
  337. }
  338. }
  339. }
  340. static TParseTree operation(string s)
  341. {
  342. if(__ctfe)
  343. {
  344. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(opcode, pegged.peg.discard!(pegged.peg.literal!(".")), modifier, BOUND), pegged.peg.and!(opcode, BOUND)), "assemblyFile.operation")(TParseTree("", false,[], s));
  345. }
  346. else
  347. {
  348. memo = null;
  349. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(opcode, pegged.peg.discard!(pegged.peg.literal!(".")), modifier, BOUND), pegged.peg.and!(opcode, BOUND)), "assemblyFile.operation"), "operation")(TParseTree("", false,[], s));
  350. }
  351. }
  352. static string operation(GetName g)
  353. {
  354. return "assemblyFile.operation";
  355. }
  356. static TParseTree opcode(TParseTree p)
  357. {
  358. if(__ctfe)
  359. {
  360. return pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("dat"), pegged.peg.caseInsensitiveLiteral!("mov"), pegged.peg.caseInsensitiveLiteral!("add"), pegged.peg.caseInsensitiveLiteral!("sub"), pegged.peg.caseInsensitiveLiteral!("mul"), pegged.peg.caseInsensitiveLiteral!("div"), pegged.peg.caseInsensitiveLiteral!("mod"), pegged.peg.caseInsensitiveLiteral!("jmp"), pegged.peg.caseInsensitiveLiteral!("jmz"), pegged.peg.caseInsensitiveLiteral!("jmn"), pegged.peg.caseInsensitiveLiteral!("djn"), pegged.peg.caseInsensitiveLiteral!("cmp"), pegged.peg.caseInsensitiveLiteral!("slt"), pegged.peg.caseInsensitiveLiteral!("spl"), pegged.peg.caseInsensitiveLiteral!("sne"), pegged.peg.caseInsensitiveLiteral!("seq"), pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof"))), "assemblyFile.opcode")(p);
  361. }
  362. else
  363. {
  364. if (blockMemo)
  365. return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("dat"), pegged.peg.caseInsensitiveLiteral!("mov"), pegged.peg.caseInsensitiveLiteral!("add"), pegged.peg.caseInsensitiveLiteral!("sub"), pegged.peg.caseInsensitiveLiteral!("mul"), pegged.peg.caseInsensitiveLiteral!("div"), pegged.peg.caseInsensitiveLiteral!("mod"), pegged.peg.caseInsensitiveLiteral!("jmp"), pegged.peg.caseInsensitiveLiteral!("jmz"), pegged.peg.caseInsensitiveLiteral!("jmn"), pegged.peg.caseInsensitiveLiteral!("djn"), pegged.peg.caseInsensitiveLiteral!("cmp"), pegged.peg.caseInsensitiveLiteral!("slt"), pegged.peg.caseInsensitiveLiteral!("spl"), pegged.peg.caseInsensitiveLiteral!("sne"), pegged.peg.caseInsensitiveLiteral!("seq"), pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof"))), "assemblyFile.opcode"), "opcode")(p);
  366. else
  367. {
  368. if (auto m = tuple(`opcode`, p.end) in memo)
  369. return *m;
  370. else
  371. {
  372. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("dat"), pegged.peg.caseInsensitiveLiteral!("mov"), pegged.peg.caseInsensitiveLiteral!("add"), pegged.peg.caseInsensitiveLiteral!("sub"), pegged.peg.caseInsensitiveLiteral!("mul"), pegged.peg.caseInsensitiveLiteral!("div"), pegged.peg.caseInsensitiveLiteral!("mod"), pegged.peg.caseInsensitiveLiteral!("jmp"), pegged.peg.caseInsensitiveLiteral!("jmz"), pegged.peg.caseInsensitiveLiteral!("jmn"), pegged.peg.caseInsensitiveLiteral!("djn"), pegged.peg.caseInsensitiveLiteral!("cmp"), pegged.peg.caseInsensitiveLiteral!("slt"), pegged.peg.caseInsensitiveLiteral!("spl"), pegged.peg.caseInsensitiveLiteral!("sne"), pegged.peg.caseInsensitiveLiteral!("seq"), pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof"))), "assemblyFile.opcode"), "opcode")(p);
  373. memo[tuple(`opcode`, p.end)] = result;
  374. return result;
  375. }
  376. }
  377. }
  378. }
  379. static TParseTree opcode(string s)
  380. {
  381. if(__ctfe)
  382. {
  383. return pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("dat"), pegged.peg.caseInsensitiveLiteral!("mov"), pegged.peg.caseInsensitiveLiteral!("add"), pegged.peg.caseInsensitiveLiteral!("sub"), pegged.peg.caseInsensitiveLiteral!("mul"), pegged.peg.caseInsensitiveLiteral!("div"), pegged.peg.caseInsensitiveLiteral!("mod"), pegged.peg.caseInsensitiveLiteral!("jmp"), pegged.peg.caseInsensitiveLiteral!("jmz"), pegged.peg.caseInsensitiveLiteral!("jmn"), pegged.peg.caseInsensitiveLiteral!("djn"), pegged.peg.caseInsensitiveLiteral!("cmp"), pegged.peg.caseInsensitiveLiteral!("slt"), pegged.peg.caseInsensitiveLiteral!("spl"), pegged.peg.caseInsensitiveLiteral!("sne"), pegged.peg.caseInsensitiveLiteral!("seq"), pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof"))), "assemblyFile.opcode")(TParseTree("", false,[], s));
  384. }
  385. else
  386. {
  387. memo = null;
  388. return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("dat"), pegged.peg.caseInsensitiveLiteral!("mov"), pegged.peg.caseInsensitiveLiteral!("add"), pegged.peg.caseInsensitiveLiteral!("sub"), pegged.peg.caseInsensitiveLiteral!("mul"), pegged.peg.caseInsensitiveLiteral!("div"), pegged.peg.caseInsensitiveLiteral!("mod"), pegged.peg.caseInsensitiveLiteral!("jmp"), pegged.peg.caseInsensitiveLiteral!("jmz"), pegged.peg.caseInsensitiveLiteral!("jmn"), pegged.peg.caseInsensitiveLiteral!("djn"), pegged.peg.caseInsensitiveLiteral!("cmp"), pegged.peg.caseInsensitiveLiteral!("slt"), pegged.peg.caseInsensitiveLiteral!("spl"), pegged.peg.caseInsensitiveLiteral!("sne"), pegged.peg.caseInsensitiveLiteral!("seq"), pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof"))), "assemblyFile.opcode"), "opcode")(TParseTree("", false,[], s));
  389. }
  390. }
  391. static string opcode(GetName g)
  392. {
  393. return "assemblyFile.opcode";
  394. }
  395. static TParseTree pseudo_opcode(TParseTree p)
  396. {
  397. if(__ctfe)
  398. {
  399. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof")), "assemblyFile.pseudo_opcode")(p);
  400. }
  401. else
  402. {
  403. if (blockMemo)
  404. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof")), "assemblyFile.pseudo_opcode"), "pseudo_opcode")(p);
  405. else
  406. {
  407. if (auto m = tuple(`pseudo_opcode`, p.end) in memo)
  408. return *m;
  409. else
  410. {
  411. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof")), "assemblyFile.pseudo_opcode"), "pseudo_opcode")(p);
  412. memo[tuple(`pseudo_opcode`, p.end)] = result;
  413. return result;
  414. }
  415. }
  416. }
  417. }
  418. static TParseTree pseudo_opcode(string s)
  419. {
  420. if(__ctfe)
  421. {
  422. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof")), "assemblyFile.pseudo_opcode")(TParseTree("", false,[], s));
  423. }
  424. else
  425. {
  426. memo = null;
  427. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("org"), pegged.peg.caseInsensitiveLiteral!("equ"), pegged.peg.caseInsensitiveLiteral!("end"), pegged.peg.caseInsensitiveLiteral!("for"), pegged.peg.caseInsensitiveLiteral!("rof")), "assemblyFile.pseudo_opcode"), "pseudo_opcode")(TParseTree("", false,[], s));
  428. }
  429. }
  430. static string pseudo_opcode(GetName g)
  431. {
  432. return "assemblyFile.pseudo_opcode";
  433. }
  434. static TParseTree modifier(TParseTree p)
  435. {
  436. if(__ctfe)
  437. {
  438. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("ab"), pegged.peg.caseInsensitiveLiteral!("ba"), pegged.peg.caseInsensitiveLiteral!("a"), pegged.peg.caseInsensitiveLiteral!("b"), pegged.peg.caseInsensitiveLiteral!("f"), pegged.peg.caseInsensitiveLiteral!("x"), pegged.peg.caseInsensitiveLiteral!("i"), eps), "assemblyFile.modifier")(p);
  439. }
  440. else
  441. {
  442. if (blockMemo)
  443. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("ab"), pegged.peg.caseInsensitiveLiteral!("ba"), pegged.peg.caseInsensitiveLiteral!("a"), pegged.peg.caseInsensitiveLiteral!("b"), pegged.peg.caseInsensitiveLiteral!("f"), pegged.peg.caseInsensitiveLiteral!("x"), pegged.peg.caseInsensitiveLiteral!("i"), eps), "assemblyFile.modifier"), "modifier")(p);
  444. else
  445. {
  446. if (auto m = tuple(`modifier`, p.end) in memo)
  447. return *m;
  448. else
  449. {
  450. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("ab"), pegged.peg.caseInsensitiveLiteral!("ba"), pegged.peg.caseInsensitiveLiteral!("a"), pegged.peg.caseInsensitiveLiteral!("b"), pegged.peg.caseInsensitiveLiteral!("f"), pegged.peg.caseInsensitiveLiteral!("x"), pegged.peg.caseInsensitiveLiteral!("i"), eps), "assemblyFile.modifier"), "modifier")(p);
  451. memo[tuple(`modifier`, p.end)] = result;
  452. return result;
  453. }
  454. }
  455. }
  456. }
  457. static TParseTree modifier(string s)
  458. {
  459. if(__ctfe)
  460. {
  461. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("ab"), pegged.peg.caseInsensitiveLiteral!("ba"), pegged.peg.caseInsensitiveLiteral!("a"), pegged.peg.caseInsensitiveLiteral!("b"), pegged.peg.caseInsensitiveLiteral!("f"), pegged.peg.caseInsensitiveLiteral!("x"), pegged.peg.caseInsensitiveLiteral!("i"), eps), "assemblyFile.modifier")(TParseTree("", false,[], s));
  462. }
  463. else
  464. {
  465. memo = null;
  466. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.caseInsensitiveLiteral!("ab"), pegged.peg.caseInsensitiveLiteral!("ba"), pegged.peg.caseInsensitiveLiteral!("a"), pegged.peg.caseInsensitiveLiteral!("b"), pegged.peg.caseInsensitiveLiteral!("f"), pegged.peg.caseInsensitiveLiteral!("x"), pegged.peg.caseInsensitiveLiteral!("i"), eps), "assemblyFile.modifier"), "modifier")(TParseTree("", false,[], s));
  467. }
  468. }
  469. static string modifier(GetName g)
  470. {
  471. return "assemblyFile.modifier";
  472. }
  473. static TParseTree mode(TParseTree p)
  474. {
  475. if(__ctfe)
  476. {
  477. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("#"), pegged.peg.literal!("$"), pegged.peg.literal!("@"), pegged.peg.literal!("<"), pegged.peg.literal!(">"), pegged.peg.literal!("{"), pegged.peg.literal!("}"), pegged.peg.literal!("*"), eps), "assemblyFile.mode")(p);
  478. }
  479. else
  480. {
  481. if (blockMemo)
  482. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("#"), pegged.peg.literal!("$"), pegged.peg.literal!("@"), pegged.peg.literal!("<"), pegged.peg.literal!(">"), pegged.peg.literal!("{"), pegged.peg.literal!("}"), pegged.peg.literal!("*"), eps), "assemblyFile.mode"), "mode")(p);
  483. else
  484. {
  485. if (auto m = tuple(`mode`, p.end) in memo)
  486. return *m;
  487. else
  488. {
  489. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("#"), pegged.peg.literal!("$"), pegged.peg.literal!("@"), pegged.peg.literal!("<"), pegged.peg.literal!(">"), pegged.peg.literal!("{"), pegged.peg.literal!("}"), pegged.peg.literal!("*"), eps), "assemblyFile.mode"), "mode")(p);
  490. memo[tuple(`mode`, p.end)] = result;
  491. return result;
  492. }
  493. }
  494. }
  495. }
  496. static TParseTree mode(string s)
  497. {
  498. if(__ctfe)
  499. {
  500. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("#"), pegged.peg.literal!("$"), pegged.peg.literal!("@"), pegged.peg.literal!("<"), pegged.peg.literal!(">"), pegged.peg.literal!("{"), pegged.peg.literal!("}"), pegged.peg.literal!("*"), eps), "assemblyFile.mode")(TParseTree("", false,[], s));
  501. }
  502. else
  503. {
  504. memo = null;
  505. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("#"), pegged.peg.literal!("$"), pegged.peg.literal!("@"), pegged.peg.literal!("<"), pegged.peg.literal!(">"), pegged.peg.literal!("{"), pegged.peg.literal!("}"), pegged.peg.literal!("*"), eps), "assemblyFile.mode"), "mode")(TParseTree("", false,[], s));
  506. }
  507. }
  508. static string mode(GetName g)
  509. {
  510. return "assemblyFile.mode";
  511. }
  512. static TParseTree expr(TParseTree p)
  513. {
  514. if(__ctfe)
  515. {
  516. assert(false, "expr is left-recursive, which is not supported at compile-time. Consider using asModule()."); return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("+")), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("("), pegged.peg.discard!(pegged.peg.option!(WS)), expr, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(")"), pegged.peg.discard!(pegged.peg.option!(WS)), tail), pegged.peg.and!(term, pegged.peg.discard!(pegged.peg.option!(WS)), tail)), "assemblyFile.expr")(p);
  517. }
  518. else
  519. {
  520. static TParseTree[size_t /*position*/] seed;
  521. if (auto s = p.end in seed)
  522. return *s;
  523. auto current = fail(p);
  524. seed[p.end] = current;
  525. blockMemo = true;
  526. while (true)
  527. {
  528. auto result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("+")), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("("), pegged.peg.discard!(pegged.peg.option!(WS)), expr, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(")"), pegged.peg.discard!(pegged.peg.option!(WS)), tail), pegged.peg.and!(term, pegged.peg.discard!(pegged.peg.option!(WS)), tail)), "assemblyFile.expr"), "expr")(p);
  529. if (result.end > current.end)
  530. {
  531. current = result;
  532. seed[p.end] = current;
  533. } else {
  534. seed.remove(p.end);
  535. blockMemo = false;
  536. return current;
  537. }
  538. }
  539. }
  540. }
  541. static TParseTree expr(string s)
  542. {
  543. if(__ctfe)
  544. {
  545. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("+")), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("("), pegged.peg.discard!(pegged.peg.option!(WS)), expr, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(")"), pegged.peg.discard!(pegged.peg.option!(WS)), tail), pegged.peg.and!(term, pegged.peg.discard!(pegged.peg.option!(WS)), tail)), "assemblyFile.expr")(TParseTree("", false,[], s));
  546. }
  547. else
  548. {
  549. memo = null;
  550. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("+")), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("("), pegged.peg.discard!(pegged.peg.option!(WS)), expr, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(")"), pegged.peg.discard!(pegged.peg.option!(WS)), tail), pegged.peg.and!(term, pegged.peg.discard!(pegged.peg.option!(WS)), tail)), "assemblyFile.expr"), "expr")(TParseTree("", false,[], s));
  551. }
  552. }
  553. static string expr(GetName g)
  554. {
  555. return "assemblyFile.expr";
  556. }
  557. static TParseTree tail(TParseTree p)
  558. {
  559. if(__ctfe)
  560. {
  561. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("%"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("/"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("*"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("-"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("+"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("&"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), eps), "assemblyFile.tail")(p);
  562. }
  563. else
  564. {
  565. if (blockMemo)
  566. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("%"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("/"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("*"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("-"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("+"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("&"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), eps), "assemblyFile.tail"), "tail")(p);
  567. else
  568. {
  569. if (auto m = tuple(`tail`, p.end) in memo)
  570. return *m;
  571. else
  572. {
  573. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("%"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("/"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("*"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("-"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("+"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("&"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), eps), "assemblyFile.tail"), "tail")(p);
  574. memo[tuple(`tail`, p.end)] = result;
  575. return result;
  576. }
  577. }
  578. }
  579. }
  580. static TParseTree tail(string s)
  581. {
  582. if(__ctfe)
  583. {
  584. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("%"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("/"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("*"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("-"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("+"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("&"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), eps), "assemblyFile.tail")(TParseTree("", false,[], s));
  585. }
  586. else
  587. {
  588. memo = null;
  589. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(pegged.peg.literal!("%"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("/"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("*"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("-"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("+"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), pegged.peg.and!(pegged.peg.literal!("&"), pegged.peg.discard!(pegged.peg.option!(WS)), expr), eps), "assemblyFile.tail"), "tail")(TParseTree("", false,[], s));
  590. }
  591. }
  592. static string tail(GetName g)
  593. {
  594. return "assemblyFile.tail";
  595. }
  596. static TParseTree term(TParseTree p)
  597. {
  598. if(__ctfe)
  599. {
  600. assert(false, "term is left-recursive, which is not supported at compile-time. Consider using asModule()."); return pegged.peg.defined!(pegged.peg.or!(label, number, expr), "assemblyFile.term")(p);
  601. }
  602. else
  603. {
  604. static TParseTree[size_t /*position*/] seed;
  605. if (auto s = p.end in seed)
  606. return *s;
  607. auto current = fail(p);
  608. seed[p.end] = current;
  609. blockMemo = true;
  610. while (true)
  611. {
  612. auto result = hooked!(pegged.peg.defined!(pegged.peg.or!(label, number, expr), "assemblyFile.term"), "term")(p);
  613. if (result.end > current.end)
  614. {
  615. current = result;
  616. seed[p.end] = current;
  617. } else {
  618. seed.remove(p.end);
  619. blockMemo = false;
  620. return current;
  621. }
  622. }
  623. }
  624. }
  625. static TParseTree term(string s)
  626. {
  627. if(__ctfe)
  628. {
  629. return pegged.peg.defined!(pegged.peg.or!(label, number, expr), "assemblyFile.term")(TParseTree("", false,[], s));
  630. }
  631. else
  632. {
  633. memo = null;
  634. return hooked!(pegged.peg.defined!(pegged.peg.or!(label, number, expr), "assemblyFile.term"), "term")(TParseTree("", false,[], s));
  635. }
  636. }
  637. static string term(GetName g)
  638. {
  639. return "assemblyFile.term";
  640. }
  641. static TParseTree assign(TParseTree p)
  642. {
  643. if(__ctfe)
  644. {
  645. return pegged.peg.defined!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!("="), pegged.peg.discard!(pegged.peg.option!(WS)), expr), "assemblyFile.assign")(p);
  646. }
  647. else
  648. {
  649. if (blockMemo)
  650. return hooked!(pegged.peg.defined!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!("="), pegged.peg.discard!(pegged.peg.option!(WS)), expr), "assemblyFile.assign"), "assign")(p);
  651. else
  652. {
  653. if (auto m = tuple(`assign`, p.end) in memo)
  654. return *m;
  655. else
  656. {
  657. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!("="), pegged.peg.discard!(pegged.peg.option!(WS)), expr), "assemblyFile.assign"), "assign")(p);
  658. memo[tuple(`assign`, p.end)] = result;
  659. return result;
  660. }
  661. }
  662. }
  663. }
  664. static TParseTree assign(string s)
  665. {
  666. if(__ctfe)
  667. {
  668. return pegged.peg.defined!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!("="), pegged.peg.discard!(pegged.peg.option!(WS)), expr), "assemblyFile.assign")(TParseTree("", false,[], s));
  669. }
  670. else
  671. {
  672. memo = null;
  673. return hooked!(pegged.peg.defined!(pegged.peg.and!(label, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!("="), pegged.peg.discard!(pegged.peg.option!(WS)), expr), "assemblyFile.assign"), "assign")(TParseTree("", false,[], s));
  674. }
  675. }
  676. static string assign(GetName g)
  677. {
  678. return "assemblyFile.assign";
  679. }
  680. static TParseTree number(TParseTree p)
  681. {
  682. if(__ctfe)
  683. {
  684. return pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))), "assemblyFile.number")(p);
  685. }
  686. else
  687. {
  688. if (blockMemo)
  689. return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))), "assemblyFile.number"), "number")(p);
  690. else
  691. {
  692. if (auto m = tuple(`number`, p.end) in memo)
  693. return *m;
  694. else
  695. {
  696. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))), "assemblyFile.number"), "number")(p);
  697. memo[tuple(`number`, p.end)] = result;
  698. return result;
  699. }
  700. }
  701. }
  702. }
  703. static TParseTree number(string s)
  704. {
  705. if(__ctfe)
  706. {
  707. return pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))), "assemblyFile.number")(TParseTree("", false,[], s));
  708. }
  709. else
  710. {
  711. memo = null;
  712. return hooked!(pegged.peg.defined!(pegged.peg.fuse!(pegged.peg.oneOrMore!(pegged.peg.charRange!('0', '9'))), "assemblyFile.number"), "number")(TParseTree("", false,[], s));
  713. }
  714. }
  715. static string number(GetName g)
  716. {
  717. return "assemblyFile.number";
  718. }
  719. static TParseTree WS(TParseTree p)
  720. {
  721. if(__ctfe)
  722. {
  723. return pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"))), "assemblyFile.WS")(p);
  724. }
  725. else
  726. {
  727. if (blockMemo)
  728. return hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"))), "assemblyFile.WS"), "WS")(p);
  729. else
  730. {
  731. if (auto m = tuple(`WS`, p.end) in memo)
  732. return *m;
  733. else
  734. {
  735. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"))), "assemblyFile.WS"), "WS")(p);
  736. memo[tuple(`WS`, p.end)] = result;
  737. return result;
  738. }
  739. }
  740. }
  741. }
  742. static TParseTree WS(string s)
  743. {
  744. if(__ctfe)
  745. {
  746. return pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"))), "assemblyFile.WS")(TParseTree("", false,[], s));
  747. }
  748. else
  749. {
  750. memo = null;
  751. return hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t"))), "assemblyFile.WS"), "WS")(TParseTree("", false,[], s));
  752. }
  753. }
  754. static string WS(GetName g)
  755. {
  756. return "assemblyFile.WS";
  757. }
  758. static TParseTree EOL(TParseTree p)
  759. {
  760. if(__ctfe)
  761. {
  762. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.discard!(pegged.peg.literal!("\n")), EOF), "assemblyFile.EOL")(p);
  763. }
  764. else
  765. {
  766. if (blockMemo)
  767. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.discard!(pegged.peg.literal!("\n")), EOF), "assemblyFile.EOL"), "EOL")(p);
  768. else
  769. {
  770. if (auto m = tuple(`EOL`, p.end) in memo)
  771. return *m;
  772. else
  773. {
  774. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.discard!(pegged.peg.literal!("\n")), EOF), "assemblyFile.EOL"), "EOL")(p);
  775. memo[tuple(`EOL`, p.end)] = result;
  776. return result;
  777. }
  778. }
  779. }
  780. }
  781. static TParseTree EOL(string s)
  782. {
  783. if(__ctfe)
  784. {
  785. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.discard!(pegged.peg.literal!("\n")), EOF), "assemblyFile.EOL")(TParseTree("", false,[], s));
  786. }
  787. else
  788. {
  789. memo = null;
  790. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.discard!(pegged.peg.literal!("\n")), EOF), "assemblyFile.EOL"), "EOL")(TParseTree("", false,[], s));
  791. }
  792. }
  793. static string EOL(GetName g)
  794. {
  795. return "assemblyFile.EOL";
  796. }
  797. static TParseTree EOF(TParseTree p)
  798. {
  799. if(__ctfe)
  800. {
  801. return pegged.peg.defined!(pegged.peg.negLookahead!(pegged.peg.any), "assemblyFile.EOF")(p);
  802. }
  803. else
  804. {
  805. if (blockMemo)
  806. return hooked!(pegged.peg.defined!(pegged.peg.negLookahead!(pegged.peg.any), "assemblyFile.EOF"), "EOF")(p);
  807. else
  808. {
  809. if (auto m = tuple(`EOF`, p.end) in memo)
  810. return *m;
  811. else
  812. {
  813. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.negLookahead!(pegged.peg.any), "assemblyFile.EOF"), "EOF")(p);
  814. memo[tuple(`EOF`, p.end)] = result;
  815. return result;
  816. }
  817. }
  818. }
  819. }
  820. static TParseTree EOF(string s)
  821. {
  822. if(__ctfe)
  823. {
  824. return pegged.peg.defined!(pegged.peg.negLookahead!(pegged.peg.any), "assemblyFile.EOF")(TParseTree("", false,[], s));
  825. }
  826. else
  827. {
  828. memo = null;
  829. return hooked!(pegged.peg.defined!(pegged.peg.negLookahead!(pegged.peg.any), "assemblyFile.EOF"), "EOF")(TParseTree("", false,[], s));
  830. }
  831. }
  832. static string EOF(GetName g)
  833. {
  834. return "assemblyFile.EOF";
  835. }
  836. static TParseTree BOUND(TParseTree p)
  837. {
  838. if(__ctfe)
  839. {
  840. return pegged.peg.defined!(pegged.peg.or!(WS, EOL, EOF), "assemblyFile.BOUND")(p);
  841. }
  842. else
  843. {
  844. if (blockMemo)
  845. return hooked!(pegged.peg.defined!(pegged.peg.or!(WS, EOL, EOF), "assemblyFile.BOUND"), "BOUND")(p);
  846. else
  847. {
  848. if (auto m = tuple(`BOUND`, p.end) in memo)
  849. return *m;
  850. else
  851. {
  852. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(WS, EOL, EOF), "assemblyFile.BOUND"), "BOUND")(p);
  853. memo[tuple(`BOUND`, p.end)] = result;
  854. return result;
  855. }
  856. }
  857. }
  858. }
  859. static TParseTree BOUND(string s)
  860. {
  861. if(__ctfe)
  862. {
  863. return pegged.peg.defined!(pegged.peg.or!(WS, EOL, EOF), "assemblyFile.BOUND")(TParseTree("", false,[], s));
  864. }
  865. else
  866. {
  867. memo = null;
  868. return hooked!(pegged.peg.defined!(pegged.peg.or!(WS, EOL, EOF), "assemblyFile.BOUND"), "BOUND")(TParseTree("", false,[], s));
  869. }
  870. }
  871. static string BOUND(GetName g)
  872. {
  873. return "assemblyFile.BOUND";
  874. }
  875. static TParseTree instruction(TParseTree p)
  876. {
  877. if(__ctfe)
  878. {
  879. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(","), pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(expr, assign), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), pseudo_opcode, pegged.peg.discard!(pegged.peg.option!(WS)), comment)), "assemblyFile.instruction")(p);
  880. }
  881. else
  882. {
  883. if (blockMemo)
  884. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(","), pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(expr, assign), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), pseudo_opcode, pegged.peg.discard!(pegged.peg.option!(WS)), comment)), "assemblyFile.instruction"), "instruction")(p);
  885. else
  886. {
  887. if (auto m = tuple(`instruction`, p.end) in memo)
  888. return *m;
  889. else
  890. {
  891. TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(","), pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(expr, assign), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), pseudo_opcode, pegged.peg.discard!(pegged.peg.option!(WS)), comment)), "assemblyFile.instruction"), "instruction")(p);
  892. memo[tuple(`instruction`, p.end)] = result;
  893. return result;
  894. }
  895. }
  896. }
  897. }
  898. static TParseTree instruction(string s)
  899. {
  900. if(__ctfe)
  901. {
  902. return pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(","), pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(expr, assign), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), pseudo_opcode, pegged.peg.discard!(pegged.peg.option!(WS)), comment)), "assemblyFile.instruction")(TParseTree("", false,[], s));
  903. }
  904. else
  905. {
  906. memo = null;
  907. return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.literal!(","), pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(expr, assign), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), operation, pegged.peg.discard!(pegged.peg.option!(WS)), mode, pegged.peg.discard!(pegged.peg.option!(WS)), pegged.peg.or!(assign, expr), pegged.peg.discard!(pegged.peg.option!(WS)), comment), pegged.peg.and!(label_list, pegged.peg.discard!(pegged.peg.option!(WS)), pseudo_opcode, pegged.peg.discard!(pegged.peg.option!(WS)), comment)), "assemblyFile.instruction"), "instruction")(TParseTree("", false,[], s));
  908. }
  909. }
  910. static string instruction(GetName g)
  911. {
  912. return "assemblyFile.instruction";
  913. }
  914. static TParseTree opCall(TParseTree p)
  915. {
  916. TParseTree result = decimateTree(list(p));
  917. result.children = [result];
  918. result.name = "assemblyFile";
  919. return result;
  920. }
  921. static TParseTree opCall(string input)
  922. {
  923. if(__ctfe)
  924. {
  925. return assemblyFile(TParseTree(``, false, [], input, 0, 0));
  926. }
  927. else
  928. {
  929. memo = null;
  930. return assemblyFile(TParseTree(``, false, [], input, 0, 0));
  931. }
  932. }
  933. static string opCall(GetName g)
  934. {
  935. return "assemblyFile";
  936. }
  937. }
  938. }
  939. alias GenericassemblyFile!(ParseTree).assemblyFile assemblyFile;
  940.