牛骨文教育服务平台(让学习变的简单)

4.17 Lexer的内部状态

lexer有一些内部属性在特定情况下有用:

  • lexer.lexpos。这是一个表示当前分析点的位置的整型值。如果你修改这个值的话,这会改变下一个token()的调用行为。在标记的规则方法里面,这个值表示紧跟匹配字串后面的第一个字符的位置,如果这个值在规则中修改,下一个返回的标记将从新的位置开始匹配
  • lexer.lineno。表示当前行号。PLY只是声明这个属性的存在,却永远不更新这个值。如果你想要跟踪行号的话,你需要自己添加代码( 4.6 行号和位置信息)
  • lexer.lexdata。当前lexer的输入字串,这个字符串就是input()方法的输入字串,更改它可能是个糟糕的做法,除非你知道自己在干什么。
  • lexer.lexmatch。PLY内部调用Python的re.match()方法得到的当前标记的原始的Match对象,该对象被保存在这个属性中。如果你的正则式中包含分组的话,你可以通过这个对象获得这些分组的值。注意:这个属性只在有标记规则定义的方法中才有效。