The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

5.1 Сканирование идентификаторов

5.1 Сканирование идентификаторов

Предыдущая  Содержание  Следующая V*D*V

В разделе 3.2 мы написали функцию scan(), которая принимает строку ввода из основной программы и выдаёт по одному символу из строки ввода на вызов. Если мы хотим добавить ключевые слова, именованные константы и так далее, надо расширить scan(). Мы извлекаем алфавитно-цифровые строки для дальнейшего анализа так же, как и числа с плавающей точкой:

 

#define ALNUM    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \

                 "abcdefghijklmnopqrstuvwxyz" \

                 "_" "0123456789"

 

static enum tokens scan (const char * buf) {

    static const char * bp;

    ...

    if (isdigit(* bp) || * bp == ’.’)

        ...

    else if (isalpha(* bp) || * bp == ’_’) {

        char buf [BUFSIZ];

        int len = strspn(bp, ALNUM);

        if (len >= BUFSIZ)

            error("name too long: %-.10s...", bp);

        strncpy(buf, bp, len), buf[len] = ’\0’, bp += len;

        token = screen(buf);

    }

    ...

 

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

 

Предыдущая  Содержание  Следующая