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

1 ... 145 146 147 [ 148 ] 149 150 151 ... 156


: Листинг 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.



void

prescan();

void

decl jglobal();

void

callO;

void

putbackO;

void

decl local();

void

exec.if 0;

void

find eob();

void

exec forO ;

void

exec switch();

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();



1 ... 145 146 147 [ 148 ] 149 150 151 ... 156

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