尝试将定位器添加到命令和路径表达式中:
locator = Empty().setParseAction(lambda s,l,t: l)
def locatedExpr(expr):
return Group(locator("location") + expr("value"))
class Shell(object):
def __init__(self):
# Simplified grammar of the command line
# path command parameters
#command = Word(alphanums + '_').setResultsName('command')
command = locatedExpr(Word(alphanums + '_'))('command')
bookmark = Regex('@([A-Za-z0-9:_.]|-)+')
pathstd = Regex('([A-Za-z0-9:_.]|-)*' + '/' + '([A-Za-z0-9:_./]|-)*') \
| '..' | '.'
#path = (bookmark | pathstd | '*')('path')
path = locatedExpr(bookmark | pathstd | '*')('path')
parser = Optional(path) + Optional(command) # + Optional(parameters)
self.parser = parser
现在,您应该可以访问path.location
并path.value
获取路径的位置和匹配的文本,以及命令的路径。