| Server IP : 170.10.162.208 / Your IP : 216.73.216.38 Web Server : LiteSpeed System : Linux altar19.supremepanel19.com 4.18.0-553.69.1.lve.el8.x86_64 #1 SMP Wed Aug 13 19:53:59 UTC 2025 x86_64 User : deltahospital ( 1806) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /usr/local/share/perl5/Math/Calc/Units/ |
Upload File : |
# To process: yapp -s -m Math::Calc::Units::Grammar Grammar.y
%{
use Math::Calc::Units::Compute qw(plus minus mult divide power construct);
%}
# Lowest
%nonassoc BARE_UNIT
%nonassoc NUMBER CONSTRUCT
%left '+' '-'
%left '*' '/'
%left WORD
%left '**'
# Highest
%%
START : expr
| '#' unit
;
expr : expr '+' expr { return plus($_[1], $_[3]); }
| expr '-' expr { return minus($_[1], $_[3]); }
| expr '*' expr { return mult($_[1], $_[3]); }
| expr '/' expr { return divide($_[1], $_[3]); }
| expr '**' expr { return power($_[1], $_[3]); }
| '(' expr ')' { return $_[2]; }
| value { return $_[1]; }
| expr unit { return mult($_[1], [ 1, $_[2] ]); }
;
value : NUMBER unit
{ return [ $_[1] => $_[2] ] }
| unit %prec BARE_UNIT
{ return [ 1 => $_[1] ] }
| NUMBER { return [ $_[1] => {} ] }
| '-' NUMBER { return [ -$_[2] => {} ] }
| '@' NUMBER { return [ $_[2] => { 'timestamp' => 1 } ] }
| CONSTRUCT { return construct($_[1]) }
;
unit : WORD { return { $_[1] => 1 } }
| WORD WORD { my $u = {}; $u->{$_[1]}++; $u->{$_[2]}++; return $u; }
;
%%