Спонсоры сайта:

Наличие этой страницы в поиске?

Информеры ТИЦ и PR

  Yandex ТИЦ:  
   Google PR:  

Путешественникам, меломанам, бизнесменам, вебмастерам, новости.

Содержание | <<< | >>>

Усовершенствование интерпретатора Little C





Рассмотренный в этой главе интерпретатор Little С разрабатывался таким образом, чтобы его принцип действия был, по возможности, очевидным. При разработке интерпретатора преследовалась цель сделать его максимально легким для понимания. Другой целью было сделать его легко расширяемым. Поскольку преследовались именно эти цели, интерпретатор Little С не обладает значительным быстродействием или эффективностью. Однако базовая структура интерпретатора корректна, а скорость выполнения программ можно увеличить, пользуясь указаниями, приведенными в этом разделе.

Фактически во всех коммерческих интерпретаторах роль программы предварительного прохода значительно шире, чем в Little С. Интерпретируемый исходный текст программы преобразуется из формы ASCII, которая удобна программисту для чтения, во внутреннюю форму. В этой внутренней форме все, кроме заключенных в двойные кавычки строк и констант, преобразуется в лексемы, состоящие из одного числа, аналогично тому, как это делает Little С для зарезервированных слов. При работе интерпретатора Little С довольно часто сравниваются строки. Например, всякий раз при поиске переменной или функции выполняется несколько сравнений строк. Процедура сравнения строк занимает много времени, что конечно же значительно снижает быстродействие программы. Но если каждую лексему исходной программы преобразовать в целое число, то можно использовать намного более быстродействующую операцию сравнения целых чисел. Преобразование исходного текста программы во внутреннюю форму — единственное наиболее существенное изменение, повышающее эффективность Little С. Благодаря этому преобразованию повышение скорости будет весьма ощутимым.

Другой способ улучшения, полезный главным образом для интерпретации больших программ, — создание специальных процедур для поиска переменных и функций. Применяющийся метод поиска основан на последовательном просмотре имен переменных и программ. Такой просмотр занимает много времени, даже если имена переменных и программ преобразованы в целочисленные лексемы. Однако можно заменить этот метод поиска другим, более быстрым методом, используя, например, двоичное дерево или один из методов хэширования.

Как указывалось ранее, одним из ограничений Little С по сравнению с грамматикой полного С является требование заключать объекты некоторых операторов, таких как if, в фигурные скобки независимо от того, единственный это оператор или блок операторов. Это предусмотрено с целью существенного упрощения функции find_eob(), которая ищет конец блока после выполнения одного из управляющих операторов. Функция find_eob() попросту ищет закрывающуюся скобку, соответствующую скобке, открывающей блок. Устранение этого ограничения будет интересным упражнением для читателя. Для этого можно, например, усовершенствовать функцию find_eob() таким образом, чтобы она искала конец оператора, выражения или блока. Однако следует иметь в виду, что для операторов if, while, do-while и for потребуются различные подходы, если в них используется единственный оператор.


Содержание | <<< | >>>

C++ исходники. Все примеры - рабочие:

часы:

Dev C++ WinAPI Стрелочные часы Analog Clock

Dev C++ WinAPI Цифровые прозрачные часы. Текст на рабочем столе. Digital transparent clock. Text on desktop

Dev C++ OLE WinApi CALENDAR and DIGITAL CLOCK (15kb). Календарь и цифровые часы

Dev C++ OLE WinAPI Календарь и цифровые часы почти Vista SideBar всего 21kb

плееры:

Microsoft Visual C++ 2008 Direct Show DVD Mini Player 10.5kb

Dev C++ WinAPI Микро медиа плеер 3.5kb

Dev C++ WinAPI Мини медиа плеер 4.5kb

Dev C++ WinAPI Hint Всплывающая подсказка

Dev C++ WinAPI RECT - имитатор кнопки

Dev C++ WinAPI Заполнить ListBox

Dev C++ WinAPI Заполнить, редактировать, сохранить, загрузить ListBox (PlayList)

Dev C++ WinAPI Индикатор уровня

Dev C++ WinAPI MP3 Микро плеер Открыть с помощью...

Dev C++ WinAPI Своя кнопка

изображения:

Dev C++ GDI+ WinAPI Mini FotoResizer (16kb), изменяет размеры всех фото (JPG) до указанного размера в выбраной папке и её подпапках

Dev C++ WinAPI Сохранить BITMAP экрана, десктопа, окна, клиентской области.

Dev C++ WinAPI Изменить размер изображения BMP RESIZE. Загрузка изображений из ФАЙЛА, вывод на экран и сохранение в файл.

Dev C++ WinAPI Загрузка изображений из РЕСУРСОВ и вывод на экран.

Dev C++ GDI+ WinAPI. Преобразовать изображения из одного формата в другой (JPG в BMP, GIF, PNG и обратно ), используя дополнительные библиотеки GDI+. Загрузка изображений из файла и сохранение в файл.

Dev C++ GDI+ WinAPI масштабирование JPG RESIZE

Dev C++ OLE WinAPI. Преобразовать изображения из JPG в BMP, используя дополнительные библиотеки OLE. Загрузка изображений из РЕСУРСОВ и сохранение в файл.

Dev C++ OLE WinAPI преобразовать JPG в BMP, используя дополнительные библиотеки OLE. Загрузка изображений из ФАЙЛА и сохранение в файл.

Dev C++ OLE WinAPI масштабирование BMP RESIZE

разное:

Dev C++ WinAPI Dev C++ Преобразовать цвет точки экрана в HTML код

Dev C++ WinAPI NOTIFYICONDATA WS_EX_TOOLWINDOW Иконка в области уведомлений (notification area, tray, трей). Удалить с панели задач (taskbar).

Dev C++ WinAPI ShellExecute Создать ссылку на WEB сайт

Dev C++ WinAPI ShellExecute Создать окно со ссылкой на WEB сайт

Dev C++ WinAPI CreateProcess ShellExecute WinExec Запуск приложения из приложения

Dev C++ OLE WinAPI Создать регион Regions PopUp Меню Menu

Dev C++ FindFiles. Поиск файлов заданного типа (в примере *.JPG) в папке и её подпапках

библиотеки:

Скачать библиотеку GDI+ для Dev C++

Скачать справочнник с примерами языка C.