/ Hex Artifact Content
Login

Artifact 4ca9c3ef196f08da30add5d07ce0c9458dc8c633:


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 54 4f 5f 54 45  extras {.  TO_TE
0270: 58 54 0a 20 20 54 4f 5f 42 4c 4f 42 0a 20 20 54  XT.  TO_BLOB.  T
0280: 4f 5f 4e 55 4d 45 52 49 43 0a 20 20 54 4f 5f 49  O_NUMERIC.  TO_I
0290: 4e 54 0a 20 20 54 4f 5f 52 45 41 4c 0a 20 20 49  NT.  TO_REAL.  I
02a0: 53 4e 4f 54 0a 20 20 45 4e 44 5f 4f 46 5f 46 49  SNOT.  END_OF_FI
02b0: 4c 45 0a 20 20 55 4e 43 4c 4f 53 45 44 5f 53 54  LE.  UNCLOSED_ST
02c0: 52 49 4e 47 0a 20 20 46 55 4e 43 54 49 4f 4e 0a  RING.  FUNCTION.
02d0: 20 20 43 4f 4c 55 4d 4e 0a 20 20 41 47 47 5f 46    COLUMN.  AGG_F
02e0: 55 4e 43 54 49 4f 4e 0a 20 20 41 47 47 5f 43 4f  UNCTION.  AGG_CO
02f0: 4c 55 4d 4e 0a 20 20 55 4d 49 4e 55 53 0a 20 20  LUMN.  UMINUS.  
0300: 55 50 4c 55 53 0a 20 20 52 45 47 49 53 54 45 52  UPLUS.  REGISTER
0310: 0a 20 20 41 53 54 45 52 49 53 4b 0a 20 20 53 50  .  ASTERISK.  SP
0320: 41 43 45 0a 20 20 49 4c 4c 45 47 41 4c 0a 7d 0a  ACE.  ILLEGAL.}.
0330: 69 66 20 7b 5b 6c 72 61 6e 67 65 20 24 65 78 74  if {[lrange $ext
0340: 72 61 73 20 65 6e 64 2d 31 20 65 6e 64 5d 21 3d  ras end-1 end]!=
0350: 22 53 50 41 43 45 20 49 4c 4c 45 47 41 4c 22 7d  "SPACE ILLEGAL"}
0360: 20 7b 0a 20 20 65 72 72 6f 72 20 22 53 50 41 43   {.  error "SPAC
0370: 45 20 61 6e 64 20 49 4c 4c 45 47 41 4c 20 6d 75  E and ILLEGAL mu
0380: 73 74 20 62 65 20 74 68 65 20 6c 61 73 74 20 74  st be the last t
0390: 77 6f 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  wo token codes a
03a0: 6e 64 20 74 68 65 79 5c 0a 20 20 20 20 20 20 20  nd they\.       
03b0: 20 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68 61    must be in tha
03c0: 74 20 6f 72 64 65 72 22 0a 7d 0a 66 6f 72 65 61  t order".}.forea
03d0: 63 68 20 78 20 24 65 78 74 72 61 73 20 7b 0a 20  ch x $extras {. 
03e0: 20 69 6e 63 72 20 6d 61 78 0a 20 20 70 75 74 73   incr max.  puts
03f0: 20 5b 66 6f 72 6d 61 74 20 22 23 64 65 66 69 6e   [format "#defin
0400: 65 20 54 4b 5f 25 2d 32 39 73 20 25 34 64 22 20  e TK_%-29s %4d" 
0410: 24 78 20 24 6d 61 78 5d 0a 7d 0a 0a 23 20 53 6f  $x $max].}..# So
0420: 6d 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 23 64  me additional #d
0430: 65 66 69 6e 65 73 20 72 65 6c 61 74 65 64 20 74  efines related t
0440: 6f 20 74 6f 6b 65 6e 20 63 6f 64 65 73 2e 0a 23  o token codes..#
0450: 0a 70 75 74 73 20 22 5c 6e 2f 2a 20 54 68 65 20  .puts "\n/* The 
0460: 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 62 6f 76  token codes abov
0470: 65 20 6d 75 73 74 20 61 6c 6c 20 66 69 74 20 69  e must all fit i
0480: 6e 20 38 20 62 69 74 73 20 2a 2f 22 0a 70 75 74  n 8 bits */".put
0490: 73 20 5b 66 6f 72 6d 61 74 20 22 23 64 65 66 69  s [format "#defi
04a0: 6e 65 20 25 2d 32 30 73 20 25 2d 36 73 22 20 54  ne %-20s %-6s" T
04b0: 4b 46 4c 47 5f 4d 41 53 4b 20 30 78 66 66 5d 0a  KFLG_MASK 0xff].
04c0: 70 75 74 73 20 22 5c 6e 2f 2a 20 46 6c 61 67 73  puts "\n/* Flags
04d0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 61 64 64   that can be add
04e0: 65 64 20 74 6f 20 61 20 74 6f 6b 65 6e 20 63 6f  ed to a token co
04f0: 64 65 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  de when it is no
0500: 74 22 0a 70 75 74 73 20 22 2a 2a 20 62 65 69 6e  t".puts "** bein
0510: 67 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 38  g stored in a u8
0520: 3a 20 2a 2f 22 0a 66 6f 72 65 61 63 68 20 7b 66  : */".foreach {f
0530: 67 20 76 61 6c 20 63 6f 6d 6d 65 6e 74 7d 20 7b  g val comment} {
0540: 0a 20 20 54 4b 46 4c 47 5f 44 4f 4e 54 46 4f 4c  .  TKFLG_DONTFOL
0550: 44 20 20 30 78 31 30 30 20 20 7b 2f 2a 20 4f 6d  D  0x100  {/* Om
0560: 69 74 20 63 6f 6e 73 74 61 6e 74 20 66 6f 6c 64  it constant fold
0570: 69 6e 67 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ing optimization
0580: 73 20 2a 2f 7d 0a 7d 20 7b 0a 20 20 70 75 74 73  s */}.} {.  puts
0590: 20 5b 66 6f 72 6d 61 74 20 22 23 64 65 66 69 6e   [format "#defin
05a0: 65 20 25 2d 32 30 73 20 25 2d 36 73 20 25 73 22  e %-20s %-6s %s"
05b0: 20 24 66 67 20 24 76 61 6c 20 24 63 6f 6d 6d 65   $fg $val $comme
05c0: 6e 74 5d 0a 7d 0a                                nt].}.