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

Soh*_*a82 5 python token lexer shlex

我正在编写一个语言解析器/解释器,我想我可以使用 shlex 模块来生成标记,但是在使用多字符运算符(例如+=or )时遇到了问题**。shlex 模块会将它们作为两个单独的运算符进行词法分析,这并不理想。

>>> t = shlex.shlex('x += 3')
>>> t.get_token()
'x'
>>> t.get_token()
'+'
>>> t.get_token()
'='
Run Code Online (Sandbox Code Playgroud)

我想我会尝试向 shlex.wordchars 添加操作符字符,但这会导致没有空格的代码出现问题:

>>> t = shlex.shlex('x+=3')
>>> t.wordchars += '+=*-/'
>>> t.get_token()
'x+=3'
Run Code Online (Sandbox Code Playgroud)

于是我有了一个想法,当我连续有多个可能是有效运算符的令牌时,我可以从令牌中手动重建运算符。例如,如果我有一个+后跟a 的标记=,那么我会将它们连接起来形成一个 '+='。然而,这个解决方案会产生一个问题,比如x - -3. 它会被标记为x, --, 和3,这也不是我想要的。

有什么办法可以简单地用 shlex 模块做我想做的事吗?或者我可能必须自己编写一个标记器?