fork(1) download
  1. from ply import lex
  2.  
  3. primitive_types = {
  4. 'float': 'FLOAT',
  5. 'int': 'INT',
  6. 'name': 'NAME',
  7. 'bool': 'BOOL',
  8. 'string': 'STRING',
  9. 'byte': 'BYTE'
  10. }
  11.  
  12. function_modifiers = [
  13. 'EXEC',
  14. 'FINAL',
  15. 'ITERATOR',
  16. 'LATENT',
  17. 'NATIVE',
  18. 'SIMULATED',
  19. 'SINGULAR',
  20. 'STATIC'
  21. ]
  22.  
  23. struct_modifers = [
  24. 'TRANSIENT'
  25. 'EXPORT'
  26. 'INIT'
  27. 'NATIVE'
  28. ]
  29.  
  30. class_modifiers = {
  31. 'abstract': 'ABSTRACT',
  32. 'cacheexempt': 'CACHEEXEMPT',
  33. 'collapsecategories': 'COLLAPSECATEGORIES',
  34. 'config': 'CONFIG',
  35. 'dependson': 'DEPENDSON',
  36. 'dontcollapsecategories': 'DONTCOLLAPSECATEGORIES',
  37. 'editinlinenew': 'EDITINLINENEW',
  38. 'exportstructs': 'EXPORTSTRUCTS',
  39. 'hidecategories': 'HIDECATEGORIES',
  40. 'hidedropdown': 'HIDEDROPDOWN',
  41. 'instanced': 'INSTANCED',
  42. 'native': 'NATIVE',
  43. 'nativereplication': 'NATIVEREPLICATION',
  44. 'noexport': 'NOEXPORT',
  45. 'nonativereplication': 'NONATIVEREPLICATION',
  46. 'noteditinlinenew': 'NOTEDITINLINENEW',
  47. 'notplaceable': 'NOTPLACEABLE',
  48. 'parseconfig': 'PARSECONFIG',
  49. 'perobjectconfig': 'PEROBJECTCONFIG',
  50. 'placeable': 'PLACEABLE',
  51. 'safereplace': 'SAFEREPLACE',
  52. 'showcategories': 'SHOWCATEGORIES',
  53. 'transient': 'TRANSIENT',
  54. 'within': 'WITHIN',
  55. 'template': 'TEMPLATE'
  56. }
  57.  
  58. access_modifiers = {
  59. 'private': 'PRIVATE',
  60. 'protected': 'PROTECTED'
  61. }
  62.  
  63. function_parameter_modifiers = {
  64. 'skip': 'SKIP',
  65. 'out': 'OUT',
  66. 'optional': 'OPTIONAL',
  67. 'coerce': 'COERCE'
  68. }
  69.  
  70. variable_modifiers = {
  71. 'automated': 'AUTOMATED',
  72. 'cache': 'CACHE',
  73. 'config': 'CONFIG',
  74. 'const': 'CONST',
  75. 'deprecated': 'DEPRECATED',
  76. 'edfindable': 'EDFINDABLE',
  77. 'editconst': 'EDITCONST',
  78. 'editconstarray': 'EDITCONSTARRAY',
  79. 'editinline': 'EDITINLINE',
  80. 'editinlinenotify': 'EDITINLINENOTIFY',
  81. 'editinlineuse': 'EDITINLINEUSE',
  82. 'export': 'EXPORT',
  83. 'noexport': 'NOEXPORT',
  84. 'globalconfig': 'GLOBALCONFIG',
  85. 'input': 'INPUT',
  86. 'localized': 'LOCALIZED',
  87. 'native': 'NATIVE',
  88. 'private': 'PRIVATE',
  89. 'protected': 'PROTECTED',
  90. 'transient': 'TRANSIENT',
  91. 'travel': 'TRAVEL',
  92. }
  93.  
  94. reserved = {
  95. 'always': 'ALWAYS',
  96. 'array': 'ARRAY',
  97. 'arraycount': 'ARRAYCOUNT',
  98. 'assert': 'ASSERT',
  99. 'auto': 'AUTO',
  100. 'automated': 'AUTOMATED',
  101. 'begin': 'BEGIN',
  102. 'bool': 'BOOL',
  103. 'break': 'BREAK',
  104. 'button': 'BUTTON',
  105. 'byte': 'BYTE',
  106. 'case': 'CASE',
  107. 'class': 'CLASS',
  108. 'coerce': 'COERCE',
  109. 'collapsecategories': 'COLLAPSECATEGORIES',
  110. 'continue': 'CONTINUE',
  111. 'default': 'DEFAULT',
  112. 'defaultproperties': 'DEFAULTPROPERTIES',
  113. 'delegate': 'DELEGATE',
  114. 'do': 'DO',
  115. 'editinlinenotify': 'EDITINLINENOTIFY',
  116. 'editinlineuse': 'EDITINLINEUSE',
  117. 'else': 'ELSE',
  118. 'end': 'END',
  119. 'enum': 'ENUM',
  120. 'enumcount': 'ENUMCOUNT',
  121. 'event': 'EVENT',
  122. 'exec': 'EXEC',
  123. 'expands': 'EXPANDS',
  124. 'extends': 'EXTENDS',
  125. 'false': 'FALSE',
  126. 'final': 'FINAL',
  127. 'float': 'FLOAT',
  128. 'for': 'FOR',
  129. 'foreach': 'FOREACH',
  130. 'function': 'FUNCTION',
  131. 'global': 'GLOBAL',
  132. 'globalconfig': 'GLOBALCONFIG',
  133. 'goto': 'GOTO',
  134. 'if': 'IF',
  135. 'ignores': 'IGNORES',
  136. 'import': 'IMPORT',
  137. 'init': 'INIT',
  138. 'input': 'INPUT',
  139. #'insert': 'INSERT',
  140. 'int': 'INT',
  141. 'intrinsic': 'INTRINSIC',
  142. 'invariant': 'INVARIANT',
  143. 'iterator': 'ITERATOR',
  144. 'latent': 'LATENT',
  145. 'local': 'LOCAL',
  146. 'localized': 'LOCALIZED',
  147. 'name': 'NAME',
  148. 'new': 'NEW',
  149. 'none': 'NONE',
  150. 'nousercreate': 'NOUSERCREATE',
  151. 'operator': 'OPERATOR',
  152. 'optional': 'OPTIONAL',
  153. 'out': 'OUT',
  154. 'postoperator': 'POSTOPERATOR',
  155. 'preoperator': 'PREOPERATOR',
  156. 'reliable': 'RELIABLE',
  157. #'remove': 'REMOVE',
  158. 'replication': 'REPLICATION',
  159. 'return': 'RETURN',
  160. 'rng': 'RNG',
  161. 'rot': 'ROT',
  162. 'self': 'SELF',
  163. 'simulated': 'SIMULATED',
  164. 'singular': 'SINGULAR',
  165. 'skip': 'SKIP',
  166. 'state': 'STATE',
  167. 'static': 'STATIC',
  168. 'stop': 'STOP',
  169. 'string': 'STRING',
  170. 'struct': 'STRUCT',
  171. 'super': 'SUPER',
  172. 'switch': 'SWITCH',
  173. 'true': 'TRUE',
  174. 'unreliable': 'UNRELIABLE',
  175. 'until': 'UNTIL',
  176. 'var': 'VAR',
  177. 'vect': 'VECT',
  178. 'while': 'WHILE',
  179. # the following are keywords added by ulex
  180. 'typeof': 'TYPEOF',
  181. 'sizeof': 'SIZEOF',
  182. 'typedef': 'TYPEDEF'
  183. }
  184.  
  185. reserved.update(class_modifiers)
  186. reserved.update(variable_modifiers)
  187.  
  188. tokens = [
  189. 'COMMENT',
  190. 'UNAME',
  191. 'INTEGER',
  192. 'HEX',
  193. 'SEMICOLON',
  194. 'LPAREN',
  195. 'RPAREN',
  196. 'LSQUARE',
  197. 'RSQUARE',
  198. 'LANGLE',
  199. 'RANGLE',
  200. 'LCURLY',
  201. 'RCURLY',
  202. 'ASSIGN',
  203. 'COMMA',
  204. 'PERIOD',
  205. 'LQUOTE',
  206. 'RQUOTE',
  207. 'USTRING',
  208. 'UFLOAT',
  209. 'EQUAL',
  210. 'NEQUAL',
  211. 'OR',
  212. 'NOT',
  213. 'INCREMENT',
  214. 'ADD',
  215. 'MULTIPLY',
  216. 'AND',
  217. 'MINUS',
  218. 'COLON',
  219. 'SEQUAL',
  220. 'MODULUS',
  221. 'SCONCAT',
  222. 'SCONCATSPACE',
  223. 'DIVIDE',
  224. 'REFERENCE',
  225. 'DIRECTIVE',
  226. 'AMPERSAND',
  227. 'BITWISE_AND',
  228. 'BITWISE_OR',
  229. 'LEFT_SHIFT',
  230. 'RIGHT_SHIFT',
  231. 'XOR',
  232. 'BITWISE_NOT',
  233. 'ID',
  234. 'LEQUAL',
  235. 'GEQUAL',
  236. 'IASSIGN',
  237. 'DASSIGN'
  238. ] + list(reserved.values())
  239.  
  240. t_LPAREN = r'\('
  241. t_RPAREN = r'\)'
  242. t_LSQUARE = r'\['
  243. t_RSQUARE = r'\]'
  244. t_LANGLE = r'\<'
  245. t_RANGLE = r'\>'
  246. t_LCURLY = r'\{'
  247. t_RCURLY = r'\}'
  248. t_LQUOTE = r'\"'
  249. t_RQUOTE = r'\"'
  250. t_ignore = '\r\t '
  251. t_SEMICOLON = r'\;'
  252. t_ASSIGN = r'\='
  253. t_COMMA = r','
  254. t_PERIOD = '\.'
  255. t_EQUAL = r'=='
  256. t_NEQUAL = r'!='
  257. t_OR = r'\|\|'
  258. t_NOT = r'!'
  259. t_INCREMENT = r'\+\+'
  260. t_ADD = r'\+'
  261. t_MULTIPLY = r'\*'
  262. t_AND = r'\&\&'
  263. t_MINUS = r'-'
  264. t_COLON = r':'
  265. t_SEQUAL = r'~='
  266. t_MODULUS = r'%'
  267. t_SCONCAT = r'\$'
  268. t_SCONCATSPACE = r'@'
  269. t_DIVIDE = r'/'
  270. t_BITWISE_AND = r'\&'
  271. t_BITWISE_OR = r'\|'
  272. t_LEFT_SHIFT = r'<<'
  273. t_RIGHT_SHIFT = r'>>'
  274. t_XOR = r'\^'
  275. t_BITWISE_NOT = r'~'
  276. t_LEQUAL = r'\<\='
  277. t_GEQUAL = r'>='
  278. t_IASSIGN = r'\+='
  279. t_DASSIGN = r'-='
  280.  
  281.  
  282. def t_DIRECTIVE(t):
  283. r'\#(\w+)\s+(.+)'
  284. t_DIRECTIVE.__doc__ = r'\#(\w+)\s+(.+)'
  285.  
  286. def t_REFERENCE(t):
  287. r'([a-zA-Z0-9_\-]+)\s*\'([a-zA-Z0-9_\-\.]+)\''
  288. return t
  289. t_REFERENCE.__doc__ = r'([a-zA-Z0-9_\-]+)\s*\'([a-zA-Z0-9_\-\.]+)\''
  290.  
  291. def t_UNAME(t):
  292. r'\'([a-zA-Z0-9_\- ]*)\''
  293. return t
  294. t_UNAME.__doc__ = r'\'([a-zA-Z0-9_\- ]*)\''
  295.  
  296. def t_USTRING(t):
  297. r'"((\\{2})*|(.*?[^\\](\\{2})*))"'
  298. return t
  299. t_USTRING.__doc__ = r'"((\\{2})*|(.*?[^\\](\\{2})*))"'
  300.  
  301. def t_UFLOAT(t):
  302. r'[-+]?\d*?[.]\d+'
  303. t.value = float(t.value)
  304. return t
  305. t_UFLOAT.__doc__ = r'[-+]?\d*?[.]\d+'
  306.  
  307. def t_HEX(t):
  308. r'0[xX][0-9a-fA-F]+'
  309. t.type = 'INTEGER'
  310. t.value = int(t.value, 0)
  311. return t
  312. t_HEX.__doc__ = r'0[xX][0-9a-fA-F]+'
  313.  
  314. def t_INTEGER(t):
  315. r'[-+]?\d+'
  316. t.value = int(t.value)
  317. return t
  318. t_INTEGER.__doc__ = r'[-+]?\d+'
  319.  
  320. def t_COMMENT(t):
  321. r'(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)'
  322. t_COMMENT.__doc__ = r'(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)'
  323.  
  324. def t_ID(t):
  325. r'[a-zA-Z_][a-zA-Z_0-9]*'
  326. t.type = reserved.get(t.value.lower(), 'ID')
  327. return t
  328. t_ID.__doc__ = r'[a-zA-Z_][a-zA-Z_0-9]*'
  329.  
  330. def t_newline(t):
  331. r'\n+'
  332. t.lexer.lineno += len(t.value)
  333. t_newline.__doc__ = r'\n+'
  334.  
  335. def t_error(t):
  336. pass
  337.  
  338. lexer = lex.lex()
  339.  
Success #stdin #stdout 0.03s 9072KB
stdin
Standard input is empty
stdout
Standard output is empty