ALTE DOCUMENTE
|
||||||||
. Для иллюст 23523v216x 88;ации дальнейших аспектов использования структур в этом разделе мы напишем программу, представляющую собой содержимое пакета поиска в таблице. Эта программа является типичным представителем подпрограмм управления символьными таблицами макропроцессора или компилятора. Рассмотрим, например, оператор #define языка «C». Когда встречается строка вида:
#define yes 1
yes yes
inword = yes;
Имеются две основные процедуры, которые управляют именами и заменяющими их текст 23523v216x 72;ми. Функция install(s,t) s t s t lookup(s) s null
null
struct nlist
;
define hashsize hashtab
static struct nlist *hashtab[hashsize]
lookup install
// hash: Получает хэш-код для строки s
unsigned hash(char *s)
hashtab lookup lookup возвращает указатель на него; если нет, то она возвращает null
// lookup: Ищет s hashtab
struct nlist *lookup(char *s)
install lookup install null
install name def
struct nlist *install(char *name, char *def)
else // Уже имеется
free np->def // Освобождаем прежний defn
if ((np->def = strsave(def)) == null)
return null
return np
}
strsave alloc alloc free alloc
lookup install
#define, пригодную для использования с «C»-программами. Вам могут также оказаться полезными функции getchar ungetch
|