首页 > 解决方案 > Python解析器层不匹配令牌

问题描述

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

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

我也尝试按如下方式编写令牌,但没有结果。

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

我可能做错了什么?

标签: pythonply

解决方案


正如Ply 文档所说(举例):

4.5 丢弃的代币

要丢弃一个标记,例如评论,只需定义一个不返回值的标记规则。例如:

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

由于这就是您正在做的事情,因此评论标记将被丢弃。这通常是我们想要的,因为注释只会妨碍解析。但是,当您出于某种目的确实需要注释标记时,您需要t从标记函数返回(或其他标记),或者更简单,使用简单的标记变量

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

推荐阅读