Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
80f70b2940 |
2 changed files with 54 additions and 0 deletions
37
support/genset/genset.py
Normal file
37
support/genset/genset.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
"""Example of a parser that handles a subset of C and can extract
|
||||
structs and typedefs for later generation.
|
||||
|
||||
See test.h for example input.
|
||||
"""
|
||||
|
||||
import fileinput
|
||||
import pprint
|
||||
from pyparsing import *
|
||||
|
||||
struct = Keyword('struct')
|
||||
lbrace = Literal('{')
|
||||
rbrace = Literal('}')
|
||||
semi = Literal(';')
|
||||
identifier = Word(alphas, alphanums + '_')
|
||||
typedef = Keyword('typedef')
|
||||
|
||||
comment = Literal('//').suppress() + restOfLine
|
||||
comments = Group(OneOrMore(comment))
|
||||
|
||||
type_alias = Optional(comments) + typedef + identifier + identifier
|
||||
|
||||
field_def = Optional(comments) + identifier + identifier + semi
|
||||
|
||||
struct_def = struct + Optional(identifier) + lbrace + OneOrMore(field_def) + rbrace
|
||||
|
||||
typedef_def = Optional(comments) + typedef + struct_def + identifier
|
||||
|
||||
bnf = ZeroOrMore((struct_def | typedef_def | type_alias) + semi)
|
||||
|
||||
def main():
|
||||
for v in bnf.scanString('\n'.join(fileinput.input())):
|
||||
results, start, end = v
|
||||
results.pprint()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
17
support/genset/test.h
Normal file
17
support/genset/test.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Typedef to allow reuse of ranges and units.
|
||||
// range: 1000...2000; units: ns
|
||||
typedef int16_t servoDrive_t;
|
||||
|
||||
// Comment
|
||||
// and more
|
||||
typedef struct servoParam_s2 {
|
||||
// Short description. Longer description to show in detailed
|
||||
// help. Basics are inherited from the typedef.
|
||||
//
|
||||
// default: 1000
|
||||
servoDrive_t min;
|
||||
// default: 2000
|
||||
servoDrive_t max;
|
||||
// default: 1500
|
||||
servoDrive_t mid;
|
||||
} foo_t;
|
Loading…
Reference in a new issue