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

时间:2015-01-20 10:10:29

标签: python token lexer shlex

我正在编写语言解析器/解释器,我想我可以使用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 - -3x--,这也不是我想要的。

有没有办法只使用shlex模块做我想做的事情?或者我可能不得不自己编写一个标记器?

0 个答案:

没有答案