class_docstr: A lexer for the C language. After building it, set the
  input text with input(), and call token() to get new
  tokens.
  
  The public attribute filename can be set to an initial
  filename, but the lexer will update it upon #line
  directives.
class_docstr_tok: ["A","lexer","for","the","C","language",".","After","building","it",",","set","the","input","text","with","input","(",")",",","and","call","token","(",")","to","get","new","tokens",".","The","public","attribute","filename","can","be","set","to","an","initial","filename",",","but","the","lexer","will","update","it","upon","#","line","directives","."]
docstr: Builds the lexer from the specification. Must be
  called after the lexer object is created.
  
  This method exists separately, because the PLY
  manual warns against calling lex.lex inside
  __init__
docstr_tok: ["Builds","the","lexer","from","the","specification",".","Must","be","called","after","the","lexer","object","is","created",".","This","method","exists","separately",",","because","the","PLY","manual","warns","against","calling","lex.lex","inside","__init__"]
code: def build(self, **kwargs):
      """Builds the lexer from the specification. Must be
      called after the lexer object is created.
  
      This method exists separately, because the PLY
      manual warns against calling lex.lex inside
      __init__
      """
      self.lexer = lex.lex(object=self, **kwargs)
  
imports: import re
  from .ply import lex
  from .ply.lex import TOKEN
label_desc: Use image node_id 2 for calling the CLexer obj's underlying member method code with example usage: obj.build() without return types