Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

!!Помогите найтм касяк в коде!!!

10K
17 декабря 2005 года
jey2004
11 / / 20.08.2005
Лексический анализатор. Какой то касяк, а какой понять не могу. У меня зацикливается вывод.
code:
/************************************************/
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_TOKEN 35
#define TT_IDENTIFIER 0
#define TT_NUMBER 1
#define TT_CONTROL 2
int tokentype;
/* Тип текущей лексемы */
char token[MAX_TOKEN+1];
/* Значение текущей лексемы*/
char look;
/* Наш символ */
FILE *in;
/* Входной файл */
FILE *out;
/* Выходной файл */
HANDLE hStdout;

/* Error выдаёт ошибку и останавливает исполнение */
void Error(char *s)
{
printf("ERROR: %sn",s);
exit(-1);
}
/* GetLook берёт следующий символ */
void GetLook(void)
{
look=fgetc(in);
}
/* SkipWhite пропускает все пробелы */
void SkipWhite(void)
{
while(isspace(look))
GetLook();
}
/* GetNext помещает лексему в лексемный буфер, а
** тип лексемы в tokentype. */
void GetNext(void)
{
char *ptr=token;
int count=0;
if(isalpha(look)) /* Найден идентификатор */
{
tokentype=TT_IDENTIFIER;
*ptr=look;
ptr++;
count++;
GetLook();
while(isalnum(look))
{
if(count<MAX_TOKEN)
{
*ptr=look;
ptr++;
}
count++;
GetLook();
}
*ptr;
}
}
char* s;
int main(int argc, char* argv[])
{
hStdout= GetStdHandle (STD_OUTPUT_HANDLE) ;
in=fopen(argv[1],"rt");
if (in==NULL)
{
cout << "Bad input file" << endl;
}

out=fopen(argv[2],"wt");
if (out==NULL)
{
cout << "Bad output file" << endl;
}

GetLook();
/* Инициировать выборку символов */
SkipWhite();
/* Пропустить пробелы и т.п */
GetNext();
/* Считать очередной */
//while(!feof(in))
while(token[0]!='\n')
{
switch(tokentype)
{
case TT_IDENTIFIER:
cout << "Identifier" << token << endl;
break;
case TT_NUMBER:
cout << "Number" << token << endl;
break;
case TT_CONTROL:
cout << "Control" << token << endl;
break;
}
GetNext();
/* Взять лексему */
}
return 0;
}
/***********************************************/
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог