# Node types Every node `type` string the parser produces, with its class. A renderer registers handlers and rules under these strings. The [Nodes](../building-renderers/nodes.md) page explains what each node represents. | `type` | Class | Attributes | |---|---|---| | `calc_line` | {src}`CalcLine ` | `assigns`, `expression_tree`, `comment`, `pars_nesting` | | `expr_line` | {src}`ExprLine ` | `expression_tree`, `comment`, `return_expr`, `pars_nesting` | | `comment_line` | {src}`CommentLine ` | `content` | | `heading` | {src}`Heading ` | `content`, `heading_level` | | `comment_command` | {src}`CommentCommand ` | `commands` | | `import` | {src}`Import ` | `import_from`, `names`, `import_from_module`, `import_from_level` | | `params_block` | {src}`ParamsBlock ` | `lines`, `with_comments` | | `comments_block` | {src}`CommentsBlock ` | `lines` | | `calcs_block` | {src}`CalcsBlock ` | `lines` | | `for_block` | {src}`ForBlock ` | `lines`, `assigns`, `iterator` | | `if_block` | {src}`IfBlock ` | `lines`, `test`, `orelse`, `is_true` | | `else_block` | {src}`ElseBlock ` | `lines` | | `elif_block` | {src}`ElifBlock ` | `lines` | | `name` | {src}`Name ` | `identifier`, `value` | | `constant` | {src}`Constant ` | `value` | | `attribute` | {src}`Attribute ` | `namespace`, `identifier`, `value` | | `list` | {src}`List ` | `elems` | | `tuple` | {src}`Tuple ` | `elems` | | `set` | {src}`Set ` | `elems` | | `dictionary` | {src}`Dictionary ` | `keys`, `values` | | `subscript` | {src}`Subscript ` | `container`, `index`, `labels`, `value` | | `slice` | {src}`Slice ` | `lower`, `upper`, `step` | | `matrix` | {src}`Matrix ` | `rows` | | `function_call` | {src}`FunctionCall ` | `namespace`, `function_name`, `args` | | `keyword` | {src}`Keyword ` | `arg`, `value` | | `compare` | {src}`Compare ` | `comparison` | | `if_exp` | {src}`IfExp ` | `test`, `body`, `orelse`, `is_true` | | `inline_comment` | {src}`InlineComment ` | `content` | | `inline_command` | {src}`InlineCommand ` | `content`, `commands` | | `comprehension` | {src}`Comprehension ` | `assigns`, `iterator`, `is_async` | | `comprehension_chain` | {src}`ComprehensionChain ` | `comp_type`, `assign`, `key`, `value`, `comprehensions` | | `pow_op` | {src}`PowOp ` | `left`, `right`, `symbol` | | `div_op` | {src}`DivOp ` | `left`, `right`, `symbol` | | `floor_op` | {src}`FloorOp ` | `left`, `right`, `symbol` | | `modulo_op` | {src}`ModuloOp ` | `left`, `right`, `symbol` | | `mult_op` | {src}`MultOp ` | `left`, `right`, `symbol` | | `mat_mult_op` | {src}`MatMultOp ` | `left`, `right`, `symbol` | | `add_op` | {src}`AddOp ` | `left`, `right`, `symbol` | | `sub_op` | {src}`SubOp ` | `left`, `right`, `symbol` | | `unary_op` | {src}`HcUnaryOp ` | `operand`, `symbol` | | `eq_op` | {src}`EqOp ` | `symbol` | | `neq_op` | {src}`NeqOp ` | `symbol` | | `gt_op` | {src}`GtOp ` | `symbol` | | `gte_op` | {src}`GtEOp ` | `symbol` | | `lt_op` | {src}`LtOp ` | `symbol` | | `lte_op` | {src}`LtEOp ` | `symbol` | | `is_op` | {src}`IsOp ` | `symbol` | | `is_not_op` | {src}`IsNotOp ` | `symbol` | | `in_op` | {src}`InOp ` | `symbol` | | `not_in_op` | {src}`NotInOp ` | `symbol` | | `and_op` | {src}`AndOp ` | `values`, `symbol` | | `or_op` | {src}`OrOp ` | `values`, `symbol` | | `no_value` | {src}`NoValue ` | (none) | | `not_implemented` | {src}`HcNotImplemented ` | `node_name` | | `root` | {src}`HcSequence ` | `sequence`, `hc_globals`, `hc_locals` | All line nodes also have `level`, `pre` and `post`; all block nodes have `level`, `header_pre`, `header_post`, `body_pre` and `body_post`; operators have `pre` and `post`.