def parse_pic_field(l, c, last_section_node, last_vars, line):
parent_node = None<EOL>raw_tokens = line.split("<STR_LIT:U+0020>")<EOL>tokens = []<EOL>for t in raw_tokens:<EOL><INDENT>if not t.isspace() and t != "<STR_LIT>":<EOL><INDENT>tokens.append(t)<EOL><DEDENT><DEDENT>try:<EOL><INDENT>if tokens[<NUM_LIT:0>].upper() == "<STR_LIT>":<EOL><INDENT>lvl = <NUM_LIT:1><EOL><DEDENT>else:<EOL><INDENT>lvl = int(tokens[<NUM_LIT:0>], <NUM_LIT:16>)<EOL><DEDENT>name = tokens[<NUM_LIT:1>]<EOL><DEDENT>except ValueError:<EOL><INDENT>return None<EOL><DEDENT>except IndexError:<EOL><INDENT>return None<EOL><DEDENT>name = name.replace("<STR_LIT:.>", "<STR_LIT>")<EOL>if name in ALL_KEYWORDS or name in ['<STR_LIT:->', '<STR_LIT:/>']:<EOL><INDENT>return None<EOL><DEDENT>m = re.findall(r'<STR_LIT>', line, re.IGNORECASE)<EOL>if m:<EOL><INDENT>description = '<STR_LIT:U+0020>'.join([t for t in m[<NUM_LIT:0>].split('<STR_LIT:U+0020>') if t])<EOL><DEDENT>else:<EOL><INDENT>description = line<EOL><DEDENT>try:<EOL><INDENT>index = description.lower().index('<STR_LIT:value>')<EOL><DEDENT>except ValueError:<EOL><INDENT>description = description.replace('<STR_LIT:.>', '<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>description = description[index:].replace('<STR_LIT:value>', '<STR_LIT>')[:<NUM_LIT>]<EOL><DEDENT>if lvl == int('<STR_LIT>', <NUM_LIT:16>):<EOL><INDENT>lvl = <NUM_LIT:1><EOL><DEDENT>if lvl == <NUM_LIT:1>:<EOL><INDENT>parent_node = last_section_node<EOL>last_vars.clear()<EOL><DEDENT>else:<EOL><INDENT>levels = sorted(last_vars.keys(), reverse=True)<EOL>for lv in levels:<EOL><INDENT>if lv < lvl:<EOL><INDENT>parent_node = last_vars[lv]<EOL>break<EOL><DEDENT><DEDENT><DEDENT>if not parent_node:<EOL><INDENT>return None<EOL><DEDENT>if not name or name.upper().strip() == '<STR_LIT>':<EOL><INDENT>name = '<STR_LIT>'<EOL><DEDENT>node = Name(Name.Type.Variable, l, c, name, description)<EOL>parent_node.add_child(node)<EOL>last_vars[lvl] = node<EOL>levels = sorted(last_vars.keys(), reverse=True)<EOL>for l in levels:<EOL><INDENT>if l > lvl:<EOL><INDENT>last_vars.pop(l)<EOL><DEDENT><DEDENT>return node<EOL>
Parse a pic field line. Return A VariableNode or None in case of malformed
code.

:param l: The line number (starting from 0)
:param c: The column number (starting from 0)
:param last_section_node: The last section node found
:param last_vars: The last vars dict
:param line: The line string (without indentation)
:return: The extracted variable node