From c7ecfbff3a4c82f537a3d2f99b3bc8e5f005684d Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sat, 4 Nov 2017 11:05:39 +0100 Subject: [PATCH] grammar.py: Add support for --start-symbols Signed-off-by: Jan Lindemann --- tools/python/jwutils/grammar.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/python/jwutils/grammar.py b/tools/python/jwutils/grammar.py index b151bb3..6f0d094 100644 --- a/tools/python/jwutils/grammar.py +++ b/tools/python/jwutils/grammar.py @@ -1117,6 +1117,8 @@ def grammar_create_y(grammar, opts): #include #include + #include + """) for f in opts['includes']: @@ -1210,6 +1212,9 @@ def grammar_create_y(grammar, opts): %param { struct context *context } { void *scanner } """) + if opts['start'] is not None: + out += "%start " + opts['start'] + # productions out += '\n%%\n\n' for t, p in grammar.iteritems(): @@ -1240,6 +1245,7 @@ def grammar_create_y(grammar, opts): else: out += indent + "| " + format_yacc_rule(rule) + "\n" out += indent + "{" + "\n" + out += indent + "\t" + 'slog(PRI_NOTICE, "stack size = %d, %d / %d, %d", yyssp - &yyssa[0], yyss - &yyssa[0], yyvsp - &yyvsa[0], yyvs - &yyvsa[0]);\n' out += indent + "\t" + "$$ = new " + opts['namespace'] + '::' + t + ";\n" out += indent + "\t" + "$$->type = " + opts['namespace'] + '::' + t + "::t_" + str(n_rule) + ";\n" tokens = [] @@ -1423,7 +1429,7 @@ def grammar_create_l(grammar, opts): out += textwrap.dedent("""\ . { - slog(PRI_NOTICE, "returning character %c", yytext[0]); + slog(PRI_NOTICE, "returning character '%c'", yytext[0]); return yytext[0]; } @@ -1644,6 +1650,7 @@ class GrammarCmd(jwutils.Cmd): p.add_argument('-t', '--trim-symbols', help='trim grammar tree at symbol', nargs='?', default='') p.add_argument('-r', '--irrelevant-symbols', help='exclude symbol from output payload', nargs='?', default='') p.add_argument('-c', '--cut-symbols', help='cut grammar tree at symbol', nargs='?', default='') + p.add_argument('-s', '--start-symbols', help='use start-symbols', nargs='?', default=None) p.add_argument('-f', '--config-file', help='config file', nargs='?', default=None) return p @@ -1737,7 +1744,8 @@ class CmdCreate(DerivedGrammarCmd): "namespace" : args.namespace, "includes" : includes, "mip" : mip, - "config" : config + "config" : config, + "start" : args.start_symbols } cmd = getattr(sys.modules[__name__], 'grammar_create_' + ext)