OLD | NEW |
(Empty) | |
| 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 # |
| 9 set in [open [lindex $argv 0] rb] |
| 10 set max 0 |
| 11 while {![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 } |
| 19 close $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 # |
| 24 set 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 ASTERISK |
| 43 SPAN |
| 44 SPACE |
| 45 ILLEGAL |
| 46 } |
| 47 if {[lrange $extras end-1 end]!="SPACE ILLEGAL"} { |
| 48 error "SPACE and ILLEGAL must be the last two token codes and they\ |
| 49 must be in that order" |
| 50 } |
| 51 foreach x $extras { |
| 52 incr max |
| 53 puts [format "#define TK_%-29s %4d" $x $max] |
| 54 } |
| 55 |
| 56 # Some additional #defines related to token codes. |
| 57 # |
| 58 puts "\n/* The token codes above must all fit in 8 bits */" |
| 59 puts [format "#define %-20s %-6s" TKFLG_MASK 0xff] |
| 60 puts "\n/* Flags that can be added to a token code when it is not" |
| 61 puts "** being stored in a u8: */" |
| 62 foreach {fg val comment} { |
| 63 TKFLG_DONTFOLD 0x100 {/* Omit constant folding optimizations */} |
| 64 } { |
| 65 puts [format "#define %-20s %-6s %s" $fg $val $comment] |
| 66 } |
OLD | NEW |