Python 解析器层不匹配令牌

Python parser ply not matching token

我正在尝试使用 Ply 来解析文件并尝试制作注释标记。评论由双斜杠 // 或主题标签 # 指定。当我尝试使用以下内容时,没有创建评论标记。

@lex.TOKEN(r'(//.*|\#.*)')
def t_COMMENT(t):
    ...

我也试过如下写token,没有结果。

def t_COMMENT(t):
    r''(//.*|\#.*)'

我可能做错了什么?

As the Ply documentation says(举例):

4.5 Discarded tokens

To discard a token, such as a comment, simply define a token rule that returns no value. For example:

def t_COMMENT(t):
    r'\#.*'
    pass
    # No return value. Token discarded

由于这就是您正在做的事情,评论标记将被丢弃。这通常是需要的,因为注释只会妨碍解析。但是当你出于某种目的真的想要评论标记时,你需要从标记函数中使用 return t (或其他标记),或者更简单地使用 simple token variable:

t_COMMENT = r'(//|\#).*'

你能试试这个吗?

def t_COMMENT(t): r'\(//.*) | (#.*)'; return t