expanded class NUMBER_TOOLS

Features exported to INTERNALS_HANDLER

This class provides abstract creation functions for NUMBERs as well as some other useful tools for NUMBERs.

Because this class is expanded, one may simply declare some entity of type NUMBER_TOOLS to use those NUMBER tools. One may also inherit this class in order to use those tools as well.

Direct parents

non-conformant parents

ANY

Summary

exported features

Details

from_integer (n: INTEGER): NUMBER
from_integer_64 (n: INTEGER_64): NUMBER

Uses value n to create a new NUMBER.

ensure

  • Result.to_integer_64 = n

from_string (formula: STRING): NUMBER

Parse the contents of formula to create a new NUMBER. If some error occurs (like for example a division by zero), the Result is Void and the error report is left in the parser_buffer.

require

  • is_number(formula)

ensure

  • Result /= Void xor parser_buffer.last_error /= Void

from_input_stream (input: INPUT_STREAM): NUMBER

Create a number from a file or standard input

require

  • input.is_connected

ensure

  • Result /= Void xor parser_buffer.last_error /= Void

is_number (formula: STRING): BOOLEAN

Is the formula a correct notation to create a NUMBER ? Actually, any correct formula using a combination of litteral integer constants with + - * / () and ! is a correct notation to create a NUMBER. Traditional priority rules are used for operators and the ! character denote the factorial computation. Here is the BNF grammar used:

 E0 = E1 R1
 E1 = E2 R2
 E2 = E3 R3
 E3 = "+" E3 | "-" E3 | "(" E0 ")" | "constant"
 R1 = "+" E1 R1 | "-" E1 R1 | ^
 R2 = "*" E2 R2 | "/" E2 R2 | ^
 R3 = "!" | ^

require

  • not formula.is_empty

ensure

  • Result xor parser_buffer.last_error /= Void

parser_buffer: MINI_PARSER_BUFFER

This once function gives access to the unique parser_buffer to allow the memorization of the Current position and the memorization of the last error message.