Skip to content

Instantly share code, notes, and snippets.

@thedeemon
Created March 24, 2021 12:19
Show Gist options
  • Save thedeemon/52b10f7a7278e6939414a742eef0efc4 to your computer and use it in GitHub Desktop.
Save thedeemon/52b10f7a7278e6939414a742eef0efc4 to your computer and use it in GitHub Desktop.
#lang brag
s-prog: s-stmt (/";" s-stmt)*
@s-stmt: s-assn | s-fundef | s-expr
s-funcall: NAME /"(" [s-expr (/"," s-expr)*] /")"
s-fundef: NAME /"(" [NAME (/"," NAME)* ] /")" "=>" s-expr
s-block: /"{" [s-stmt (/";" s-stmt)* /"in"] s-expr /"}"
s-assn: NAME /"=" s-expr
s-expr: s-compterm | if
if: /"if" s-expr /"then" s-expr /"else" s-expr
s-compterm: s-term [("<" | "==") s-term]
s-term: [s-term ("+" | "-")] s-summand
s-summand: [s-summand ("*" | "/")] s-factor
@s-factor: s-funcall | s-block | NUMBER | s-name | "-" s-summand | s-parens
@s-parens: /"(" s-expr /")"
s-name: NAME
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment