mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-25 23:46:04 +08:00
[papgets] add exponentiation operator to papgets
This commit is contained in:
@@ -54,6 +54,13 @@
|
||||
<property name="color" value="white"/>
|
||||
</papget>
|
||||
|
||||
<papget type="expression" display="text" x="600" y="422">
|
||||
<property name="expr" value="NAVIGATION.dist2_home ** 0.5"/>
|
||||
<property name="size" value="15."/>
|
||||
<property name="format" value="HOME dist: %.1fm"/>
|
||||
<property name="color" value="white"/>
|
||||
</papget>
|
||||
|
||||
<papget type="variable_setting" display="button" x="10" y="250">
|
||||
<property name="variable" value="launch"/>
|
||||
<property name="value" value="1."/>
|
||||
|
||||
@@ -50,6 +50,7 @@ rule token = parse
|
||||
| "+" { PLUS }
|
||||
| "=" { ASSIGN }
|
||||
| "-" { MINUS }
|
||||
| "**" { EXPO }
|
||||
| "*" { MULT }
|
||||
| "/" { DIV }
|
||||
| "!" { NOT }
|
||||
|
||||
@@ -30,12 +30,12 @@ open Expr_syntax
|
||||
%token DOT COMMA SEMICOLON LP RP LC RC LB RB DEREF AND COLON OR
|
||||
%token EQ GT ASSIGN GEQ NOT
|
||||
%token PLUS MINUS
|
||||
%token MULT DIV MOD
|
||||
%token MULT DIV MOD EXPO
|
||||
|
||||
%left AND OR /* lowest precedence */
|
||||
%left EQ GT ASSIGN GEQ
|
||||
%left PLUS MINUS
|
||||
%left MULT DIV MOD
|
||||
%left MULT DIV MOD EXPO
|
||||
%nonassoc NOT
|
||||
%nonassoc UMINUS
|
||||
%left DEREF /* highest precedence */
|
||||
@@ -56,6 +56,7 @@ expression:
|
||||
| expression MULT expression { CallOperator ("*",[$1;$3]) }
|
||||
| expression DIV expression { CallOperator ("/",[$1;$3]) }
|
||||
| expression MOD expression { CallOperator ("%",[$1;$3]) }
|
||||
| expression EXPO expression { CallOperator ("**",[$1;$3]) }
|
||||
| MINUS expression %prec UMINUS { CallOperator ("-",[$2]) }
|
||||
| NOT expression { CallOperator ("!",[$2]) }
|
||||
| INT { Int $1 }
|
||||
|
||||
@@ -102,10 +102,11 @@ let hash_vars = fun expr ->
|
||||
let wrap = fun f ->
|
||||
fun x y -> string_of_float (f (float_of_string x) (float_of_string y))
|
||||
let eval_bin_op = function
|
||||
"*" -> wrap ( *. )
|
||||
| "*" -> wrap ( *. )
|
||||
| "+" -> wrap ( +. )
|
||||
| "-" -> wrap ( -. )
|
||||
| "/" -> wrap ( /. )
|
||||
| "**" -> wrap ( ** )
|
||||
| op -> failwith (sprintf "Papget.eval_expr '%s'" op)
|
||||
|
||||
let eval_expr = fun (extra_functions:(string * (string list -> string)) list) h e ->
|
||||
|
||||
Reference in New Issue
Block a user