└── root (kind: SyntaxFile)
    ├── items (kind: ItemList)
    │   ├── child #0 (kind: FunctionWithBody)
    │   │   ├── attributes (kind: AttributeList) []
    │   │   ├── declaration (kind: FunctionDeclaration)
    │   │   │   ├── function_kw (kind: TokenFunction): 'fn'
    │   │   │   ├── name (kind: TokenIdentifier): 'foo'
    │   │   │   ├── generic_params (kind: OptionWrappedGenericParamListEmpty) []
    │   │   │   └── signature (kind: FunctionSignature)
    │   │   │       ├── lparen (kind: TokenLParen): '('
    │   │   │       ├── parameters (kind: ParamList)
    │   │   │       │   └── item #0 (kind: Param)
    │   │   │       │       ├── modifiers (kind: ModifierList) []
    │   │   │       │       ├── name (kind: TokenIdentifier): 'x'
    │   │   │       │       └── type_clause (kind: TypeClause)
    │   │   │       │           ├── colon (kind: TokenColon): ':'
    │   │   │       │           └── ty (kind: ExprPath)
    │   │   │       │               └── item #0 (kind: PathSegmentSimple)
    │   │   │       │                   └── ident (kind: TokenIdentifier): 'T'
    │   │   │       ├── rparen (kind: TokenRParen): ')'
    │   │   │       ├── ret_ty (kind: ReturnTypeClause)
    │   │   │       │   ├── arrow (kind: TokenArrow): '->'
    │   │   │       │   └── ty (kind: ExprPath)
    │   │   │       │       └── item #0 (kind: PathSegmentSimple)
    │   │   │       │           └── ident (kind: TokenIdentifier): 'S'
    │   │   │       ├── implicits_clause (kind: OptionImplicitsClauseEmpty) []
    │   │   │       └── optional_no_panic (kind: OptionTerminalNoPanicEmpty) []
    │   │   └── body (kind: ExprBlock)
    │   │       ├── lbrace (kind: TokenLBrace): '{'
    │   │       ├── statements (kind: StatementList)
    │   │       │   ├── child #0 (kind: StatementLet)
    │   │       │   │   ├── let_kw (kind: TokenLet): 'let'
    │   │       │   │   ├── pattern (kind: ExprPath)
    │   │       │   │   │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │       └── ident (kind: TokenIdentifier): 'x'
    │   │       │   │   ├── type_clause (kind: OptionTypeClauseEmpty) []
    │   │       │   │   ├── eq (kind: TokenEq): '='
    │   │       │   │   ├── rhs (kind: ExprBinary)
    │   │       │   │   │   ├── lhs (kind: ExprUnary)
    │   │       │   │   │   │   ├── op (kind: TokenMinus): '-'
    │   │       │   │   │   │   └── expr (kind: TokenLiteralNumber): '5'
    │   │       │   │   │   ├── op (kind: TokenPlus): '+'
    │   │       │   │   │   └── rhs (kind: TokenLiteralNumber): '3'
    │   │       │   │   └── semicolon (kind: TokenSemicolon): ';'
    │   │       │   ├── child #1 (kind: StatementLet)
    │   │       │   │   ├── let_kw (kind: TokenLet): 'let'
    │   │       │   │   ├── pattern (kind: ExprPath)
    │   │       │   │   │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │       └── ident (kind: TokenIdentifier): 'y'
    │   │       │   │   ├── type_clause (kind: TypeClause)
    │   │       │   │   │   ├── colon (kind: TokenColon): ':'
    │   │       │   │   │   └── ty (kind: ExprPath)
    │   │       │   │   │       └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │           └── ident (kind: TokenIdentifier): 'T'
    │   │       │   │   ├── eq (kind: TokenEq): '='
    │   │       │   │   ├── rhs (kind: ExprBinary)
    │   │       │   │   │   ├── lhs (kind: ExprBinary)
    │   │       │   │   │   │   ├── lhs (kind: ExprPath)
    │   │       │   │   │   │   │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │   │   │       └── ident (kind: TokenIdentifier): 'x'
    │   │       │   │   │   │   ├── op (kind: TokenMul): '*'
    │   │       │   │   │   │   └── rhs (kind: TokenLiteralNumber): '2'
    │   │       │   │   │   ├── op (kind: TokenPlus): '+'
    │   │       │   │   │   └── rhs (kind: ExprBinary)
    │   │       │   │   │       ├── lhs (kind: TokenLiteralNumber): '3'
    │   │       │   │   │       ├── op (kind: TokenMul): '*'
    │   │       │   │   │       └── rhs (kind: TokenLiteralNumber): '5'
    │   │       │   │   └── semicolon (kind: TokenSemicolon): ';'
    │   │       │   ├── child #2 (kind: StatementLet)
    │   │       │   │   ├── let_kw (kind: TokenLet): 'let'
    │   │       │   │   ├── pattern (kind: ExprPath)
    │   │       │   │   │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │       └── ident (kind: TokenIdentifier): 'z'
    │   │       │   │   ├── type_clause (kind: OptionTypeClauseEmpty) []
    │   │       │   │   ├── eq (kind: TokenEq): '='
    │   │       │   │   ├── rhs: Missing []
    │   │       │   │   └── semicolon (kind: TokenSemicolon): ';'
    │   │       │   ├── child #3 (kind: StatementLet)
    │   │       │   │   ├── let_kw (kind: TokenLet): 'let'
    │   │       │   │   ├── pattern (kind: ExprPath)
    │   │       │   │   │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │       └── ident (kind: TokenIdentifier): 'v'
    │   │       │   │   ├── type_clause (kind: OptionTypeClauseEmpty) []
    │   │       │   │   ├── eq (kind: TokenEq): '='
    │   │       │   │   ├── rhs (kind: ExprBinary)
    │   │       │   │   │   ├── lhs (kind: ExprPath)
    │   │       │   │   │   │   ├── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │   │   │   └── ident (kind: TokenIdentifier): 'bool'
    │   │       │   │   │   │   ├── separator #0 (kind: TokenColonColon): '::'
    │   │       │   │   │   │   └── item #1 (kind: PathSegmentSimple)
    │   │       │   │   │   │       └── ident (kind: TokenIdentifier): 'True'
    │   │       │   │   │   ├── op (kind: TokenEqEq): '=='
    │   │       │   │   │   └── rhs (kind: TokenFalse): 'false'
    │   │       │   │   └── semicolon (kind: TokenSemicolon): ';'
    │   │       │   ├── child #4 (kind: StatementExpr)
    │   │       │   │   ├── expr (kind: ExprBinary)
    │   │       │   │   │   ├── lhs (kind: TokenLiteralNumber): '5'
    │   │       │   │   │   ├── op (kind: TokenPlus): '+'
    │   │       │   │   │   └── rhs (kind: ExprStructCtorCall)
    │   │       │   │   │       ├── path (kind: ExprPath)
    │   │       │   │   │       │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │       │       └── ident (kind: TokenIdentifier): 'Struct'
    │   │       │   │   │       └── arguments (kind: ArgListBraced)
    │   │       │   │   │           ├── lbrace (kind: TokenLBrace): '{'
    │   │       │   │   │           ├── arguments (kind: StructArgList)
    │   │       │   │   │           │   ├── item #0 (kind: StructArgSingle)
    │   │       │   │   │           │   │   ├── identifier (kind: TokenIdentifier): 'a'
    │   │       │   │   │           │   │   └── arg_expr (kind: StructArgExpr)
    │   │       │   │   │           │   │       ├── colon (kind: TokenColon): ':'
    │   │       │   │   │           │   │       └── expr (kind: TokenLiteralNumber): '5'
    │   │       │   │   │           │   ├── separator #0 (kind: TokenComma): ','
    │   │       │   │   │           │   └── item #1 (kind: StructArgSingle)
    │   │       │   │   │           │       ├── identifier (kind: TokenIdentifier): 'b'
    │   │       │   │   │           │       └── arg_expr (kind: StructArgExpr)
    │   │       │   │   │           │           ├── colon (kind: TokenColon): ':'
    │   │       │   │   │           │           └── expr (kind: ExprStructCtorCall)
    │   │       │   │   │           │               ├── path (kind: ExprPath)
    │   │       │   │   │           │               │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │           │               │       └── ident (kind: TokenIdentifier): 'Struct2'
    │   │       │   │   │           │               └── arguments (kind: ArgListBraced)
    │   │       │   │   │           │                   ├── lbrace (kind: TokenLBrace): '{'
    │   │       │   │   │           │                   ├── arguments (kind: StructArgList)
    │   │       │   │   │           │                   │   └── item #0 (kind: StructArgSingle)
    │   │       │   │   │           │                   │       ├── identifier (kind: TokenIdentifier): '_gg'
    │   │       │   │   │           │                   │       └── arg_expr (kind: StructArgExpr)
    │   │       │   │   │           │                   │           ├── colon (kind: TokenColon): ':'
    │   │       │   │   │           │                   │           └── expr (kind: ExprListParenthesized)
    │   │       │   │   │           │                   │               ├── lparen (kind: TokenLParen): '('
    │   │       │   │   │           │                   │               ├── expressions (kind: ExprList) []
    │   │       │   │   │           │                   │               └── rparen (kind: TokenRParen): ')'
    │   │       │   │   │           │                   └── rbrace (kind: TokenRBrace): '}'
    │   │       │   │   │           └── rbrace (kind: TokenRBrace): '}'
    │   │       │   │   └── semicolon (kind: TokenSemicolon): ';'
    │   │       │   ├── child #5 (kind: StatementReturn)
    │   │       │   │   ├── return_kw (kind: TokenReturn): 'return'
    │   │       │   │   ├── expr_clause (kind: ExprClause)
    │   │       │   │   │   └── expr (kind: ExprBinary)
    │   │       │   │   │       ├── lhs (kind: ExprPath)
    │   │       │   │   │       │   └── item #0 (kind: PathSegmentSimple)
    │   │       │   │   │       │       └── ident (kind: TokenIdentifier): 'df'
    │   │       │   │   │       ├── op (kind: TokenEqEq): '=='
    │   │       │   │   │       └── rhs (kind: TokenLiteralNumber): '6'
    │   │       │   │   └── semicolon (kind: TokenSemicolon): ';'
    │   │       │   └── child #6 (kind: StatementExpr)
    │   │       │       ├── expr (kind: ExprBinary)
    │   │       │       │   ├── lhs (kind: ExprPath)
    │   │       │       │   │   └── item #0 (kind: PathSegmentSimple)
    │   │       │       │   │       └── ident (kind: TokenIdentifier): 'x'
    │   │       │       │   ├── op (kind: TokenPlus): '+'
    │   │       │       │   └── rhs (kind: ExprPath)
    │   │       │       │       └── item #0 (kind: PathSegmentSimple)
    │   │       │       │           └── ident (kind: TokenIdentifier): 'y'
    │   │       │       └── semicolon (kind: OptionTerminalSemicolonEmpty) []
    │   │       └── rbrace (kind: TokenRBrace): '}'
    │   └── child #1 (kind: ItemModule)
    │       ├── attributes (kind: AttributeList) []
    │       ├── module_kw (kind: TokenModule): 'mod'
    │       ├── name (kind: TokenIdentifier): 'my_mod'
    │       └── body (kind: ModuleBody)
    │           ├── lbrace (kind: TokenLBrace): '{'
    │           ├── items (kind: ItemList)
    │           │   ├── child #0 (kind: FunctionWithBody)
    │           │   │   ├── attributes (kind: AttributeList) []
    │           │   │   ├── declaration (kind: FunctionDeclaration)
    │           │   │   │   ├── function_kw (kind: TokenFunction): 'fn'
    │           │   │   │   ├── name (kind: TokenIdentifier): 'bar'
    │           │   │   │   ├── generic_params (kind: OptionWrappedGenericParamListEmpty) []
    │           │   │   │   └── signature (kind: FunctionSignature)
    │           │   │   │       ├── lparen (kind: TokenLParen): '('
    │           │   │   │       ├── parameters (kind: ParamList)
    │           │   │   │       │   ├── item #0 (kind: Param)
    │           │   │   │       │   │   ├── modifiers (kind: ModifierList) []
    │           │   │   │       │   │   ├── name (kind: TokenIdentifier): 'x'
    │           │   │   │       │   │   └── type_clause (kind: TypeClause)
    │           │   │   │       │   │       ├── colon (kind: TokenColon): ':'
    │           │   │   │       │   │       └── ty (kind: ExprPath)
    │           │   │   │       │   │           └── item #0 (kind: PathSegmentSimple)
    │           │   │   │       │   │               └── ident (kind: TokenIdentifier): 'T0'
    │           │   │   │       │   ├── separator #0 (kind: TokenComma): ','
    │           │   │   │       │   └── item #1 (kind: Param)
    │           │   │   │       │       ├── modifiers (kind: ModifierList) []
    │           │   │   │       │       ├── name (kind: TokenIdentifier): 's'
    │           │   │   │       │       └── type_clause (kind: TypeClause)
    │           │   │   │       │           ├── colon (kind: TokenColon): ':'
    │           │   │   │       │           └── ty (kind: ExprPath)
    │           │   │   │       │               └── item #0 (kind: PathSegmentSimple)
    │           │   │   │       │                   └── ident (kind: TokenIdentifier): 'S'
    │           │   │   │       ├── rparen (kind: TokenRParen): ')'
    │           │   │   │       ├── ret_ty (kind: ReturnTypeClause)
    │           │   │   │       │   ├── arrow (kind: TokenArrow): '->'
    │           │   │   │       │   └── ty (kind: ExprPath)
    │           │   │   │       │       └── item #0 (kind: PathSegmentSimple)
    │           │   │   │       │           └── ident (kind: TokenIdentifier): 'X'
    │           │   │   │       ├── implicits_clause (kind: OptionImplicitsClauseEmpty) []
    │           │   │   │       └── optional_no_panic (kind: OptionTerminalNoPanicEmpty) []
    │           │   │   └── body (kind: ExprBlock)
    │           │   │       ├── lbrace (kind: TokenLBrace): '{'
    │           │   │       ├── statements (kind: StatementList)
    │           │   │       │   └── child #0 (kind: StatementExpr)
    │           │   │       │       ├── expr (kind: ExprBinary)
    │           │   │       │       │   ├── lhs (kind: ExprBinary)
    │           │   │       │       │   │   ├── lhs (kind: ExprBinary)
    │           │   │       │       │   │   │   ├── lhs (kind: ExprPath)
    │           │   │       │       │   │   │   │   └── item #0 (kind: PathSegmentSimple)
    │           │   │       │       │   │   │   │       └── ident (kind: TokenIdentifier): 'x'
    │           │   │       │       │   │   │   ├── op (kind: TokenDot): '.'
    │           │   │       │       │   │   │   └── rhs (kind: ExprPath)
    │           │   │       │       │   │   │       └── item #0 (kind: PathSegmentSimple)
    │           │   │       │       │   │   │           └── ident (kind: TokenIdentifier): 'a'
    │           │   │       │       │   │   ├── op (kind: TokenMul): '*'
    │           │   │       │       │   │   └── rhs: Missing []
    │           │   │       │       │   ├── op (kind: TokenPlus): '+'
    │           │   │       │       │   └── rhs (kind: ExprBinary)
    │           │   │       │       │       ├── lhs (kind: ExprBinary)
    │           │   │       │       │       │   ├── lhs (kind: ExprBinary)
    │           │   │       │       │       │   │   ├── lhs (kind: ExprUnary)
    │           │   │       │       │       │   │   │   ├── op (kind: TokenMinus): '-'
    │           │   │       │       │       │   │   │   └── expr: Missing []
    │           │   │       │       │       │   │   ├── op (kind: TokenDot): '.'
    │           │   │       │       │       │   │   └── rhs (kind: ExprPath)
    │           │   │       │       │       │   │       └── item #0 (kind: PathSegmentSimple)
    │           │   │       │       │       │   │           └── ident (kind: TokenIdentifier): 's'
    │           │   │       │       │       │   ├── op (kind: TokenDot): '.'
    │           │   │       │       │       │   └── rhs (kind: ExprPath)
    │           │   │       │       │       │       └── item #0 (kind: PathSegmentSimple)
    │           │   │       │       │       │           └── ident (kind: TokenIdentifier): 's'
    │           │   │       │       │       ├── op (kind: TokenMul): '*'
    │           │   │       │       │       └── rhs (kind: ExprFunctionCall)
    │           │   │       │       │           ├── path (kind: ExprPath)
    │           │   │       │       │           │   └── item #0 (kind: PathSegmentSimple)
    │           │   │       │       │           │       └── ident (kind: TokenIdentifier): 'foo'
    │           │   │       │       │           └── arguments (kind: ArgListParenthesized)
    │           │   │       │       │               ├── lparen (kind: TokenLParen): '('
    │           │   │       │       │               ├── args (kind: ArgList)
    │           │   │       │       │               │   ├── item #0 (kind: Arg)
    │           │   │       │       │               │   │   ├── modifiers (kind: ModifierList) []
    │           │   │       │       │               │   │   └── arg_clause (kind: ArgClauseUnnamed)
    │           │   │       │       │               │   │       └── value (kind: TokenLiteralNumber): '1'
    │           │   │       │       │               │   ├── separator #0 (kind: TokenComma): ','
    │           │   │       │       │               │   └── item #1 (kind: Arg)
    │           │   │       │       │               │       ├── modifiers (kind: ModifierList) []
    │           │   │       │       │               │       └── arg_clause (kind: ArgClauseUnnamed)
    │           │   │       │       │               │           └── value (kind: TokenLiteralNumber): '3'
    │           │   │       │       │               └── rparen (kind: TokenRParen): ')'
    │           │   │       │       └── semicolon (kind: OptionTerminalSemicolonEmpty) []
    │           │   │       └── rbrace (kind: TokenRBrace): '}'
    │           │   └── child #1 (kind: ItemStruct)
    │           │       ├── attributes (kind: AttributeList) []
    │           │       ├── struct_kw (kind: TokenStruct): 'struct'
    │           │       ├── name (kind: TokenIdentifier): 'A'
    │           │       ├── generic_params (kind: OptionWrappedGenericParamListEmpty) []
    │           │       ├── lbrace (kind: TokenLBrace): '{'
    │           │       ├── members (kind: MemberList)
    │           │       │   ├── item #0 (kind: Member)
    │           │       │   │   ├── attributes (kind: AttributeList) []
    │           │       │   │   ├── name (kind: TokenIdentifier): 'x'
    │           │       │   │   └── type_clause (kind: TypeClause)
    │           │       │   │       ├── colon (kind: TokenColon): ':'
    │           │       │   │       └── ty (kind: ExprPath)
    │           │       │   │           └── item #0 (kind: PathSegmentSimple)
    │           │       │   │               └── ident (kind: TokenIdentifier): 'a'
    │           │       │   ├── separator #0 (kind: TokenComma): ','
    │           │       │   └── item #1 (kind: Member)
    │           │       │       ├── attributes (kind: AttributeList) []
    │           │       │       ├── name (kind: TokenIdentifier): 'y'
    │           │       │       └── type_clause (kind: TypeClause)
    │           │       │           ├── colon (kind: TokenColon): ':'
    │           │       │           └── ty (kind: ExprPath)
    │           │       │               └── item #0 (kind: PathSegmentSimple)
    │           │       │                   └── ident (kind: TokenIdentifier): 'int'
    │           │       └── rbrace (kind: TokenRBrace): '}'
    │           └── rbrace (kind: TokenRBrace): '}'
    └── eof (kind: TokenEndOfFile).
--------------------
error: Missing tokens. Expected an expression.
 --> test2.cairo:5:12
    let z = ;
           ^

error: Missing tokens. Expected an expression.
 --> test2.cairo:14:14
        x.a *+-. s.s * foo(1,3)
             ^

error: Missing tokens. Expected an expression.
 --> test2.cairo:14:16
        x.a *+-. s.s * foo(1,3)
               ^

error: Skipped tokens. Expected: Const/Module/Use/FreeFunction/ExternFunction/ExternType/Trait/Impl/Struct/Enum/TypeAlias or an attribute.
 --> test2.cairo:23:1
skipped tokens
^*****^

error: Skipped tokens. Expected: Const/Module/Use/FreeFunction/ExternFunction/ExternType/Trait/Impl/Struct/Enum/TypeAlias or an attribute.
 --> test2.cairo:23:9
skipped tokens
        ^****^

