mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
70 lines
2.5 KiB
Markdown
70 lines
2.5 KiB
Markdown
---
|
||
permalink: /grammar
|
||
title: Grammar
|
||
toc: true
|
||
---
|
||
|
||
```
|
||
chunk ::= {stat [`;']} [laststat [`;']]
|
||
block ::= chunk
|
||
stat ::= varlist `=' explist |
|
||
var compoundop exp |
|
||
functioncall |
|
||
do block end |
|
||
while exp do block end |
|
||
repeat block until exp |
|
||
if exp then block {elseif exp then block} [else block] end |
|
||
for binding `=' exp `,' exp [`,' exp] do block end |
|
||
for bindinglist in explist do block end |
|
||
function funcname funcbody |
|
||
local function Name funcbody |
|
||
local bindinglist [`=' explist] |
|
||
[export] type Name [`<' GenericTypeList `>'] `=' typeannotation
|
||
|
||
laststat ::= return [explist] | break | continue
|
||
|
||
funcname ::= Name {`.' Name} [`:' Name]
|
||
funcbody ::= `(' [parlist] `)' [`:' ReturnType] block end
|
||
parlist ::= bindinglist [`,' `...'] | `...'
|
||
explist ::= {exp `,'} exp
|
||
namelist ::= Name {`,' Name}
|
||
|
||
binding ::= Name [`:' typeannotation]
|
||
bindinglist ::= (binding | `...') [`,' bindinglist]
|
||
|
||
subexpr ::= (asexp | unop subexpr) { binop subexpr }
|
||
prefixexp ::= NAME | '(' expr ')'
|
||
primaryexp ::= prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs }
|
||
asexp ::= simpleexp [`::' typeannotation]
|
||
simpleexp ::= NUMBER | STRING | NIL | true | false | ... | constructor | FUNCTION body | primaryexp
|
||
args ::= `(' [explist] `)' | tableconstructor | String
|
||
|
||
compoundop :: `+=' | `-=' | `*=' | `/=' | `%=' | `^=' | `..='
|
||
binop ::= `+' | `-' | `*' | `/' | `^' | `%' | `..' | `<' | `<=' | `>' | `>=' | `==' | `~=' | and | or
|
||
unop ::= `-' | not | `#´
|
||
|
||
tableconstructor ::= `{' [fieldlist] `}'
|
||
fieldlist ::= field {fieldsep field} [fieldsep]
|
||
field ::= `[' exp `]' `=' exp | Name `=' exp | exp
|
||
fieldsep ::= `,' | `;'
|
||
|
||
typeannotation ::=
|
||
nil |
|
||
Name[`.' Name] [`<' namelist `>'] |
|
||
`{' [PropList] `}' |
|
||
`(' [TypeList] `)' `->` ReturnType
|
||
`typeof` typeannotation
|
||
|
||
typeannotation ::= nil | Name[`.' Name] [ `<' typeannotation [`,' ...] `>' ] | `typeof' `(' expr `)' | `{' [PropList] `}' | [`<' GenericTypeList `>'] `(' [TypeList] `)' `->` ReturnType
|
||
|
||
GenericTypeList ::= NAME [`...'] {`,' NAME}
|
||
TypeList ::= TypeAnnotation [`,' TypeList] | ...TypeAnnotation
|
||
ReturnType ::= TypeAnnotation | `(' TypeList `)'
|
||
TableIndexer ::= `[' TypeAnnotation `]' `:' TypeAnnotation
|
||
TableProp ::= Name `:' TypeAnnotation
|
||
TablePropOrIndexer ::= TableProp | TableIndexer
|
||
PropList ::= TablePropOrIndexer {fieldsep TablePropOrIndexer} [fieldsep]
|
||
TableTypeAnnotation ::= `{' PropList `}'
|
||
FunctionTypeAnnotation ::= [`<' GenericTypeList `>'] `(' [TypeList] `)' `->` ReturnType
|
||
|
||
```
|