|
Программирование >> Формирование пользовательского контейнера
: Листинг 9.4. Заголовочный файл mccommon.h Общие объявления, используемые в parser.cpp, minicpp.cpp, или libcpp.cpp, а также в других добавляемых вами файлах. const int MAX T LEN = 128; максимальная длина лексемы const int MAX ID LEN =31; максимальная длина идентификатора const int PR0G SIZE = 10000; максимальный размер программы const int NUM PARAMS = 31; максимальное число параметров Перечислимый тип для типов лексем. enum tok types { UNDEFTT. DELIMITER. IDENTIFIER. NUMBER, KEYWORD. TEMP, STRING, BLOCK }; Перечислимый тип внутреннего представления лексем, enum token ireps { UNDEFTOK, ARG, CHAR, INT. SWITCH. CASE. IF, ELSE, FOR, DO, WHILE. BREAK. RETURN. COUT, CIN, END }; Перечислимый тип для двухсимвольных операций, таких как <=. enum double ops { LT=1, LE. GT. GE, EQ, NE, LS, RS, INC, DEC }; Константы, используемые для генерации if(*token != )) throw InterpExc(PAREN EXPECTED); return rand (); Для вставки других библиотечных функций по вашему выбору сначала введите имена и адреса их интерфейсных функций в массив intem.func (который объявлен в файле parser.cpp). Далее по аналогии с только что приведенными функциями создайте подходящие интерфейсные функции. И, наконец, добавьте их прототипы в файл mccommon.h. Заголовочный файл mccommon.h Все три исходных файла для интерпретатора Mini С++: minicpp.cpp, parser.cpp и libcpp.cpp, включают в себя заголовочный файл mccommon.h, приведенный в листинге 9.4.
I/ исключения при наличии синтаксических ошибок. Замечание: SYNTAX - общее сообщение об ошибке, используемое, когда нет более подходящего, enum errorjnsg { SYNTAX, NO EXP, NOT VAR, DUP VAR, DUP FUNC, SEMI EXPECTED, UNBAL 3RACES, FUNC UNDEF, TYPELEXPECTED, RET NOCALL, PAREN EXPECTED, WHILE EXPECTED, QUOTE EXPECTED, DIV BY ZERO, BRACE EXPECTED, COLON EXPECTED }; extern char *prog; текущая позиция в исходном коде extern char *p buf; указывает на начало буфера программы extern char token[MAX T LEN+1]; строковая версия лексемы extern tok types token type; содержит тип лексемы extern token ireps tok; внутреннее представление лексемы extern int ret value; значение, возвращаемое функцией extern bool breakfound; true, если обнаружен оператор break Класс-исключение для Mini С++, class InterpExc { error msg err; public: InterpExc(error msg e) { err = e; } error msg get err() { return err; ) Прототипы функций интерпретатора. void get parains () ; void get args(); void exec while(); void exec do(); void exec cout(); void exec cin(); void assign var(char *var naine, int value); bool load prograin(char *p, char * fname); int find var(char *s); void interpO; void func ret{); char find func(char *name); bool is var(char *s); token ireps find var type(char *s); Прототипы функций анализатора выражений. void eval e:ф(int &value); void eval e>pO(int &value); void eval eзфl(int &value); void eval exp2(int &value); void eval exp3(int &value); void eval eзф4 (int &value); void eval exp5(int &value); void atom (int &value); void sntx err{errorjnsg error); void putback(); bool isdelim(char c); token ireps look up(char *s); int find var(char *s); tok types get token(); int intemal func(char *s); bool is var(char *s); Прототипы функций Стандартной библиотеки , int call jgetchar(); int call putchar(); int call abs(); int call rand();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |