这三个都可用于跳过,忽略或传递字符。例如:
def t_error(t):
pass
def t_error(t):
t.lexer.skip()
def t_default(t): # put at the extreme end and assuming there are no string definitions
r'.'
pass or skip()
因此,在这种情况下,这三者似乎都有同样的目的。我承认某些方法比其他方法更优雅。
pass
,t_ignore
和t.lexer.skip()
之间的真正差异是什么?
答案 0 :(得分:0)
所有这些功能都在PLY documentation。
中描述 t.lexer.skip()
主要用于错误情况,以在不处理字符的情况下使输入前进固定数量的字符。
t_ignore
和pass
都可以以类似的方式使用。 t_ignore
是一项特殊规则,用于忽略在识别中不起作用的字符。它主要用于忽略空格和类似类型的字符。例如,它可用于忽略注释,但是如果它导致其他识别功能出现问题,则手册会发出警告。例如,注释可以通过以下方式忽略:
t_ignore_COMMENT = r'\#.*'
pass
用于在一旦识别后丢弃lexeme而不生成令牌。该手册给出了一个类似的评论示例:
def t_COMMENT(t):
r'\#.*'
pass
# No return value. Token discarded