60 lines
1.2 KiB
YAML
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 ]; |