나는 "속임수를 일찍이, 속이기도한다"라고하는 사람입니다. 다음은 입력 코드를 Python 표현식으로 변환하고, 일반적인 메커니즘을 사용하여 구문 분석 한 다음 구조체를 인쇄합니다.
import ast, re
source = "((x='a' OR x= 'b') AND(y ='c' OR y = 'd'))"
# turn source '=' into Python '==', unless it's part of a compound
# IE: <= >= != => =< =!
py_source = re.compile(
r'(?<= [^<>!] )'
r'='
r'(?<= [^<>!] )',
re.VERBOSE).sub('==', source.lower())
print 'SOURCE:', source
print 'PYTHON:', py_source
print ast.dump(ast.parse(py_source))
예 출력 :
SOURCE: ((x='a' OR x= 'b') AND(y ='c' OR y = 'd'))
PYTHON: ((x=='a' or x== 'b') and(y =='c' or y == 'd'))
Module(body=[Expr(value=BoolOp(op=And(), values=[BoolOp(op=Or(), values=[Compare(left=Name(id='x', ctx=Load()), ops=[Eq()], comparators=[Str(s='a')]), Compare(left=Name(id='x', ctx=Load()), ops=[Eq()], comparators=[Str(s='b')])]), BoolOp(op=Or(), values=[Compare(left=Name(id='y', ctx=Load()), ops=[Eq()], comparators=[Str(s='c')]), Compare(left=Name(id='y', ctx=Load()), ops=[Eq()], comparators=[Str(s='d')])])]))])
당신이 분석 된 결과에 대해 수행 할 수 있습니까? 간단한 코드 실행은 해결책이 아닐 것입니다. –
https://wiki.python.org/moin/LanguageParsing (예 : PyBison) – Pavel
@ Jan-Philip Gehrcke : 나무 만 원합니다. 일부 데이터베이스 검색 메커니즘을 구현하려고합니다. – mxant