我可以做CloseMatch of Defined Parsing语法吗?

时间:2017-07-04 09:39:22

标签: pyparsing

我已经定义了一个语法

column = Word(alphanums + '._`')
stmt = column + Literal("(") + Group(delimitedList( column )) +Literal(")")

现在我想使用密切匹配

匹配以下查询
sql = seller(food_type,count(sellers),sum(weight),Earned_money)

我不想改变上面定义的语法。我如何给出closeMatch 作为一个参数

result = stmt.parseString(sql)
print result.dump()


def Review(sql):
  stmt = GetGrammer(sql)
  result = stmt.parseString(sql,parseAll=False)
  print result.dump()

其中var sql是400-500行的过程。所以我正在制作一个自动化代码审查部分。为此,我已经为sql语句编写了语法。 但它抛出异常即使有一个不匹配的小字符串。它在此之后终止。我希望即使异常正在进行也不应该中止因为我知道至少可解析的部分对于查看数据库查询很有用。
Get Grammar返回Procedure的语法,所有这些都是sql语句。

def Getgrammar(sql):
  InputParameters = delimitedList( Optional((_in|_out|_inout),'') + column + 
  DataType)
  DeclarativeSyntax = (_declare + column + DataType+';')

  createProcedureStmt = createProcedure + 
  StoredProcedure.setResultsName("Procedure") +
  lpar + 
  Optional(InputParameters.setResultsName("Input"),'') + 
  rpar + 
  Optional(_sql_security_invoker,'').setResultsName("SQLSECURITY") +
   _begin + 
  ZeroOrMore(  DeclarativeSyntax ).setResultsName("Declare") + 
  ZeroOrMore( ( selectStmt|setStmt|ifStmt.setResultsName("IfStmt")|
  callStmt|updateStmt|createStmt|dropStmt|alterStmt|insertStmt
  |deleteStmt|WhileStmt.setResultsName("WhileStmt")|createStmt ) + ';') + 
  _end+Optional(';','')

  return createProcedureStmt

0 个答案:

没有答案