在Python中使用shlex进行词法分析时,如何处理多字符运算符?

在Python中使用shlex进行词法分析时,如何处理多字符运算符?,python,token,lexer,shlex,Python,Token,Lexer,Shlex,我正在编写一个语言解析器/解释器,我想我可以使用shlex模块来生成令牌,但在使用多字符运算符时遇到了问题,例如+=或**。shlex模块将把它们作为两个单独的操作符进行lex,这是不理想的 >>> t = shlex.shlex('x += 3') >>> t.get_token() 'x' >>> t.get_token() '+' >>> t.get_token() '=' 我想我应该尝试将运算符字符添加到shlex

我正在编写一个语言解析器/解释器,我想我可以使用shlex模块来生成令牌,但在使用多字符运算符时遇到了问题,例如
+=
**
。shlex模块将把它们作为两个单独的操作符进行lex,这是不理想的

>>> 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模块实现我想要的功能?或者我可能要自己写一个标记器