diff options
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.76.0/scripts/grammar_permutator.py')
-rwxr-xr-x | debian/uncrustify-trinity/uncrustify-trinity-0.76.0/scripts/grammar_permutator.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.76.0/scripts/grammar_permutator.py b/debian/uncrustify-trinity/uncrustify-trinity-0.76.0/scripts/grammar_permutator.py new file mode 100755 index 00000000..cd42bd9f --- /dev/null +++ b/debian/uncrustify-trinity/uncrustify-trinity-0.76.0/scripts/grammar_permutator.py @@ -0,0 +1,93 @@ +#!/usr/bin/python +import argparse + +from nltk.parse.generate import generate +from nltk import CFG +from os.path import exists +from sys import exit as sys_exit + +DEMO_GRAMMAR = """ + S -> 'import ' ImportList ';' | 'static import ' ImportList ';' + ImportList -> Import | ImportBindings | Import ', ' ImportList + Import -> ModuleFullyQualifiedName | ModuleAliasIdentifier ' = ' ModuleFullyQualifiedName + ImportBindings -> Import ' : ' ImportBindList + ImportBindList -> ImportBind | ImportBind ', ' ImportBindList + ImportBind -> Identifier | Identifier ' = ' Identifier + + ModuleAliasIdentifier -> Identifier + + Packages -> PackageName | Packages '.' PackageName + ModuleFullyQualifiedName -> ModuleName | Packages '.' ModuleName + PackageName -> Identifier + ModuleName -> Identifier + + Identifier -> 'x' +""" + + +def valid_file(arg_parser, *args): + """ + checks if on of the provided paths is a file + + + Parameters + ---------------------------------------------------------------------------- + :param arg_parser: + argument parser object that is called if no file is found + + :param args: list< str > + a list of file path that is going to be checked + + + :return: str + ---------------------------------------------------------------------------- + path to an existing file + """ + arg = None + found_flag = False + for arg in args: + if exists(arg): + found_flag = True + break + if not found_flag: + arg_parser.error("file(s) do not exist: %s" % args) + + return arg + + +def main(args): + grammar_string = DEMO_GRAMMAR + + if args.input_file_path: + with open(args.input_file_path, 'r') as f: + grammar_string = f.read() + + grammar = CFG.fromstring(grammar_string) + + for sentence in generate(grammar, depth=args.depth): + print(''.join(sentence)) + + return 0 + + +if __name__ == "__main__": + arg_parser = argparse.ArgumentParser() + + arg_parser.add_argument( + '-i', '--input_file_path', + metavar='<path>', + type=lambda x: valid_file(arg_parser, x), + help="Path to the grammar file", + required=False + ) + arg_parser.add_argument( + '-d', '--depth', + metavar='<nr>', + type=int, + default=9, + help='Max depth of grammar tree.' + ) + + FLAGS, unparsed = arg_parser.parse_known_args() + + sys_exit(main(FLAGS)) |