64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
| #!/usr/bin/tclsh
 | |
| #
 | |
| # This script appends additional token codes to the end of the
 | |
| # parse.h file that lemon generates.  These extra token codes are
 | |
| # not used by the parser.  But they are used by the tokenizer and/or
 | |
| # the code generator.
 | |
| #
 | |
| #
 | |
| set in [open [lindex $argv 0] rb]
 | |
| set max 0
 | |
| while {![eof $in]} {
 | |
|   set line [gets $in]
 | |
|   if {[regexp {^#define TK_} $line]} {
 | |
|     puts $line
 | |
|     set x [lindex $line 2]
 | |
|     if {$x>$max} {set max $x}
 | |
|   }
 | |
| }
 | |
| close $in
 | |
| 
 | |
| # The following are the extra token codes to be added.  SPACE and 
 | |
| # ILLEGAL *must* be the last two token codes and they must be in that order.
 | |
| #
 | |
| set extras {
 | |
|   TO_TEXT
 | |
|   TO_BLOB
 | |
|   TO_NUMERIC
 | |
|   TO_INT
 | |
|   TO_REAL
 | |
|   ISNOT
 | |
|   END_OF_FILE
 | |
|   UNCLOSED_STRING
 | |
|   FUNCTION
 | |
|   COLUMN
 | |
|   AGG_FUNCTION
 | |
|   AGG_COLUMN
 | |
|   UMINUS
 | |
|   UPLUS
 | |
|   REGISTER
 | |
|   ASTERISK
 | |
|   SPACE
 | |
|   ILLEGAL
 | |
| }
 | |
| if {[lrange $extras end-1 end]!="SPACE ILLEGAL"} {
 | |
|   error "SPACE and ILLEGAL must be the last two token codes and they\
 | |
|          must be in that order"
 | |
| }
 | |
| foreach x $extras {
 | |
|   incr max
 | |
|   puts [format "#define TK_%-29s %4d" $x $max]
 | |
| }
 | |
| 
 | |
| # Some additional #defines related to token codes.
 | |
| #
 | |
| puts "\n/* The token codes above must all fit in 8 bits */"
 | |
| puts [format "#define %-20s %-6s" TKFLG_MASK 0xff]
 | |
| puts "\n/* Flags that can be added to a token code when it is not"
 | |
| puts "** being stored in a u8: */"
 | |
| foreach {fg val comment} {
 | |
|   TKFLG_DONTFOLD  0x100  {/* Omit constant folding optimizations */}
 | |
| } {
 | |
|   puts [format "#define %-20s %-6s %s" $fg $val $comment]
 | |
| }
 | 
