Язык программирования C

Скачать в pdf «Язык программирования C»


Далее приведены глобальные переменные и главная программа:


#include <stdio.h>


#include <string.h>


#include <ctype.h>


#define MAXTOKEN 100 enum { NAME, PARENS, BRACKETS };


void del(void); void dirdcl(void);


int gettoken(void); int tokentype; char token[MAXTOKEN]; char name[MAXTOKEN]; char datatype[MAXTOKEN]; char out[1000];


/* тип последней лексемы */


/* последняя введенная лексема */


/* имя идентификатора */


/* тип данных = char, int и т.п. */ /* строка результата */


main()    /* преобразование объявлений в словесную форму */

{


while (gettokenО != EOF) {    /* 1-я лексема в строке — */


strepy(datatype, token); /* тип данных */ out [0] = ‘’;


del ();    /* анализ остальной части строки */


if (tokentype != 1n1)


printf(«syntax errorn»); printf(«%s: %s %sn», name, out, datatype);


return 0;

}


Функция get token пропускает пробелы и табуляции, затем находит следующую лексему (смысловой элемент объявления) в потоке. Под лексемой (token) будем понимать имя, пару круглых скобок, пару квадратных скобок (возможно, с числом между ними) или любой другой одиночный символ.


int gettoken(void) /* считывает очередную лексему */

{


int с, getch(void); void ungetch(int); char *p = token,-


while ( (c = getchO) == ‘    1    || c == ‘t1)


if (c == ‘ (‘) {


if ( (c = getchO ) == ‘) ‘) { strcpy(token) , «()»); return tokentype = PARENS;


} else {


ungetch(c) ;


return tokentype = 1 (‘;

}


} else if (c == ‘ [‘) {


for (*p++ = c; (*p+ + = getchO) != ‘    )

Скачать в pdf «Язык программирования C»