From dfc7d7524ed9bb74a04865a68a06982bb54fcc5c Mon Sep 17 00:00:00 2001 From: Paul McGuire Date: Wed, 8 Sep 2021 09:03:40 -0500 Subject: 226 railroad updates (#298) * Add line separators to HowToUsePyparsing.rst to call attention to PEP-8 naming in this document * Update railroad diagram generation code, to show results names as group annotations, and break out all expressions with a name set using setName. * Revert dataclasses back to NamedTuples for 3.6-7 compat; add setName calls in simpleBool.py; add simpleBool to make_diagram.py * Remove default setName calls on delimitedList * Add setName calls to simpleSQL for better diagram * Remove hard-coded debug mode * Move setName on delimitedList into test code * Restore default setName() calls for delimitedList; set default vertical=3; update jsonParser.py and simpleSQL.py with better setName() calls (and update test_diagram.py accordingly); update test_diagram.py to move asserts after tempfiles are written, moved tempfiles to local dir instead of hard-to-find temp dir * Get proper railroad diags for infixNotation * Undo forced railroad_debug * Code cleanup from PR comments * Remove hard-coded base_expr name from infix_notation * Add special EachItem to compose DiagramItem for Group-OneOrMore-Choice; refactored tests to move duplicated code to function; added names to mozillaCalendarParser.py for better diagram * Make sure root element gets in the diagram, even if it has no custom name * Update tests to reflect diagram structure changes * Add LOOKAHEAD and LOOKBEHIND annotations for FollowedBy and PrecededBy elements, and changed the annotation on Each to [ALL]; renamed _first to _element_diagram_states; add expr.streamline() in create_diagram() to collapse nested exprs; added railroad_diagram_demo.py example general blackening; update CHANGES with latest enhancements; bump version date * Fix pip command * Update CHANGES and whats_new_in_3_0_0.rst with some features and acknowledgements * Updates from PR review: change user instructions to use pyparsing[diagrams]; consistent annotations for NotAny along with FollowedBy and PrecededBy; fixed up comments and type annotations * Remove unneeded pip installs for tox (already handled in tox.ini) * Refactor duplicate code into decorator; drop unused group_results_name argument * Add diagram handling for SkipTo, and for And's constructed using `expr*N` notation (use a OneOrMore diagram with a repeat count instead of a sequence of N exprs) * Fix parsing ambiguity in railroad_diagram_demo.py so that parser can actually parse a valid input string --- examples/simpleSQL.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'examples/simpleSQL.py') diff --git a/examples/simpleSQL.py b/examples/simpleSQL.py index 5c93191..39b8b4b 100644 --- a/examples/simpleSQL.py +++ b/examples/simpleSQL.py @@ -35,24 +35,24 @@ NOT_NULL = NOT + NULL ident = Word(alphas, alphanums + "_$").setName("identifier") columnName = delimitedList(ident, ".", combine=True).setName("column name") columnName.addParseAction(ppc.upcaseTokens) -columnNameList = Group(delimitedList(columnName)) +columnNameList = Group(delimitedList(columnName).setName("column_list")) tableName = delimitedList(ident, ".", combine=True).setName("table name") tableName.addParseAction(ppc.upcaseTokens) -tableNameList = Group(delimitedList(tableName)) +tableNameList = Group(delimitedList(tableName).setName("table_list")) -binop = oneOf("= != < > >= <= eq ne lt le gt ge", caseless=True) -realNum = ppc.real() +binop = oneOf("= != < > >= <= eq ne lt le gt ge", caseless=True).setName("binop") +realNum = ppc.real().setName("real number") intNum = ppc.signed_integer() columnRval = ( realNum | intNum | quotedString | columnName -) # need to add support for alg expressions +).setName("column_rvalue") # need to add support for alg expressions whereCondition = Group( (columnName + binop + columnRval) - | (columnName + IN + Group("(" + delimitedList(columnRval) + ")")) + | (columnName + IN + Group("(" + delimitedList(columnRval).setName("in_values_list") + ")")) | (columnName + IN + Group("(" + selectStmt + ")")) | (columnName + IS + (NULL | NOT_NULL)) -) +).setName("where_condition") whereExpression = infixNotation( whereCondition, @@ -61,7 +61,7 @@ whereExpression = infixNotation( (AND, 2, opAssoc.LEFT), (OR, 2, opAssoc.LEFT), ], -) +).setName("where_expression") # define the grammar selectStmt <<= ( @@ -70,7 +70,7 @@ selectStmt <<= ( + FROM + tableNameList("tables") + Optional(Group(WHERE + whereExpression), "")("where") -) +).setName("select_statement") simpleSQL = selectStmt -- cgit v1.2.1