tree evaluate_unequal (tree t) { if (N(t)!=2) return evaluate_error ("bad unequal"); tree t1= evaluate (t[0]); tree t2= evaluate (t[1]); if (is_atomic (t1) && is_atomic (t2) && is_length (t1->label) && is_length (t2->label)) return as_string_bool (as_length (t1) != as_length (t2)); return as_string_bool (t1 != t2); }
tree evaluate_lesseq (tree t) { if (N(t)!=2) return evaluate_error ("bad less or equal"); tree t1= evaluate (t[0]); tree t2= evaluate (t[1]); if (is_compound (t1) || is_compound (t2)) return evaluate_error ("bad less or equal"); string s1= t1->label; string s2= t2->label; if (is_double (s1) && (is_double (s2))) return as_string_bool (as_double (s1) <= as_double (s2)); if (is_length (s1) && is_length (s2)) return as_string_bool (as_length (s1) <= as_length (s2)); return evaluate_error ("bad less or equal"); }
inline SI get_length (string var) { tree t= env [var]; return as_length (t); }