1#!/usr/bin/tclsh 2# 3# This script appends additional token codes to the end of the 4# parse.h file that lemon generates. These extra token codes are 5# not used by the parser. But they are used by the tokenizer and/or 6# the code generator. 7# 8# 9set in [open [lindex $argv 0] rb] 10set max 0 11while {![eof $in]} { 12 set line [gets $in] 13 if {[regexp {^#define TK_} $line]} { 14 puts $line 15 set x [lindex $line 2] 16 if {$x>$max} {set max $x} 17 } 18} 19close $in 20 21# The following are the extra token codes to be added. SPACE and 22# ILLEGAL *must* be the last two token codes and they must be in that order. 23# 24set extras { 25 TO_TEXT 26 TO_BLOB 27 TO_NUMERIC 28 TO_INT 29 TO_REAL 30 ISNOT 31 END_OF_FILE 32 UNCLOSED_STRING 33 FUNCTION 34 COLUMN 35 AGG_FUNCTION 36 AGG_COLUMN 37 UMINUS 38 UPLUS 39 REGISTER 40 VECTOR 41 SELECT_COLUMN 42 IF_NULL_ROW 43 ASTERISK 44 SPAN 45 SPACE 46 ILLEGAL 47} 48if {[lrange $extras end-1 end]!="SPACE ILLEGAL"} { 49 error "SPACE and ILLEGAL must be the last two token codes and they\ 50 must be in that order" 51} 52foreach x $extras { 53 incr max 54 puts [format "#define TK_%-29s %4d" $x $max] 55} 56 57# Some additional #defines related to token codes. 58# 59puts "\n/* The token codes above must all fit in 8 bits */" 60puts [format "#define %-20s %-6s" TKFLG_MASK 0xff] 61puts "\n/* Flags that can be added to a token code when it is not" 62puts "** being stored in a u8: */" 63foreach {fg val comment} { 64 TKFLG_DONTFOLD 0x100 {/* Omit constant folding optimizations */} 65} { 66 puts [format "#define %-20s %-6s %s" $fg $val $comment] 67} 68