我正在编写一个语言解析器/解释器,我想我可以使用 shlex 模块来生成令牌,但是在使用多字符运算符时遇到了问题,例如+=
or **
。shlex 模块会将它们作为两个独立的运算符来使用,这并不理想。
>>> t = shlex.shlex('x += 3')
>>> t.get_token()
'x'
>>> t.get_token()
'+'
>>> t.get_token()
'='
我想我会尝试将运算符字符添加到 shlex.wordchars,但这会导致没有空格的代码出现问题:
>>> t = shlex.shlex('x+=3')
>>> t.wordchars += '+=*-/'
>>> t.get_token()
'x+=3'
因此,我有了一个想法,当我连续有多个可能是有效运算符的令牌时,我可以手动从令牌重建运算符。例如,如果我有一个+
标记后跟一个=
,那么我会将它们连接起来形成一个 '+='。但是,此解决方案会在诸如x - -3
. 它会被标记为x
,--
和3
,这也不是我想要的。
有什么方法可以简单地使用 shlex 模块来做我想做的事吗?还是我可能不得不自己编写一个标记器?