Python 解析器层不匹配令牌 4.5 丢弃的令牌

问题描述

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

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

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

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

我可能做错了什么?

解决方法

the Ply documentation says(举个例子):

4.5 丢弃的令牌

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

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

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

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

你能试试这个吗?

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