Making sense of Swift AST - pattern_binding_decl and var_decl


(Lee M) #1

With the code: var foo = true, swift parses this into the following AST:

(pattern_binding_decl
    (pattern_named 'foo')
    (boolean_literal_expr type='<null>' value=true))
(var_decl "foo" type='<null type>' storage_kind=stored)))

I'm wondering why VarDecl and PatternBindingDecl are separate nodes in the
tree and not nested somehow, as they both represent similar things..?

Might be a trivial question as I'm not a compiler guru. I'm porting parts
of the AST representation to another language for a project.

Thanks!


(Slava Pestov) #2

I'm still learning, but I think its just the distinction between introducing the name and performing the name binding. Consider this example,

let (x, y) = (1, 2)

This parses into one PatternBindingDecl and two VarDecls.

Slava

···

On Dec 18, 2015, at 8:08 AM, Lee M via swift-dev <swift-dev@swift.org> wrote:

With the code: var foo = true, swift parses this into the following AST:

(pattern_binding_decl
    (pattern_named 'foo')
    (boolean_literal_expr type='<null>' value=true))
(var_decl "foo" type='<null type>' storage_kind=stored)))

I'm wondering why VarDecl and PatternBindingDecl are separate nodes in the tree and not nested somehow, as they both represent similar things..?

Might be a trivial question as I'm not a compiler guru. I'm porting parts of the AST representation to another language for a project.

Thanks!
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev