Добрый день. Я сейчас прохожу курс повышения квалификации - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?
|
Устройство интерпретатора языка Python
Лексический анализ
Лексический анализатор языка программирования разбивает исходный текст программы (состоящий из одиночных символов) на лексемы - неделимые "слова" языка.
Основные категории лексем Python: идентификаторы и ключевые слова (NAME), литералы (STRING, NUMBER и т.п.), операции (OP), разделители, специальные лексемы для обозначения (изменения) отступов (INDENT, DEDENT) и концов строк (NEWLINE), а также комментарии (COMMENT). Лексический анализатор доступен через модуль tokenize, а определения кодов лексем содержатся в модуле token стандартной библиотеки Python. Следующий пример показывает лексический анализатор в действии:
import StringIO, token, tokenize prog_example = """ for i in range(100): # comment if i % 1 == 0: \ print ":", t**2 """.strip() rl = StringIO.StringIO(prog_example).readline for t_type, t_str, (br,bc), (er,ec), logl in tokenize.generate_tokens(rl): print "%3i %10s : %20r" % (t_type, token.tok_name[t_type], t_str)
А вот что выведет эта программа, разбив на лексемы исходный код примера:
prog_example: 1 NAME : 'for' 1 NAME : 'i' 1 NAME : 'in' 1 NAME : 'range' 50 OP : '(' 2 NUMBER : '100' 50 OP : ')' 50 OP : ':' 52 COMMENT : '# comment' 4 NEWLINE : '\n' 5 INDENT : ' ' 1 NAME : 'if' 1 NAME : 'i' 50 OP : '%' 2 NUMBER : '1' 50 OP : '==' 2 NUMBER : '0' 50 OP : ':' 1 NAME : 'print' 3 STRING : '":"' 50 OP : ',' 1 NAME : 't' 50 OP : '**' 2 NUMBER : '2' 6 DEDENT : '' 0 ENDMARKER : ''
Фактически получен поток лексем, который может использоваться для различных целей. Например, для синтаксического "окрашивания" кода на языке Python. Словарь token.tok_name позволяет получить мнемонические имена для типа лексемы по номеру.