428 } |
428 } |
429 |
429 |
430 void *visit(mul_expression_c *symbol) { |
430 void *visit(mul_expression_c *symbol) { |
431 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
431 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
432 symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this)); |
432 symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this)); |
433 if (typeid(*left_type) == typeid(time_type_name_c) && is_integer_type(right_type)) {return (void *)&time_type_name;} |
433 if (typeid(*left_type) == typeid(time_type_name_c) && is_num_type(right_type)) { |
434 if (typeid(*left_type) == typeid(time_type_name_c) && is_real_type(right_type)) {return (void *)&time_type_name;} |
434 return (void *)&time_type_name; |
|
435 } |
435 return compute_numeric_expression(left_type, right_type); |
436 return compute_numeric_expression(left_type, right_type); |
436 } |
437 } |
437 |
438 |
438 void *visit(div_expression_c *symbol) { |
439 void *visit(div_expression_c *symbol) { |
439 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
440 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
440 symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this)); |
441 symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this)); |
441 if (typeid(*left_type) == typeid(time_type_name_c) && is_integer_type(right_type)) {return (void *)&time_type_name;} |
442 if (typeid(*left_type) == typeid(time_type_name_c) && is_num_type(right_type)){ |
442 if (typeid(*left_type) == typeid(time_type_name_c) && is_real_type(right_type)) {return (void *)&time_type_name;} |
443 return (void *)&time_type_name; |
|
444 } |
443 return compute_numeric_expression(left_type, right_type); |
445 return compute_numeric_expression(left_type, right_type); |
444 } |
446 } |
445 |
447 |
446 void *visit(mod_expression_c *symbol) { |
448 void *visit(mod_expression_c *symbol) { |
447 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
449 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
450 } |
452 } |
451 |
453 |
452 void *visit(power_expression_c *symbol) { |
454 void *visit(power_expression_c *symbol) { |
453 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
455 symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this)); |
454 symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this)); |
456 symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this)); |
455 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(sint_type_name_c)) {return (void *)left_type;} |
457 if (is_real_type(left_type) && is_num_type(right_type)) { |
456 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(int_type_name_c)) {return (void *)left_type;} |
458 return (void *)left_type; |
457 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(dint_type_name_c)) {return (void *)left_type;} |
459 } |
458 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(lint_type_name_c)) {return (void *)left_type;} |
|
459 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(usint_type_name_c)) {return (void *)left_type;} |
|
460 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(uint_type_name_c)) {return (void *)left_type;} |
|
461 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(udint_type_name_c)) {return (void *)left_type;} |
|
462 if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(ulint_type_name_c)) {return (void *)left_type;} |
|
463 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(sint_type_name_c)) {return (void *)left_type;} |
|
464 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(int_type_name_c)) {return (void *)left_type;} |
|
465 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(dint_type_name_c)) {return (void *)left_type;} |
|
466 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(lint_type_name_c)) {return (void *)left_type;} |
|
467 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(usint_type_name_c)) {return (void *)left_type;} |
|
468 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(uint_type_name_c)) {return (void *)left_type;} |
|
469 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(udint_type_name_c)) {return (void *)left_type;} |
|
470 if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(ulint_type_name_c)) {return (void *)left_type;} |
|
471 ERROR; |
460 ERROR; |
472 return NULL; |
461 return NULL; |
473 } |
462 } |
474 |
463 |
475 void *visit(neg_expression_c *symbol) { |
464 void *visit(neg_expression_c *symbol) { |
476 symbol_c *exp_type = base_type((symbol_c *)symbol->exp->accept(*this)); |
465 symbol_c *exp_type = base_type((symbol_c *)symbol->exp->accept(*this)); |
477 if (typeid(*exp_type) == typeid(sint_type_name_c)) {return (void *)exp_type;} |
466 if (is_num_type(exp_type) || typeid(*exp_type) == typeid(time_type_name_c)){ |
478 if (typeid(*exp_type) == typeid(int_type_name_c)) {return (void *)exp_type;} |
467 return (void *)exp_type; |
479 if (typeid(*exp_type) == typeid(dint_type_name_c)) {return (void *)exp_type;} |
468 } |
480 if (typeid(*exp_type) == typeid(lint_type_name_c)) {return (void *)exp_type;} |
|
481 if (typeid(*exp_type) == typeid(usint_type_name_c)) {return (void *)exp_type;} |
|
482 if (typeid(*exp_type) == typeid(uint_type_name_c)) {return (void *)exp_type;} |
|
483 if (typeid(*exp_type) == typeid(udint_type_name_c)) {return (void *)exp_type;} |
|
484 if (typeid(*exp_type) == typeid(ulint_type_name_c)) {return (void *)exp_type;} |
|
485 if (typeid(*exp_type) == typeid(real_type_name_c)) {return (void *)exp_type;} |
|
486 if (typeid(*exp_type) == typeid(lreal_type_name_c)) {return (void *)exp_type;} |
|
487 if (typeid(*exp_type) == typeid(time_type_name_c)) {return (void *)exp_type;} |
|
488 ERROR; |
469 ERROR; |
489 return NULL; |
470 return NULL; |
490 } |
471 } |
491 |
472 |
492 void *visit(not_expression_c *symbol) { |
473 void *visit(not_expression_c *symbol) { |