Here's the complete EBNF grammar of Asha.
document = {(include | expression | comment) boe} | ε;
comment = com, {char};
include = inclusion [comment];
inclusion = library-include | file-include;
library-include = use filename;
file-include = inc filename;
filename = filechar,{filechar};
expression = exp1 [if-statement] [comment];
exp1 = exp2 {arrow exp2};
exp2 = exp3 {eqop exp3};
exp3 = exp4 {or exp4};
exp4 = exp5 {addop};
exp5 = exp6 {mulop exp6};
exp6 = exp7 {expop exp7};
exp7 = function | parentheses | value;
function = var whitestuff exp4 {exp4};
parentheses = lparen whitestuff exp4 rparen whitestuff;
if-statement = if ifexp;
ifexp = ifexp2 {ifandor ifexp2};
ifexp2 = exp4 eqop exp4;
value = whitestuff value2 whitestuff;
value2 = var | number;
var = generic | global;
generic = lochar,{namingchar};
global = [inversion],upchar,{namingchar};
number = [sign],{digit},[decimal,digit,{digit}];
whitestuff = {whitespace} [comment] [break whitespace {whitespace}];
addop = plus | minus;
arrow = '->';
boe = break | ε
break = ?line-break characters?;
char = ?all visible characters?;
com = '#';
eqop = '=' | "!=" | '&st;' | '>' | "&st;=" | ">=";
expop = '^';
filechar = ?a valid character in a filename?;
ifandor = "/\" | "\/";
inc = "include";
inversion = ''';
lparen = '(';
minus = '-';
or = '|';
plus = '+';
rparen = ')';
sign = minus;
undefined = '?';
use = "use";
whitespace = ?white space characters?;