update grammar
This commit is contained in:
parent
0f27e9965a
commit
ad64813a67
1 changed files with 17 additions and 15 deletions
|
@ -1,8 +1,10 @@
|
||||||
; Rutile's grammar formal definition in ABNF
|
; Rutile's grammar formal definition in ABNF
|
||||||
; NOTE: terminal strings are case sensitive here
|
; NOTES:
|
||||||
|
; - terminal strings are by default case sensitive
|
||||||
|
; - alternatives are ordered
|
||||||
|
|
||||||
function-kind = "proc" / "iter"
|
function-kind = "proc" / "iter"
|
||||||
proc-decl = function-kind "(" [proc-decl-args] ")" [ident] *stmt 'end'
|
proc-decl = function-kind "(" [proc-decl-args] ")" ":" [ident] *stmt 'end'
|
||||||
proc-decl-args = symbol-type-pair *("," symbol-type-pair)
|
proc-decl-args = symbol-type-pair *("," symbol-type-pair)
|
||||||
symbol-type-pair = ident ":" ident
|
symbol-type-pair = ident ":" ident
|
||||||
|
|
||||||
|
@ -15,9 +17,9 @@ funcargs = expr-list
|
||||||
array-literal = "[" expr-list "]"
|
array-literal = "[" expr-list "]"
|
||||||
|
|
||||||
expr-list = expr *("," expr) [","] ; Allows a trailling comma
|
expr-list = expr *("," expr) [","] ; Allows a trailling comma
|
||||||
expr = number
|
expr = number
|
||||||
expr =/ array-literal
|
/ array-literal
|
||||||
expr =/ function-call
|
/ function-call
|
||||||
|
|
||||||
pragma = "#" "[" "]" ; TODO
|
pragma = "#" "[" "]" ; TODO
|
||||||
decorated-decl = pragma (proc-decl / symbol-decl)
|
decorated-decl = pragma (proc-decl / symbol-decl)
|
||||||
|
@ -29,24 +31,24 @@ break-expr = "break" *expr
|
||||||
return-stmt = "return" *expr
|
return-stmt = "return" *expr
|
||||||
yield-stmt = "yield" *expr
|
yield-stmt = "yield" *expr
|
||||||
loop-control = "next" / break-expr
|
loop-control = "next" / break-expr
|
||||||
stmt = proc-decl
|
stmt = proc-decl
|
||||||
stmt =/ expr
|
/ expr
|
||||||
stmt =/ loop-control
|
/ loop-control
|
||||||
stmt =/ if-expr
|
/ if-expr
|
||||||
stmt =/ while-stmt
|
/ while-stmt
|
||||||
stmt =/ return-stmt
|
/ return-stmt
|
||||||
stmt =/ yield-stmt
|
/ yield-stmt
|
||||||
|
|
||||||
ident = (ALPHA / "_") *(ALPHA / DIGIT / "_" / "?" / "!")
|
ident = (ALPHA / "_") *(ALPHA / DIGIT / "_" / "?" / "!")
|
||||||
; Identifier accounting for namespacing: std:io.print, aaa:bbb:ccc
|
; Identifier accounting for namespacing: std:io.print, aaa:bbb:ccc
|
||||||
ident-qualified = (ALPHA / "_") *(ALPHA / DIGIT / "_" / "?" / "!" / ":" / ".")
|
ident-qualified = (ALPHA / "_") *(ALPHA / DIGIT / "_" / "?" / "!" / ":" / ".")
|
||||||
|
|
||||||
|
OCTDIGIT = %x30-37
|
||||||
number = 1*DIGIT ; Decimal
|
number = 1*DIGIT ; Decimal
|
||||||
/ "0b" 1*("0" / "1") ; Binary
|
/ "0b" 1*("0" / "1") ; Binary
|
||||||
/ "0o" 1*(0-8) ; Octal
|
/ "0o" 1*OCTDIGIT ; Octal
|
||||||
/ "0x" 1*HEXDIGIT ; Hexadecimal
|
/ "0x" 1*HEXDIGIT ; Hexadecimal
|
||||||
|
|
||||||
byte = %x00-FF
|
|
||||||
escape = "\" ("\" / DQUOTE / "0" / "a" / "b" / "n" / "r" / "t" / ("x" 1*2HEXDIGIT))
|
escape = "\" ("\" / DQUOTE / "0" / "a" / "b" / "n" / "r" / "t" / ("x" 1*2HEXDIGIT))
|
||||||
character = byte / escape
|
character = OCTET / escape
|
||||||
string-literal = DQUOTE *character DQUOTE
|
string-literal = DQUOTE *character DQUOTE
|
||||||
|
|
Loading…
Add table
Reference in a new issue