3 releases

Uses old Rust 2015

0.1.2 Nov 30, 2018
0.1.1 Nov 26, 2018
0.1.0 Nov 24, 2018

#23 in #experience

AGPL-3.0

105KB
3K SLoC

luis CircleCI cargo-badge

A Rust based Lua parser

Why?

learning experience

Prior art

from https://www.lua.org/manual/5.3/manual.html

chunk ::= block

block ::= {stat} [retstat]

stat ::=;|
        varlist ‘=’ explist |
        functioncall |
        label |
        break |
        goto Name |
        do block end |
        while exp do block end |
        repeat block until exp |
        if exp then block {elseif exp then block} [else block] end |
        for Name ‘=’ exp ‘,’ exp [,’ exp] do block end |
        for namelist in explist do block end |
        function funcname funcbody |
        local function Name funcbody |
        local namelist [=’ explist]

retstat ::= return [explist] [;]

label ::=::’ Name ‘::’

funcname ::= Name {.’ Name} [:’ Name]

varlist ::= var {,’ var}

var ::=  Name | prefixexp ‘[’ exp ‘]| prefixexp ‘.’ Name

namelist ::= Name {,’ Name}

explist ::= exp {,’ exp}

exp ::=  nil | false | true | Numeral | LiteralString |...| functiondef |
        prefixexp | tableconstructor | exp binop exp | unop exp

prefixexp ::= var | functioncall |(’ exp ‘)’

functioncall ::=  prefixexp args | prefixexp ‘:’ Name args

args ::=([explist])| tableconstructor | LiteralString

functiondef ::= function funcbody

funcbody ::=([parlist])’ block end

parlist ::= namelist [,’ ‘...] |...’

tableconstructor ::={[fieldlist]}’

fieldlist ::= field {fieldsep field} [fieldsep]

field ::=[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp

fieldsep ::=,|;’

binop ::=+|-|*|/|//’ | ‘^’ | ‘%’ |&|~|||>>|<<|..|<|<=|>|>=|==|~=|
        and | or

unop ::=-| not |#|~

No runtime deps