proctab.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. #include <stdio.h>
  10. #include "awk.h"
  11. #include "y.tab.h"
  12. static char *printname[92] = {
  13. (char *) "FIRSTTOKEN", /* 57346 */
  14. (char *) "PROGRAM", /* 57347 */
  15. (char *) "PASTAT", /* 57348 */
  16. (char *) "PASTAT2", /* 57349 */
  17. (char *) "XBEGIN", /* 57350 */
  18. (char *) "XEND", /* 57351 */
  19. (char *) "NL", /* 57352 */
  20. (char *) "ARRAY", /* 57353 */
  21. (char *) "MATCH", /* 57354 */
  22. (char *) "NOTMATCH", /* 57355 */
  23. (char *) "MATCHOP", /* 57356 */
  24. (char *) "FINAL", /* 57357 */
  25. (char *) "DOT", /* 57358 */
  26. (char *) "ALL", /* 57359 */
  27. (char *) "CCL", /* 57360 */
  28. (char *) "NCCL", /* 57361 */
  29. (char *) "CHAR", /* 57362 */
  30. (char *) "OR", /* 57363 */
  31. (char *) "STAR", /* 57364 */
  32. (char *) "QUEST", /* 57365 */
  33. (char *) "PLUS", /* 57366 */
  34. (char *) "AND", /* 57367 */
  35. (char *) "BOR", /* 57368 */
  36. (char *) "APPEND", /* 57369 */
  37. (char *) "EQ", /* 57370 */
  38. (char *) "GE", /* 57371 */
  39. (char *) "GT", /* 57372 */
  40. (char *) "LE", /* 57373 */
  41. (char *) "LT", /* 57374 */
  42. (char *) "NE", /* 57375 */
  43. (char *) "IN", /* 57376 */
  44. (char *) "ARG", /* 57377 */
  45. (char *) "BLTIN", /* 57378 */
  46. (char *) "BREAK", /* 57379 */
  47. (char *) "CLOSE", /* 57380 */
  48. (char *) "CONTINUE", /* 57381 */
  49. (char *) "DELETE", /* 57382 */
  50. (char *) "DO", /* 57383 */
  51. (char *) "EXIT", /* 57384 */
  52. (char *) "FOR", /* 57385 */
  53. (char *) "FUNC", /* 57386 */
  54. (char *) "SUB", /* 57387 */
  55. (char *) "GSUB", /* 57388 */
  56. (char *) "IF", /* 57389 */
  57. (char *) "INDEX", /* 57390 */
  58. (char *) "LSUBSTR", /* 57391 */
  59. (char *) "MATCHFCN", /* 57392 */
  60. (char *) "NEXT", /* 57393 */
  61. (char *) "NEXTFILE", /* 57394 */
  62. (char *) "ADD", /* 57395 */
  63. (char *) "MINUS", /* 57396 */
  64. (char *) "MULT", /* 57397 */
  65. (char *) "DIVIDE", /* 57398 */
  66. (char *) "MOD", /* 57399 */
  67. (char *) "ASSIGN", /* 57400 */
  68. (char *) "ASGNOP", /* 57401 */
  69. (char *) "ADDEQ", /* 57402 */
  70. (char *) "SUBEQ", /* 57403 */
  71. (char *) "MULTEQ", /* 57404 */
  72. (char *) "DIVEQ", /* 57405 */
  73. (char *) "MODEQ", /* 57406 */
  74. (char *) "POWEQ", /* 57407 */
  75. (char *) "PRINT", /* 57408 */
  76. (char *) "PRINTF", /* 57409 */
  77. (char *) "SPRINTF", /* 57410 */
  78. (char *) "ELSE", /* 57411 */
  79. (char *) "INTEST", /* 57412 */
  80. (char *) "CONDEXPR", /* 57413 */
  81. (char *) "POSTINCR", /* 57414 */
  82. (char *) "PREINCR", /* 57415 */
  83. (char *) "POSTDECR", /* 57416 */
  84. (char *) "PREDECR", /* 57417 */
  85. (char *) "VAR", /* 57418 */
  86. (char *) "IVAR", /* 57419 */
  87. (char *) "VARNF", /* 57420 */
  88. (char *) "CALL", /* 57421 */
  89. (char *) "NUMBER", /* 57422 */
  90. (char *) "STRING", /* 57423 */
  91. (char *) "REGEXPR", /* 57424 */
  92. (char *) "GETLINE", /* 57425 */
  93. (char *) "RETURN", /* 57426 */
  94. (char *) "SPLIT", /* 57427 */
  95. (char *) "SUBSTR", /* 57428 */
  96. (char *) "WHILE", /* 57429 */
  97. (char *) "CAT", /* 57430 */
  98. (char *) "NOT", /* 57431 */
  99. (char *) "UMINUS", /* 57432 */
  100. (char *) "POWER", /* 57433 */
  101. (char *) "DECR", /* 57434 */
  102. (char *) "INCR", /* 57435 */
  103. (char *) "INDIRECT", /* 57436 */
  104. (char *) "LASTTOKEN", /* 57437 */
  105. };
  106. Cell *(*proctab[92])(Node **, int) = {
  107. nullproc, /* FIRSTTOKEN */
  108. program, /* PROGRAM */
  109. pastat, /* PASTAT */
  110. dopa2, /* PASTAT2 */
  111. nullproc, /* XBEGIN */
  112. nullproc, /* XEND */
  113. nullproc, /* NL */
  114. array, /* ARRAY */
  115. matchop, /* MATCH */
  116. matchop, /* NOTMATCH */
  117. nullproc, /* MATCHOP */
  118. nullproc, /* FINAL */
  119. nullproc, /* DOT */
  120. nullproc, /* ALL */
  121. nullproc, /* CCL */
  122. nullproc, /* NCCL */
  123. nullproc, /* CHAR */
  124. nullproc, /* OR */
  125. nullproc, /* STAR */
  126. nullproc, /* QUEST */
  127. nullproc, /* PLUS */
  128. boolop, /* AND */
  129. boolop, /* BOR */
  130. nullproc, /* APPEND */
  131. relop, /* EQ */
  132. relop, /* GE */
  133. relop, /* GT */
  134. relop, /* LE */
  135. relop, /* LT */
  136. relop, /* NE */
  137. instat, /* IN */
  138. arg, /* ARG */
  139. bltin, /* BLTIN */
  140. jump, /* BREAK */
  141. closefile, /* CLOSE */
  142. jump, /* CONTINUE */
  143. awkdelete, /* DELETE */
  144. dostat, /* DO */
  145. jump, /* EXIT */
  146. forstat, /* FOR */
  147. nullproc, /* FUNC */
  148. sub, /* SUB */
  149. gsub, /* GSUB */
  150. ifstat, /* IF */
  151. sindex, /* INDEX */
  152. nullproc, /* LSUBSTR */
  153. matchop, /* MATCHFCN */
  154. jump, /* NEXT */
  155. jump, /* NEXTFILE */
  156. arith, /* ADD */
  157. arith, /* MINUS */
  158. arith, /* MULT */
  159. arith, /* DIVIDE */
  160. arith, /* MOD */
  161. assign, /* ASSIGN */
  162. nullproc, /* ASGNOP */
  163. assign, /* ADDEQ */
  164. assign, /* SUBEQ */
  165. assign, /* MULTEQ */
  166. assign, /* DIVEQ */
  167. assign, /* MODEQ */
  168. assign, /* POWEQ */
  169. printstat, /* PRINT */
  170. awkprintf, /* PRINTF */
  171. awksprintf, /* SPRINTF */
  172. nullproc, /* ELSE */
  173. intest, /* INTEST */
  174. condexpr, /* CONDEXPR */
  175. incrdecr, /* POSTINCR */
  176. incrdecr, /* PREINCR */
  177. incrdecr, /* POSTDECR */
  178. incrdecr, /* PREDECR */
  179. nullproc, /* VAR */
  180. nullproc, /* IVAR */
  181. getnf, /* VARNF */
  182. call, /* CALL */
  183. nullproc, /* NUMBER */
  184. nullproc, /* STRING */
  185. nullproc, /* REGEXPR */
  186. getline, /* GETLINE */
  187. jump, /* RETURN */
  188. split, /* SPLIT */
  189. substr, /* SUBSTR */
  190. whilestat, /* WHILE */
  191. cat, /* CAT */
  192. boolop, /* NOT */
  193. arith, /* UMINUS */
  194. arith, /* POWER */
  195. nullproc, /* DECR */
  196. nullproc, /* INCR */
  197. indirect, /* INDIRECT */
  198. nullproc, /* LASTTOKEN */
  199. };
  200. char *tokname(int n)
  201. {
  202. static char buf[100];
  203. if (n < FIRSTTOKEN || n > LASTTOKEN) {
  204. sprintf(buf, "token %d", n);
  205. return buf;
  206. }
  207. return printname[n-FIRSTTOKEN];
  208. }