/p>
} * lexer_codebuffer_new (char * code)
{* cb = (CodeBuffer *) calloc (1, sizeof (CodeBuffer));
lexer_codebuffer_init (cb);
/* Виділити пам'ять для коду */
size_t len ​​= min (strlen (code), 40960);
if (len)
{> text = (char *) calloc (len +1, sizeof (char)); (cb-> text, code, len);
} cb;
} lexer_codebuffer_init (CodeBuffer * cb)
{> text = cb-> name = NULL;> curr_pos = 0;> line_num = 1; (cb-> char_backbuf, ' 0', MAX_CHAR_BACKBUF_LEN); p>
/* Лічильник Tokenов */> tok_backbuf_count = 0;
/* Виділити пам'ять під змінні (MAX_VARIABLE_LIST_LEN) */
cb-> variable_list = parser_variable_create_list ();
} lexer_codebuffer_destroy (CodeBuffer * cb)
{(! cb) return;
/* Очистити буфер коду */
free (cb-> text);
free (cb-> name);> curr_pos = 0; -> line_num = 1;
/* Видалити всі змінні */
parser_variable_delete_all (cb-> variable_list);> variable_list = NULL; (cb-> char_backbuf, ' 0', MAX_CHAR_BACKBUF_LEN);
/* Обнулити лічильник Tokenов */> tok_backbuf_count = 0;
}
4. Опис тестового прикладу
Текст програми:
a = sqrt (36) = abs (-6) = 2 ^ 2 = exp (30) = ln (10) (a) (b) (c) (d) (e) = 3.4 +2.6 (f ) = a + b * cd/e * f (g)
Результат
Результат: 6
Результат: 6
Результат: 4
Результат: 1.06865e +13
Результат: 2.30259
Результат: 6
Результат:-2.78465e +13
Висновок
У цій роботі була виконана задача створення простої програми-інтерпретатора для обробки вихідних текстів програм, що виконують дії над комплексними числами.
Бібліографічний список
1. Серебряков В.А., Галочкин М.П., ​​Гончар Д.Р., Фуругян М.Г. Теорія і реалізація мов програмування. М.: МЗ-Прес , 2003. - 296 с.
2. Атакіщев О.І., Волков А.П., Тітов В.С., Старков Ф.А. Формальні граматики та їх застосування в розпізнаванні образів. - Курськ, 2000. -115с.
. Бек Л. Введення в системне програмування. - М.: Мир, 1988. - 448 с.
4. Молчанов А.Ю. Системне програмне забезпечення - СПб.: Пітер, 2003 ...