/ Hex Artifact Content
Login

Artifact 7181c041d495e3f26acc36d15c86923ed722285f9015f017f41a3efdb9a0dab4:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 54 68 69 73 20 73 63 72 69 70 74  .#.# This script
0020: 20 61 70 70 65 6e 64 73 20 61 64 64 69 74 69 6f   appends additio
0030: 6e 61 6c 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  nal token codes 
0040: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
0050: 65 0a 23 20 70 61 72 73 65 2e 68 20 66 69 6c 65  e.# parse.h file
0060: 20 74 68 61 74 20 6c 65 6d 6f 6e 20 67 65 6e 65   that lemon gene
0070: 72 61 74 65 73 2e 20 20 54 68 65 73 65 20 65 78  rates.  These ex
0080: 74 72 61 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  tra token codes 
0090: 61 72 65 0a 23 20 6e 6f 74 20 75 73 65 64 20 62  are.# not used b
00a0: 79 20 74 68 65 20 70 61 72 73 65 72 2e 20 20 42  y the parser.  B
00b0: 75 74 20 74 68 65 79 20 61 72 65 20 75 73 65 64  ut they are used
00c0: 20 62 79 20 74 68 65 20 74 6f 6b 65 6e 69 7a 65   by the tokenize
00d0: 72 20 61 6e 64 2f 6f 72 0a 23 20 74 68 65 20 63  r and/or.# the c
00e0: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 23  ode generator..#
00f0: 0a 23 0a 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20  .#.set in [open 
0100: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30 5d  [lindex $argv 0]
0110: 20 72 62 5d 0a 73 65 74 20 6d 61 78 20 30 0a 77   rb].set max 0.w
0120: 68 69 6c 65 20 7b 21 5b 65 6f 66 20 24 69 6e 5d  hile {![eof $in]
0130: 7d 20 7b 0a 20 20 73 65 74 20 6c 69 6e 65 20 5b  } {.  set line [
0140: 67 65 74 73 20 24 69 6e 5d 0a 20 20 69 66 20 7b  gets $in].  if {
0150: 5b 72 65 67 65 78 70 20 7b 5e 23 64 65 66 69 6e  [regexp {^#defin
0160: 65 20 54 4b 5f 7d 20 24 6c 69 6e 65 5d 7d 20 7b  e TK_} $line]} {
0170: 0a 20 20 20 20 70 75 74 73 20 24 6c 69 6e 65 0a  .    puts $line.
0180: 20 20 20 20 73 65 74 20 78 20 5b 6c 69 6e 64 65      set x [linde
0190: 78 20 24 6c 69 6e 65 20 32 5d 0a 20 20 20 20 69  x $line 2].    i
01a0: 66 20 7b 24 78 3e 24 6d 61 78 7d 20 7b 73 65 74  f {$x>$max} {set
01b0: 20 6d 61 78 20 24 78 7d 0a 20 20 7d 0a 7d 0a 63   max $x}.  }.}.c
01c0: 6c 6f 73 65 20 24 69 6e 0a 0a 23 20 54 68 65 20  lose $in..# The 
01d0: 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
01e0: 65 20 65 78 74 72 61 20 74 6f 6b 65 6e 20 63 6f  e extra token co
01f0: 64 65 73 20 74 6f 20 62 65 20 61 64 64 65 64 2e  des to be added.
0200: 20 20 53 50 41 43 45 20 61 6e 64 20 0a 23 20 49    SPACE and .# I
0210: 4c 4c 45 47 41 4c 20 2a 6d 75 73 74 2a 20 62 65  LLEGAL *must* be
0220: 20 74 68 65 20 6c 61 73 74 20 74 77 6f 20 74 6f   the last two to
0230: 6b 65 6e 20 63 6f 64 65 73 20 61 6e 64 20 74 68  ken codes and th
0240: 65 79 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68  ey must be in th
0250: 61 74 20 6f 72 64 65 72 2e 0a 23 0a 73 65 74 20  at order..#.set 
0260: 65 78 74 72 61 73 20 7b 0a 20 20 49 53 4e 4f 54  extras {.  ISNOT
0270: 0a 20 20 46 55 4e 43 54 49 4f 4e 0a 20 20 43 4f  .  FUNCTION.  CO
0280: 4c 55 4d 4e 0a 20 20 41 47 47 5f 46 55 4e 43 54  LUMN.  AGG_FUNCT
0290: 49 4f 4e 0a 20 20 41 47 47 5f 43 4f 4c 55 4d 4e  ION.  AGG_COLUMN
02a0: 0a 20 20 55 4d 49 4e 55 53 0a 20 20 55 50 4c 55  .  UMINUS.  UPLU
02b0: 53 0a 20 20 52 45 47 49 53 54 45 52 0a 20 20 56  S.  REGISTER.  V
02c0: 45 43 54 4f 52 0a 20 20 53 45 4c 45 43 54 5f 43  ECTOR.  SELECT_C
02d0: 4f 4c 55 4d 4e 0a 20 20 49 46 5f 4e 55 4c 4c 5f  OLUMN.  IF_NULL_
02e0: 52 4f 57 0a 20 20 41 53 54 45 52 49 53 4b 0a 20  ROW.  ASTERISK. 
02f0: 20 53 50 41 4e 0a 20 20 45 4e 44 5f 4f 46 5f 46   SPAN.  END_OF_F
0300: 49 4c 45 0a 20 20 55 4e 43 4c 4f 53 45 44 5f 53  ILE.  UNCLOSED_S
0310: 54 52 49 4e 47 0a 20 20 53 50 41 43 45 0a 20 20  TRING.  SPACE.  
0320: 49 4c 4c 45 47 41 4c 0a 7d 0a 69 66 20 7b 5b 6c  ILLEGAL.}.if {[l
0330: 72 61 6e 67 65 20 24 65 78 74 72 61 73 20 65 6e  range $extras en
0340: 64 2d 31 20 65 6e 64 5d 21 3d 22 53 50 41 43 45  d-1 end]!="SPACE
0350: 20 49 4c 4c 45 47 41 4c 22 7d 20 7b 0a 20 20 65   ILLEGAL"} {.  e
0360: 72 72 6f 72 20 22 53 50 41 43 45 20 61 6e 64 20  rror "SPACE and 
0370: 49 4c 4c 45 47 41 4c 20 6d 75 73 74 20 62 65 20  ILLEGAL must be 
0380: 74 68 65 20 6c 61 73 74 20 74 77 6f 20 74 6f 6b  the last two tok
0390: 65 6e 20 63 6f 64 65 73 20 61 6e 64 20 74 68 65  en codes and the
03a0: 79 5c 0a 20 20 20 20 20 20 20 20 20 6d 75 73 74  y\.         must
03b0: 20 62 65 20 69 6e 20 74 68 61 74 20 6f 72 64 65   be in that orde
03c0: 72 22 0a 7d 0a 66 6f 72 65 61 63 68 20 78 20 24  r".}.foreach x $
03d0: 65 78 74 72 61 73 20 7b 0a 20 20 69 6e 63 72 20  extras {.  incr 
03e0: 6d 61 78 0a 20 20 70 75 74 73 20 5b 66 6f 72 6d  max.  puts [form
03f0: 61 74 20 22 23 64 65 66 69 6e 65 20 54 4b 5f 25  at "#define TK_%
0400: 2d 32 39 73 20 25 34 64 22 20 24 78 20 24 6d 61  -29s %4d" $x $ma
0410: 78 5d 0a 7d 0a 0a 23 20 53 6f 6d 65 20 61 64 64  x].}..# Some add
0420: 69 74 69 6f 6e 61 6c 20 23 64 65 66 69 6e 65 73  itional #defines
0430: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 6f 6b 65   related to toke
0440: 6e 20 63 6f 64 65 73 2e 0a 23 0a 70 75 74 73 20  n codes..#.puts 
0450: 22 5c 6e 2f 2a 20 54 68 65 20 74 6f 6b 65 6e 20  "\n/* The token 
0460: 63 6f 64 65 73 20 61 62 6f 76 65 20 6d 75 73 74  codes above must
0470: 20 61 6c 6c 20 66 69 74 20 69 6e 20 38 20 62 69   all fit in 8 bi
0480: 74 73 20 2a 2f 22 0a 70 75 74 73 20 5b 66 6f 72  ts */".puts [for
0490: 6d 61 74 20 22 23 64 65 66 69 6e 65 20 25 2d 32  mat "#define %-2
04a0: 30 73 20 25 2d 36 73 22 20 54 4b 46 4c 47 5f 4d  0s %-6s" TKFLG_M
04b0: 41 53 4b 20 30 78 66 66 5d 0a 70 75 74 73 20 22  ASK 0xff].puts "
04c0: 5c 6e 2f 2a 20 46 6c 61 67 73 20 74 68 61 74 20  \n/* Flags that 
04d0: 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f 20  can be added to 
04e0: 61 20 74 6f 6b 65 6e 20 63 6f 64 65 20 77 68 65  a token code whe
04f0: 6e 20 69 74 20 69 73 20 6e 6f 74 22 0a 70 75 74  n it is not".put
0500: 73 20 22 2a 2a 20 62 65 69 6e 67 20 73 74 6f 72  s "** being stor
0510: 65 64 20 69 6e 20 61 20 75 38 3a 20 2a 2f 22 0a  ed in a u8: */".
0520: 66 6f 72 65 61 63 68 20 7b 66 67 20 76 61 6c 20  foreach {fg val 
0530: 63 6f 6d 6d 65 6e 74 7d 20 7b 0a 20 20 54 4b 46  comment} {.  TKF
0540: 4c 47 5f 44 4f 4e 54 46 4f 4c 44 20 20 30 78 31  LG_DONTFOLD  0x1
0550: 30 30 20 20 7b 2f 2a 20 4f 6d 69 74 20 63 6f 6e  00  {/* Omit con
0560: 73 74 61 6e 74 20 66 6f 6c 64 69 6e 67 20 6f 70  stant folding op
0570: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 7d 0a  timizations */}.
0580: 7d 20 7b 0a 20 20 70 75 74 73 20 5b 66 6f 72 6d  } {.  puts [form
0590: 61 74 20 22 23 64 65 66 69 6e 65 20 25 2d 32 30  at "#define %-20
05a0: 73 20 25 2d 36 73 20 25 73 22 20 24 66 67 20 24  s %-6s %s" $fg $
05b0: 76 61 6c 20 24 63 6f 6d 6d 65 6e 74 5d 0a 7d 0a  val $comment].}.