import optparse
-class Parser:
+class DeclParser:
- token_re = re.compile(r'(\w+|\s+|.)')
+ token_re = re.compile(r'(\d[x0-9a-fA-F.UL]*|\w+|\s+|.)')
multi_comment_re = re.compile(r'/\*.*?\*/', flags = re.DOTALL)
single_comment_re = re.compile(r'//.*',)
def parse_declaration(self):
self.parse_tags()
- if self.match('enum'):
+ if self.match('#'):
+ self.parse_define()
+ elif self.match('enum'):
self.parse_enum()
elif self.match('interface'):
self.parse_interface()
print '%s = %s(%s, [' % (name, constructor, type)
while self.lookahead() != '}':
- self.consume('#')
- self.consume('define')
- name = self.consume()
- value = self.consume()
- #print ' "%s",\t# %s' % (name, value)
- print ' "%s",' % (name,)
+ name, value = self.parse_define()
self.consume('}')
print '])'
print
+ def parse_define(self):
+ self.consume('#')
+ self.consume('define')
+ name = self.consume()
+ value = self.consume()
+ #print ' "%s",\t# %s' % (name, value)
+ print ' "%s",' % (name,)
+ return name, value
+
def parse_struct(self):
self.consume('struct')
name = self.consume()
self.consume()
length = self.consume()
self.consume(']')
- type = 'Array(%s, "%s")' % (type, length)
+ try:
+ int(length)
+ except ValueError:
+ length = "%s" % length
+ type = 'Array(%s, %s)' % (type, length)
return type, name
int_tokens = ('unsigned', 'signed', 'int', 'long', 'short', 'char')
return type
-
-
-
-
def main():
- parser = Parser()
- for arg in sys.argv[1:]:
- parser.parse(open(arg, 'rt').read())
+ args = sys.argv[1:]
+
+ parser = DeclParser()
+ if args:
+ for arg in args:
+ parser.parse(open(arg, 'rt').read())
+ else:
+ parser.parse(sys.stdin.read())
if __name__ == '__main__':