отличные ворота hormann г. Воронеж на сайте ftagroup.ru

 
 
Главная arrow Программирование С++ arrow Заголовочный файл mccommon.h

Заголовочный файл mccommon.h

Все три исходных файла для интерпретатора Mini С++: minicpp.cpp, parser.cpp и libcpp.cpp, включают в себя заголовочный файл mccommon.h, приведенный в листинге 9.4.
| Листинг 9.4. Заголовочный файл mccommon.h
// Общие объявления, используемые в parser.cpp, minicpp.cpp, // или libcpp.cpp, а также в других добавляемых вами файлах. //
const int MAX_T_LEN   = 128;     // максимальная длина лексемы const int MAX_ID_LEN =31;       // максимальная длина идентификатора const int PROG_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 };
// Константы, используемые для генерации
// исключения при наличии синтаксических ошибок. //
// Замечание: SYNTAX — общее сообщение об ошибке, используемое,
// когда нет более подходящего.
enum error_msg
{ SYNTAX, NQJSXP, NOT_VAR, DUP_VAR, DUP_FUNC, SEMI_EXPECTED, UNBAL_BRACES,  FUNC_UNDEF, TYPE_EXPECTED, RETJTOCALL,  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     prescan(); void    decl_jglobal () ; void     call(); void     putback(); void    decl_local(); void    exec_if () ; void     find_eob(); void    exec_for(); void     exec_switch ();
void     get_params(); void    get_args(); void     exec_while(); void    exec_do(); void     exec_cout() ; void     exec_cin();
void assign_var(char *var_name, int value);
bool load_program(char *p, char *fname);
inc find_var(char *s);
void interp();
void func_ret();
char *find_func(char *name);
bool is_var(char *s);
token_ireps find_var_type(char *s);
// Прототипы функций анализатора выражений.
void eval_exp(int &value);
void eval_expO(int &value);
void eval_expl(int &value);
void eval_exp2(int &value);
void eval_exp3(int &value);
void eval_exp4(int &value);
void eval_exp5(int &value);
void atom(int &value);
void sntx_err(error_msg error);
void putback();
bool isdelim(char c);
token_ireps look_up(char *s);
int f ind_var(char * s);
tok_types get_token();
int internal_func(char *s);
bool is_var(char *s);
// Прототипы функций "Стандартной библиотеки", int call_jgetchar () ; int call_putchar(); int call_abs(); int call_rand();
Компиляция и компоновка интерпретатора Mini С++
Для применения Mini С++ вы должны откомпилировать и скомпоновать файлы minicpp.cpp, parser.cpp и libcpp.cpp. Для этого подойдет любой из современных компиляторов, включая Borland С++ и Visual С++. Например, для компилятора Visual С++ можно использовать следующую командную строку:
cl -GX minicpp.cpp parser.cpp libcpp.cpp
Для компилятора Borland С++ подойдет следующая командная строка: Ьсс32 minicpp.cpp parser.cpp libcpp.cpp
Если вы пользуетесь другим компилятором, просто следуйте инструкциям, приведенным в сопроводительной документации.
Примечание   ^|
В старых версиях компилятора Visual С++ интерпретатору Mini С++ может быть выделено недостаточное стековое пространство. Для увеличения размера стека можно использовать ключ /Fsize.
Для интерпретации программы укажите ее имя в командной строке после minicpp Например, в следующей командной строке задана интерпретация программы, названной test.cpp:
minicpp test.cpp