Программирование >>  Формирование пользовательского контейнера 

1 ... 123 124 125 [ 126 ] 127 128 129 ... 156


Тип лексемы

Элементы, входящие в состав

Delimiter (офаничитель)

Знаки пунктуации и операций

Keyword (ключевое слово)

Ключевые слова

String (строка)

Строки в кавычках

Identifier (идентификатор)

Имена переменных и функций

Number (число)

Числовые константы

Block (блок)

{ или }

Давайте рассмофим пример, иллюстрирующий применение описанных типов лексем. Задан оператор

for ( X = 0; X * 10; х++) { num = num + х;

В табл. 9.3 приведены составляющие его лексемы.

Таблица 9.3. Лексемы, содержащиеся в операторе

Лексема Категория

keyword

delimiter

Identifier

delimiter

number

delimiter

identifier

<

delimiter

number

delimiter

Identifier

Несмотря на то, что интерпретатор Mini С++ распознает те же лексемы которые описаны в стандарте ANSI/ISO для языка С++, он несколько иначе делит их на категории для облегчения процесса интерпретации. В табл. 9.2 приведены категории лексем, используемые в интерпретаторе Mini С++.

Таблица 9.2. Категории лексем интерпретатора Mini С++



Таблица 9.3 (окончание)

Лексема Категория

delimiter

delimiter

block

klenfrfier

delimtter

Wentifier

delimiter

identifier

delimtter

block

Далее приведен код функции gettoken (), которая извлекает из исходного

кода лексемы для интерпретатора Mini С++, toktypes getL-tokenO {

char *temp;

token type = UNDEFTT; tok = UNDEFTOK;

terap = token; ♦temp = \0;

Пропускает пробелы.

while(isspace(*prog) && *prog) ++prog;

Пропускает переход на новую строку, while(*prog == \r) {

++prog;

++prog;

Снова пропускает пробелы.

while(isspace{*prog) && *prog) ++prog;

Проверяет, не конец ли програьллл.



386 , Gaeas

if(*prOg == \0) {

*token = \0; tok = END;

return (token type = DELIMITER);

Проверяет ограничители блока, if(strchrC , *prog)) {

*teinp = *prog;

teannp++;

*tenp = \0;

prog++;

return (tok v type = BLOCK);

Ищет комментарии. if(*prog == V)

if(*(prog+l> - * ) ( знак комментария /* prog += 2j

do { находит конец комментария

while(*prog != *) prog++;

prog++; } while (*prog != V); prog++;

return (token type - DELIMITER); } else if(*Cprog+l) == /) { знак комментария prog += 2,-

Находич? конец комментария.

while{*prog != \r && *prog != \0) prog++;

if(*prog == -Xr) prog +=2;

return (token type = DELIMITER);

Проверяет двойные знаки операций, if (strchr ( !<:=+- , *prog)) { switch (*progr) { case =:

if(*(proig+l) == = ) { prog+-b; prog++;



1 ... 123 124 125 [ 126 ] 127 128 129 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика