Программирование >>  Формирование пользовательского контейнера 

1 ... 150 151 152 [ 153 ] 154 155 156


более быстрое целочисленное сравнение. В целом, преобразование кода во внутренний формат - единственное наиболее важное изменение в Mini С++, направленное на повышение его эффективности. Выигрыш в скорости будет огромным.

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

Как уже отмечалось ранее, одно из ограничений Mini С++ по сравнению с полным С++ состоит в том, что формирующие результат части управляющих операторов, таких как 1£, должны быть блоками кода, заключенными в фигурные скобки. В результате функция find eob(), которая ищет конец блока кода после выполнения управляющего оператора, существенно упрощается. Ей нужно только найти закрывающую фигурную скобку, которая соответствует скобке в начале блока. Интересным упражнением может стать попытка избавиться от этого офаничения.

Расширение Mini С++

Есть два основных направления, ведущих к улучшению и расширению возможностей интерпретатора Mini С++: добавление элементов языка С++ и вспомогательных функциональных возможностей. Некоторые из этих дополнений кратко обсуждаются в следующих разделах.

Добавление новых элементов С++

Есть две основных категории элементов языка, которые можно добавить в Mini С++. Первая включает дополнительные операторы перехода, такие как goto и continue. ВЫ можете также добавить поддержку метки default оператора switch. Если вы усвоили, как Mini С++ интерпретирует другие операторы, у вас не должно возникнуть фудностей с реализацией перечисленных элементов. Если что-то не заработает с первого раза, попробуйте найти ошибку, отображая содержимое лексем по мере их обработки. Вторая категория элементов, которые могут быть добавлены, - это дополнительные типы данных. В Mini С++ уже включены заготовки для дополнительных типов данных. Так, например, структура var type уже содержит поле, отведенное под тип переменной. Для того чтобы добавить встроенные типы данных (например, float, double и long), нужно просто увеличить длину поля для значения переменной до размера самого большого элемента данных, который вы планируете использовать.



Добавление классов представляет собой более сложный процесс. Во-первых, вам потребуется найти способ создания объектов. Для этого нужно выделить фрагмент памяти, достаточный для хранения данных-членов класса, и сохранить ссылку на него в специальном поле, которое придется добавить в var type. Вам также будет нужно позаботиться о реализации уровней доступа public и private.

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

Для обеспечения поддержки различных типов возвращаемых значений функций нужно использовать поле ret type структуры func type. Это поле определяет тип данных, возвращаемых функцией. В приведенной версии Mini С++ это поле описано, но никак не используется.

Еще одно простое усовершенствование состоит в реализации поддержки директивы препроцессора #include. Она может быть легко обработана на стадии предварительного просмотра.

И последнее предложение: если вам нравится экспериментировать с элементами языков программирования, не бойтесь добавлять расширения, не существующие в стандартном С++. Например, вы легко можете вставить цикл foreach, подобный описанному в главе 4.

Добавление вспомогательных функциональных возможностей

Есть несколько интересных и полезных элементов, которые можно добавить в интерпретатор. Например, включить возможность трассировки, при которой каждая обрабатываемая лексема выводится на экран. Также можно добавить возможность вывода на экран содержимого каждой переменной в процессе выполнения программы. Кроме того, вы можете решить добавить интегрированный редактор, чтобы набирать и выполнять профамму с помошью одного приложения, а не использовать отдельный редактор для написания профамм на С++.



Предметный указатель

beginthreadex() 91, 122, 124 endthreadex() 91

abortO 363 abs() 364, 448 Adaptor 306 addfiighto 255

AI (Artificial intelligence) 245 allocateO 331, 332 allocator 307, 309 Allocator 306 annuityO 237

API (Application Programming

Interface) 89 assign var() 433 Assignment expression 364 Associative container 306 at() 341

atexitO 44, 53, 124 atoiO 212 atomO 392, 430 auto ptr class 23

backO 338

Background thread 85

bad alloc exception 61, 81 balance()241 Base class 17 beginO 339 Best solution 250 Binder 307, 344 Bounds checking 39 Breadth-first search 267 Bytecode 358 inteфreter 358

callO 420, 430 Callback function 111 cases 153 casesO 179, 181 Check box 217 Child thread 87 cin 447 clearO 340

CloseHandleO 99, 127 CloseThreadO 90

collectO 45, 47, 54, 60, 61, 64, 66,

67, 81, 83, 127, 146 constructO 332 Control panel 85 copyO 307 cout 445

CreateDialogO 110 CreateMutexO 99 CreateThreado 89, 90, 92



1 ... 150 151 152 [ 153 ] 154 155 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика