aboutsummaryrefslogblamecommitdiffstats
path: root/calc-example/calc.syntax
blob: 27c47a1132c5ad5bf8d5b9636906b6542c281d48 (plain) (tree)
1
2
3
4
5
6
7
8
                                  
                                                     
 
                                         
 
 
                           
 



                                           
 
 
                          
 
                                                         
 
                                                 
 
                                                                                    
 
                               
 
                       
 


                                                          
_WHITESPACE   = " " | "\t" | " ";
_COMMENT      = "(*", {!"*)", <0, 0xFF>}, ("*)" | -);

_             = {_WHITESPACE | _COMMENT};


DIGIT         = <"0", "9">;

ADD           = _, ("+"),             _;
SUB           = _, ("-" | "−"),       _;
MUL           = _, ("*" | "⋅" | "×"), _;
DIV           = _, ("/" | "∕" | "÷"), _;


sign          = ADD | SUB;

unsigned      = DIGIT, {DIGIT | _WHITESPACE | "_" | "'"};

_number       = unsigned | "(", _expr, (")" | -);

number        = _number, {_, _number}; (* optionally with implicit multiplication *)

value         = [sign], number;

_expr         = hyper1;


hyper1        = _, hyper2, {(ADD | SUB), (hyper2 | -)}, _;
hyper2        = _, value, {(MUL | DIV), (value | -)}, _;