diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2023-12-01 12:38:43 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2023-12-01 12:38:43 +0900 |
commit | b67b7f2b784c7105e88a5e639d9d84736ae2cbc1 (patch) | |
tree | 0fd16d439c681c07d57d7f0d544c7582e04c3a31 /debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/grammar_permutator.py | |
parent | c0a6f1b84c84749908961579b84513fd9f9d9eac (diff) | |
download | extra-dependencies-b67b7f2b784c7105e88a5e639d9d84736ae2cbc1.tar.gz extra-dependencies-b67b7f2b784c7105e88a5e639d9d84736ae2cbc1.zip |
uncrustify-trinity: updated based on upstream version 0.78.1
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/grammar_permutator.py')
-rwxr-xr-x | debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/grammar_permutator.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/grammar_permutator.py b/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/grammar_permutator.py new file mode 100755 index 00000000..cd42bd9f --- /dev/null +++ b/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/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)) |