Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Пишем свой интерпретатор языка BASIC - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Меню и список http://www.cyberforum.ru/cpp-beginners/thread41194.html
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились:...
C++ Здравствуйте! Не могу поместить class в один файл с программой. file.hpp #include "Cat.hpp" // здесь классы "2)" Cat::Cat(int initialAge) { itsAge = initialAge; } Cat::~Cat() { http://www.cyberforum.ru/cpp-beginners/thread41186.html
Массивы строк C++
Привет всем! Задан массив строк. Как узнать который символ встечаетса найбольшое количество раз в етом массиве?
C++ вывод на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер
Please, help me!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо...
C++ Округление дробного числа до целого в большую сторону. http://www.cyberforum.ru/cpp-beginners/thread41139.html
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) ...
C++ Код из Delphi в C++ Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; ... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17950 / 6181 / 413
Регистрация: 30.03.2009
Сообщений: 16,972
Записей в блоге: 27
21.12.2009, 10:01
По поводу функций. Твой вариант реализации - типичная затычка. Можешь его попробовать из тех же самый соображений - нужно испытать на себе неправильные варианты реализации.

То представление, которое мы имеем сейчас формально не совсем является представлением исходной программы. Statement'ы отражают операторы языка и на самом деле отражают языковые конструкции. Variable'ы точно так же отражают переменные языка. НО. Внутри Variable'ов у нас содержится Value, которое НЕ является конструкцией языка, а является run-time свойством программы. Таким образом сейчас в наше представление замешаны сразу две вещи: отображение исходной программы и отображение run-time состояния программы (которое в нашем случае является значением всех переменных).

Пока мы имели простой язык без функций, технически "два в одном" выглядело просто и без сложных зависимостей компонент одна от другой. Когда появляются функции, то run-time состояние (т.е. значения всех переменных) больше не могут однозначно коррелировать с представлением программы, поскольку для каждой функции отображение программы только одно, а run-time состояний может быть несколько (по количеству активаций процедуры в стеке процедурных вызовов). Поэтому представление нужно выбирать таким образом, чтобы на один экземпляр представления процедуры легко привинчивалось несколько состояний переменных. Т.е. в представлении надо аккуратно отделить отображение языковых конструкций (statement'ы, expression'ы, variable'ы) от run-time сосотояния (Value'ы). Другими словами надо ввести некое понятие "память". И из каждой Variable должна торчать ссылка на Value, а вот сама Value должна храниться в "памяти". При этом к моменту запуска (начало фазы интерпретации) программы, в "памяти" уже расположены значения глобальных переменных. В "памяти" так же создаётся некое подобие стека. При входе в процедуру в этом стеке мы выделяем окно под количество переменных в процедуре и у всех Variable'ов процедуры настраиваем Value на этот стек.

В конечном итоге представление вроде бы как остаётся одно, но в нём меняется механизм соответствия Variable и Value. Главное правильно отделить мух от котлет: представление программы отдельно, run-time состояние отдельно
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru