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