jirutka / sh-parser

Parser of POSIX Shell Command Language
MIT License
25 stars 2 forks source link

AST format #2

Open tst2005 opened 7 years ago

tst2005 commented 7 years ago

Hello,

I wonder if you already know the AST format defined/used by metalua ?

It use a type name into a ["tag"] key, all data are used by numerical indexes.

It is shorter to dump for human debug

The current lua-sh-parser ast format :

{
        type = "Program",
        body = {
                {
                        type = "SimpleCommand",
                        prefix = {
                                {
                                        type = "Assignment",
                                        name = {
                                                type = "Name",
                                                text = "FOO",
                                        },
                                        value = {
                                                type = "Word",
                                                content = {
                                                        "bar",
                                                },
                                        },
                                },
                        },
                },
        },
}

the current format but shown with a metalua style

`Program{
        body=`SimpleCommand{
                prefix=`Assignment{
                        value=`Word{
                                content="bar"
                        },
                        name=`Name{
                                text="FOO"
                        }
                }
        },
}

The same data in metalua AST format

{
        tag = "Program",
        {
                {
                        tag = "SimpleCommand",
                        {
                                {
                                        tag = "Assignment",
                                        {
                                                tag = "Word",
                                                {
                                                        "bar",
                                                },
                                        },
                                        {
                                                tag = "Name",
                                                "FOO",
                                        },
                                },
                        },
                },
        },
}

The metalua usual form for the same sample

`Program{
        `SimpleCommand{
                `Assignment{
                        `Name{
                                "FOO"
                        }
                        `Word{
                                "bar"
                        },
                },
        },
}

What did you think about the metalua AST format ?

I'm working on the step that I want convert back AST to sh then I'm trying to move ast format to a common one ;-)

Regards,

jirutka commented 7 years ago

Yes, I know metalua AST format. It's designed for very different grammar, that is much simpler and saner than sh.

You can very easily get similar representation using sh-parser's low-level API (raw captures). Tag indices are documented in AST.adoc.