home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / pippy-0.6beta-src.tar.gz / pippy-0.6beta-src.tar / pippy-0.6beta-src / src / Lib / token.py < prev    next >
Text File  |  2000-12-21  |  3KB  |  129 lines

  1. #! /usr/bin/env python
  2.  
  3. """Token constants (from "token.h")."""
  4.  
  5. #  This file is automatically generated; please don't muck it up!
  6. #
  7. #  To update the symbols in this file, 'cd' to the top directory of
  8. #  the python source tree after building the interpreter and run:
  9. #
  10. #    python Lib/token.py
  11.  
  12. #--start constants--
  13. ENDMARKER = 0
  14. NAME = 1
  15. NUMBER = 2
  16. STRING = 3
  17. NEWLINE = 4
  18. INDENT = 5
  19. DEDENT = 6
  20. LPAR = 7
  21. RPAR = 8
  22. LSQB = 9
  23. RSQB = 10
  24. COLON = 11
  25. COMMA = 12
  26. SEMI = 13
  27. PLUS = 14
  28. MINUS = 15
  29. STAR = 16
  30. SLASH = 17
  31. VBAR = 18
  32. AMPER = 19
  33. LESS = 20
  34. GREATER = 21
  35. EQUAL = 22
  36. DOT = 23
  37. PERCENT = 24
  38. BACKQUOTE = 25
  39. LBRACE = 26
  40. RBRACE = 27
  41. EQEQUAL = 28
  42. NOTEQUAL = 29
  43. LESSEQUAL = 30
  44. GREATEREQUAL = 31
  45. TILDE = 32
  46. CIRCUMFLEX = 33
  47. LEFTSHIFT = 34
  48. RIGHTSHIFT = 35
  49. DOUBLESTAR = 36
  50. OP = 37
  51. ERRORTOKEN = 38
  52. N_TOKENS = 39
  53. NT_OFFSET = 256
  54. #--end constants--
  55.  
  56. tok_name = {}
  57. for _name, _value in globals().items():
  58.     if type(_value) is type(0):
  59.         tok_name[_value] = _name
  60.  
  61.  
  62. def ISTERMINAL(x):
  63.     return x < NT_OFFSET
  64.  
  65. def ISNONTERMINAL(x):
  66.     return x >= NT_OFFSET
  67.  
  68. def ISEOF(x):
  69.     return x == ENDMARKER
  70.  
  71.  
  72. def main():
  73.     import re
  74.     import string
  75.     import sys
  76.     args = sys.argv[1:]
  77.     inFileName = args and args[0] or "Include/token.h"
  78.     outFileName = "Lib/token.py"
  79.     if len(args) > 1:
  80.         outFileName = args[1]
  81.     try:
  82.         fp = open(inFileName)
  83.     except IOError, err:
  84.         sys.stdout.write("I/O error: %s\n" % str(err))
  85.         sys.exit(1)
  86.     lines = string.splitfields(fp.read(), "\n")
  87.     fp.close()
  88.     prog = re.compile(
  89.         "#define[ \t][ \t]*([A-Z][A-Z_]*)[ \t][ \t]*([0-9][0-9]*)",
  90.         re.IGNORECASE)
  91.     tokens = {}
  92.     for line in lines:
  93.         match = prog.match(line)
  94.         if match:
  95.             name, val = match.group(1, 2)
  96.             val = string.atoi(val)
  97.             tokens[val] = name          # reverse so we can sort them...
  98.     keys = tokens.keys()
  99.     keys.sort()
  100.     # load the output skeleton from the target:
  101.     try:
  102.         fp = open(outFileName)
  103.     except IOError, err:
  104.         sys.stderr.write("I/O error: %s\n" % str(err))
  105.         sys.exit(2)
  106.     format = string.splitfields(fp.read(), "\n")
  107.     fp.close()
  108.     try:
  109.         start = format.index("#--start constants--") + 1
  110.         end = format.index("#--end constants--")
  111.     except ValueError:
  112.         sys.stderr.write("target does not contain format markers")
  113.         sys.exit(3)
  114.     lines = []
  115.     for val in keys:
  116.         lines.append("%s = %d" % (tokens[val], val))
  117.     format[start:end] = lines
  118.     try:
  119.         fp = open(outFileName, 'w')
  120.     except IOError, err:
  121.         sys.stderr.write("I/O error: %s\n" % str(err))
  122.         sys.exit(4)
  123.     fp.write(string.joinfields(format, "\n"))
  124.     fp.close()
  125.  
  126.  
  127. if __name__ == "__main__":
  128.     main()
  129.