Created
February 11, 2021 05:35
-
-
Save sampersand/34cebd3fa59e7bb489b8b9fee2d3e3df to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
grammar Syntax { | |
rule TOP { <expr> .* } | |
rule expr { <.ws> [<literal> | <function>] } | |
token ws { [ <[(){}[\]:\s\n]> | '#' \N* \n? ]* } | |
proto token literal {*} | |
token literal:sym<identifier> { <[a..z_]> <[a..z0..9_]>* } | |
token literal:sym<number> { \d+ } | |
token literal:sym<string> { '"' .*? '"' | "'" .*? "'" } | |
token literal:sym<null> { 'N' <.kw-rest> } | |
token literal:sym<boolean> { (<[TF]>) <.kw-rest> } | |
token kw-rest { <[A..Z]>* } | |
proto rule function {*} | |
rule function:<nullary> { <nullary> } | |
proto token nullary {*} | |
token nullary:sym<prompt> { 'P' <.kw-rest> } | |
token nullary:sym<random> { 'R' <.kw-rest> } | |
rule function:<unary> { <unary> <expr> } | |
proto token unary {*} | |
token unary:sym<eval> { 'E' <.kw-rest> } | |
token unary:sym<block> { 'B' <.kw-rest> } | |
token unary:sym<call> { 'C' <.kw-rest> } | |
token unary:sym<system> { '`' } | |
token unary:sym<quit> { 'Q' <.kw-rest> } | |
token unary:sym<not> { '!' } | |
token unary:sym<length> { 'L' <.kw-rest> } | |
token unary:sym<output> { 'O' <.kw-rest> } | |
rule function:<binary> { (<binary>) (<expr>) (<expr>) } | |
proto token binary {*} | |
token binary:sym<+> { <sym> } | |
token binary:sym<-> { <sym> } | |
token binary:sym<*> { <sym> } | |
token binary:sym</> { <sym> } | |
token binary:sym<%> { <sym> } | |
token binary:sym<^> { <sym> } | |
token binary:sym<?> { <sym> } | |
token binary:sym<&> { <sym> } | |
token binary:sym<|> { <sym> } | |
token binary:sym<;> { <sym> } | |
token binary:sym<=> { <sym> } | |
token binary:sym<< < >> { <sym> } | |
token binary:sym<< > >> { <sym> } | |
token binary:sym<while> { 'W' <.kw-rest> } | |
rule function:<ternary> { <ternary> <expr> <expr> <expr> } | |
proto token ternary {*} | |
token ternary:sym<if> { 'I' <.kw-rest> } | |
token ternary:sym<get> { 'G' <.kw-rest> } | |
rule function:<quatenary> { <quatenary> <expr> <expr> <expr> <expr> } | |
proto token quatenary {*} | |
token quatenary:sym<set> { 'S' <.kw-rest> } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment