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]
 | 
						|
}
 |