【问题标题】:What is the difference between t_ignore, pass and t.lexer.skip() in ply.lex?ply.lex 中的 t_ignore、pass 和 t.lexer.skip() 有什么区别?
【发布时间】:2014-08-21 23:05:32
【问题描述】:

这三个都可以用来跳过、忽略或跳过字符。例如:

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()

因此,在这种情况下,所有三个似乎都有相同的目的。我承认某些方法比其他方法更优雅。

passt_ignoret.lexer.skip() 之间的真正区别是什么?

【问题讨论】:

    标签: python lex lexer ply


    【解决方案1】:

    所有这些功能都在PLY documentation 中进行了描述。

    t.lexer.skip()主要用在出错情况下,不处理字符就提前输入固定数量的字符。

    t_ignorepass 都可以以类似的方式使用。 t_ignore 是一个特殊规则,用于忽略不参与识别的字符。它主要用于忽略空格和类似类型的字符。例如,它可用于忽略 cmets,但手册警告不要这样做,以防它导致其他识别功能出现问题。例如,可以通过以下方式忽略评论:

    t_ignore_COMMENT = r'\#.*'
    

    pass用于丢弃一个词位而不生成一个标记,一旦它被识别。手册给出了类似的注释示例:

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

    【讨论】:

      猜你喜欢
      • 2018-06-06
      • 2013-12-20
      • 2012-03-13
      • 2015-11-14
      • 2016-09-04
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      相关资源
      最近更新 更多