我正在编写语言解析器/解释器,我想我可以使用shlex模块生成令牌,但在处理多字符运算符时遇到了问题,例如+=
或{{1 }}。 shlex模块将这些作为两个独立的运算符,这是不理想的。
**
我以为我会尝试在shlex.wordchars中添加运算符字符,但这会产生没有空格的代码问题:
>>> t = shlex.shlex('x += 3')
>>> t.get_token()
'x'
>>> t.get_token()
'+'
>>> t.get_token()
'='
那么我有一个想法,当我有一个可能是有效运算符的行中有多个令牌时,我可以手动重建令牌中的运算符。例如,如果我有>>> t = shlex.shlex('x+=3')
>>> t.wordchars += '+=*-/'
>>> t.get_token()
'x+=3'
标记后跟+
,那么我会连接它们以生成'+ ='。但是,此解决方案会导致=
等表达式出现问题。它会被标记为x - -3
,x
和--
,这也不是我想要的。
有没有办法只使用shlex模块做我想做的事情?或者我可能不得不自己编写一个标记器?