python中的正则表达式来检查语法是否正确

时间:2017-09-19 06:23:48

标签: python regex python-3.x

我正在为我想要制作的语言制作一个基本的语法检查器。 词法分析器将一些东西传递给函数isIfStmt(),以检查它是否有效,如:

#IF#RPAREN...#LPAREN#NEWLINE...#VAR#ASSTOP#RPAREN...#LPAREN#NEWLINE...#END#SPACE#IF

这是我写的python代码:

def isIfStmt(ifStmt):
    ifObj = re.match(r'\#IF\#LPAREN(.*)\#RPAREN(.*)\#END\#SPACE\#IF', ifStmt)
    print(ifObj)
if not isLogicExp(ifObj.group(1)):
    return False
if not isStmtList(ifObj.group(2)):
    return False
if ifObj==None:
    return False
return True

isLogicExp函数检查提供的逻辑表达式是否正确。和isStmtList检查里面的代码是否是一组有效的简单语句,可能包含另一个if。 问题是这个正则表达式匹配最后一个#LPAREN,我希望它匹配if stmt行中第一个左括号的那个。但它匹配所提供的参数中的最后一个。 if() a=(10) 如果我将正则表达式更改为r'\#IF\#LPAREN[^\NEWLINE]\#RPAREN(.*)\#END\#SPACE\#IF',它也无法正常工作。

如果我尝试在#RPAREN中使用非贪婪的方法,那么在括号之间有一个问题,在logicalExp里面可以有更多。 我尝试使用非贪婪的方法#NEWLINE as,

r'\#IF\#LPAREN(.*)\#RPAREN?(#NEWLINE)(.*)\#END\#SPACE\#IF'

但它也没有用。我仍然匹配最后一个#RPAREN

0 个答案:

没有答案