demo details
parent
e0944fea24
commit
ad48faa13d
@ -1,25 +1,31 @@
|
|||||||
#lang brag
|
#lang brag
|
||||||
|
|
||||||
top : @statement*
|
top : @statement*
|
||||||
statement : (var | expr | return) /";" | if | while
|
statement : (var | expr | return | defun) /";" | if-else | while
|
||||||
var : /"var" id /"=" expr
|
var : /"var" varname /"=" expr
|
||||||
@expr : comparison
|
@expr : reassignment
|
||||||
comparison : [comparison ("!=" | "==")] add-or-sub
|
reassignment : ID [("+=" | "-=") expr] | ternary
|
||||||
|
ternary : expr /"?" expr /":" expr | logical-or
|
||||||
|
logical-or : [logical-or "||"] logical-and
|
||||||
|
logical-and : [logical-and "&&"] equal-or-not
|
||||||
|
equal-or-not : [equal-or-not ("!=" | "==")] gt-or-lt
|
||||||
|
gt-or-lt : [gt-or-lt ("<" | "<=" | ">" | ">=")] add-or-sub
|
||||||
add-or-sub : [add-or-sub ("+" | "-")] mult-or-div
|
add-or-sub : [add-or-sub ("+" | "-")] mult-or-div
|
||||||
mult-or-div : [mult-or-div ("*" | "/")] value
|
mult-or-div : [mult-or-div ("*" | "/")] value
|
||||||
@value : id | NUMBER | STRING | object
|
@value : NUMBER | STRING | object
|
||||||
| fun | app | increment
|
| fun | app | increment | varname | /"(" expr /")"
|
||||||
increment : id /"++"
|
increment : ("++" | "--") varname | varname ("++" | "--")
|
||||||
object : /"{" @kvs /"}"
|
object : /"{" @kvs /"}"
|
||||||
kvs : [kv (/"," kv)*]
|
kvs : [kv (/"," kv)*]
|
||||||
/kv : expr /":" expr
|
/kv : expr /":" expr
|
||||||
fun : /"function" /"(" ids /")" @block
|
defun : /"function" ID /"(" varnames /")" @block
|
||||||
/ids : [id (/"," id)*]
|
fun : /"function" /"(" varnames /")" @block
|
||||||
@id : ID | deref
|
/varnames : [varname (/"," varname)*]
|
||||||
|
@varname : ID | deref
|
||||||
deref : DEREF
|
deref : DEREF
|
||||||
block : /"{" @statement* /"}"
|
block : /"{" @statement* /"}"
|
||||||
return : /"return" expr
|
return : /"return" expr
|
||||||
app : id /"(" @exprs /")"
|
app : varname /"(" @exprs /")"
|
||||||
exprs : [expr (/"," expr)*]
|
exprs : [expr (/"," expr)*]
|
||||||
if : /"if" /"(" expr /")" @block ["else" @block]
|
if-else : /"if" /"(" expr /")" @block ["else" @block]
|
||||||
while : /"while" /"(" expr /")" @block
|
while : /"while" /"(" expr /")" @block
|
Loading…
Reference in New Issue