> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/guardrails/llms.txt.
> For full documentation content, see https://docs.nvidia.com/nemo/guardrails/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/guardrails/_mcp/server.

# nemoguardrails.colang.v1_0.lang.colang_parser

## Module Contents

### Classes

| Name                                                                          | Description |
| ----------------------------------------------------------------------------- | ----------- |
| [`ColangParser`](#nemoguardrails-colang-v1_0-lang-colang_parser-ColangParser) | -           |

### Functions

| Name                                                                                                      | Description                                         |
| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| [`parse_coflows_to_yml_flows`](#nemoguardrails-colang-v1_0-lang-colang_parser-parse_coflows_to_yml_flows) | Parses a file in .co format to a YAML flows format. |
| [`parse_snippets_and_imports`](#nemoguardrails-colang-v1_0-lang-colang_parser-parse_snippets_and_imports) | Parses snippets and imports from a file.            |

### Data

[`VALID_MAIN_TOKENS`](#nemoguardrails-colang-v1_0-lang-colang_parser-VALID_MAIN_TOKENS)

[`__all__`](#nemoguardrails-colang-v1_0-lang-colang_parser-__all__)

### API

```python
class nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser(
    filename: str,
    content: str,
    include_source_mapping: bool = False,
    snippets: typing.Optional[dict] = None
)
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._check_flow_exists()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._check_ifs_and_branches()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._create_namespace(
    namespace
)
```

create a namespace.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_indentation_levels()
```

Helper to extract the indentation levels higher than the current line.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_indented_lines()
```

Helper to extract the indented lines, relative to the current line.

It also needs to take into account if the params should be indented one level or two.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_markdown()
```

Helper to extract markdown content.

The `self.symbol_type` and `self.symbol_name` must be set correctly before calling this.

It will start with the next line, and use it as a reference for the indentation level.
As long as the indentation is higher, it will keep parsing the lines as markdown.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_params(
    param_lines: typing.Optional[typing.List] = None
)
```

Helper to parse additional parameters for an element.

We transform the indented lines into valid YAML format. It should end up being a dict
and not a list.

:param param\_lines: If provided, these lines will be used to extract the params.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_snippet_name()
```

Helper to extract the name of a snippet. Also updates self.text.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._fetch_current_line()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._ignore_block_body()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._include_source_mappings()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._is_sample_flow()
```

Returns true if the current flow is a sample one.

NOTE:
This will not work correctly if the current position is nested inside another branch
like an "if". But currently, it is meant for test flows, which should be linear.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._is_test_flow()
```

Returns true if the current flow is a test one.

NOTE:
This will not work correctly if the current position is nested inside another branch
like an "if". But currently, it is meant for test flows, which should be linear.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._normalize_line_text()
```

Applies a series of normalizations for a line of colang.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_any()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_bot()
```

Parser for the `bot X` syntax.

The syntax is quite flexible, see example\_45.co for various ways.

A meta syntax is the following:

bot \<utterance\_id>? "sample\_utterance"? (with/for $param=value)?
  $?param (:|=) value

"sample\_utterance\_1"?
"sample\_utterance\_2"?

When id and sample utterance is included, an utterance definition is also
generated as markdown content.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_break()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_continue()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_do()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_else_if()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_event()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_generic()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_goto()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_if()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_if_branch(
    if_condition
)
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_infer()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_label()
```

Supports parsing labels, with or without a value.

e.g.
label bla
label speech hints \$hints

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_meta()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_return()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_run()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_stop()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_user()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_when()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_while()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._process_define()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._record_import()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._split_inline_params(
    value
)
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser.parse()
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser.parse_snippets_and_imports()
```

Parses just the snippets and imports from the file.

The data is returned in the format
\{
"snippet\_name": \{
"name": "snippet\_name",
"params": \["T", "A"],
"lines": \<numbered lines>
}
}, \["skill\_1", ...]

```python
nemoguardrails.colang.v1_0.lang.colang_parser.parse_coflows_to_yml_flows(
    filename: str,
    content: str,
    include_source_mapping: bool = False,
    snippets: typing.Optional[dict] = None
)
```

Parses a file in .co format to a YAML flows format.

Parameters:

* filename (str): The name of the file.
* content (str): The content of the file.
* include\_source\_mapping (bool): Whether to include source mapping into the flow elements.
* snippets (Optional\[dict]): Snippets to use when parsing the file.

Returns:
The parsed YAML flows.

Example:

```python
filename = "example.co"
content = "..."
flows = parse_coflows_to_yml_flows(filename, content, include_source_mapping=True)
```

Note:

* The function uses the ColangParser to convert .co format to YAML flows.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.parse_snippets_and_imports(
    filename: str,
    content: str
)
```

Parses snippets and imports from a file.

Parameters:

* filename (str): The name of the file.
* content (str): The content of the file.

Returns:
A dictionary of snippets and a list of skill names.

Example:

```python
filename = "example.co"
content = "..."
snippets, skills = parse_snippets_and_imports(filename, content)
```

Note:

* The function uses the ColangParser to extract snippets and imports.

```python
nemoguardrails.colang.v1_0.lang.colang_parser.VALID_MAIN_TOKENS = ['import', 'include', 'use', 'define', 'when', 'else when', 'user', 'bot', 'even...
```

```python
nemoguardrails.colang.v1_0.lang.colang_parser.__all__ = ['ColangParser', 'parse_coflows_to_yml_flows', 'parse_snippets_and_imports']
```