sunflower/src/sunflower.syntax

60 lines
1.2 KiB
YAML

identifier = [A-Za-z_][A-Za-z0-9-_]*; {single-string, no-layout}
string = "\"" [^\"]* "\""; {single-string, no-layout}
char = "'" [^\'] "'"; {single-string, no-layout}
int = [0-9]+; {single-string, no-layout}
bool:
true = "true";
false = "false";
const_value:
int = int;
bool = bool;
string = string;
char = char;
call = identifier "(" delimited(expression, ",", *) ")";
value:
const = const_value;
call = call;
identifier = identifier;
parens = "(" expression ")";
equality:
equal = inequality "==" expression;
not_equal = inequality "!=" expression;
inequality = inequality;
inequality:
less_than = plus "<" expression;
less_than_or_equal = plus "<=" expression;
greater_than = plus ">" expression;
greater_than_or_equal = plus ">=" expression;
plus = plus;
expression:
equality = equality;
plus:
plus = times "+" times;
minus = times "-" times;
times = times;
times:
times = value "*" expression;
divide = value "/" expression;
value = value;
statement:
expression = expression ";";
let = "let" identifier "=" expression ";";
program = statement*;
start at program;
layout = [\r\n\t ];