четверг, 28 января 2021 г.

Сделал функции exec и calc_hash

 Занялся переделкой, и сделал функции exec и calc_hash. Снова моя программа умеет вычислять хэши строк.

Вычисление хэшей строк с помощью функций calc_hash и exec

Как ни странно, но удаление стека сильно упростило код. Я теперь описываю параметры функции, читаю их из консоли согласно описанию, а затем вызываю функцию, передавая ей эти параметры как массив значений класса Value.

В коде функции просто беру их из этого массива, и всё это очень нативно для C++, а потому очень компактно.

Теперь думаю, не добавить ли стек. Это было бы удобно. Если функция возвращает значение, и пользователь не кладёт её в переменную, то результат можно было бы помещать на стек.

Но такое поведение получается неправильным. Если нас не интересует результат вызова функции, то при чём здесь стек?

Ок, надо добавить переменные, чтобы помещать результат в переменную.

Честно говоря, я несколько удивлён: за день сделать exec и calc_hash - это неплохой старт. Конвертер токена строки я просто взял из предыдущей версии, поскольку нет смысла снова всё это писать с нуля.

В этой версии получается другой алгоритм обработки литералов. Теперь мне надо попробовать сконвертировать токен в литерал с помощью функции, определённой в классе параметра, и если не получилось, то просто сконвертировать его в его класс, а затем сконвертировать значение в класс параметра. 

То, что нужно, на самом деле - в случае со стеком возникала проблема, как конвертировать пользовательские литералы? Перебирать все доступные классы? Теперь алгоритм простой и чёткий, поскольку задан параметр типа.

С параметрами функций у меня появились и указатели. Поскольку например функция  convert_token возвращает не только результат конверсии, но и признак того, насколько конверсия прошла успешно. А это две переменных; поэтому одна из них возвращается как результат вызова функции, а другая изменяется через указатель, передаваемый как параметр.

В принципе что-то вроде указателей (ссылки) у меня было и в четвёртой версии. Поскольку иначе было не сделать операцию инкремента.


Комментариев нет: