
- •Анализ отдельных слов
- •Анализ отдельных предложений
- •Семантический анализ
- •Заключение
- •Литература
- •Документальные ис.
- •Принцип функционирования ипс.
- •Состав аис.
- •Уровни представления языковых объектов.
- •Основные элементы ипя.
- •Требования к ипя.
- •Типология ипя.
- •Языки предкоординатного типа. Иерархическая классификация.
- •Перечислительные классификации.
- •Фасетные классификации.
- •Посткоординационные ипя.
- •Дескрипторные ипя.
- •Устранение синонимии.
- •Словари лексических единиц.
- •1. Тезаурус.
- •2. Другие виды.
- •Построение словаря дескрипторного языка. Основные характеристики. Анализ и построение словаря дескрипторного языка.
- •Количественные характеристики словарей.
- •Учёт синтагматических отношений.
- •Семантические коды.
- •Системы индексирования.
- •Типы (разновидности) систем индексирования.
- •Подходы к автоматизации индексирования.
- •Системы кодирования.
- •Оценка эффективности поиска.
- •Организация информационных массивов.
- •Стратегии поиска.
- •Элементы теории формальных языков и грамматик Введение.
- •Основные понятия и определения
- •Классификация грамматик и языков по Хомскому
- •Примеры грамматик и языков.
- •Разбор цепочек
- •Преобразования грамматик
- •Задачи.
- •Элементы теории трансляции Введение.
- •Описание модельного языка
- •Лексический анализ
- •О недетерминированном разборе
- •Задачи лексического анализа
- •Лексический анализатор для м-языка
- •Второй этап: по дс пишем программу
- •Задачи.
- •Синтаксический и семантический анализ
- •Метод рекурсивного спуска
- •Void error(); / функция обработки ошибок /
- •О применимости метода рекурсивного спуска
- •Синтаксический анализатор для м-языка
- •О семантическом анализе
- •Семантический анализатор для м-языка
- •Обработка описаний
- •Int declare; /* описан ? 1-"да", 0-"нет" */
- •Void ipush (int I); /* значение I - в стек */
- •Int ipop (void); /* из стека - целое */
- •Контроль контекстных условий в выражении
- •Void spush (char *s); /* значение s - в стек */
- •If (tid [I].Declare) /* описан? */
- •Контроль контекстных условий в операторах
- •Задачи.
- •Генерация внутреннего представления программ
- •Язык внутреннего представления программы
- •Синтаксически управляемый перевод
- •Генератор внутреннего представления программы на м-языке
- •Интерпретатор полиЗа для модельного языка
- •Задачи.
- •Литература
- •Раздел 7 (вопрос 3) Значение когнитивной психологии и структурной лингвистики для автоматизированной обработки текстов на ея
- •Когнитивная лингвистика
- •Когнитивная лингвистика и другие науки
- •Концепция образных схем
- •Концептуальная теория метафоры
- •Формирование когнитивной лингвистики
- •Раздел 7 (вопрос 5) Модель понимания текстов Кинча
- •1.2. Основные положения
- •1.3. Общая характеристика модели
- •Раздел 7 (вопрос 6) Принципы структуризации текстов на основе трансформационной грамматики.
- •Синтактика, семантика и прагматика
- •Знаки и культура
- •Синтагма и парадигма
- •Типы связей между знаком и денотатом
- •Знак. Его значение и смысл
- •Знаковое пространство. Парадигма трех миров
- •Знаковые системы и типы знаков
- •Понятие коннотата
- •Проблема похожести знака на денотат. Ономатопея
- •Случайность и закономерность в знаках и знаковых системах
- •Прагматика – часть семиотики
- •Глава 2. Слова, словари и понятия Слова и словари
- •Акты именования. Семиотические универсалии
- •Треугольник Фреге. Связь между знаком, денотатом и понятием
- •Глава 3. Теория тезауруса Тезаурус. Онтогенез
- •Тезаурус. Определение
- •Популярные тезаурусы и их особенности
- •Теория тезауруса и семиотика
- •Теория тезауруса и информатика
- •Тезаурус. Парадигматика
- •Тезаурусная терминология
- •Популярные тезаурусы и их особенности
- •Глава 4. Эволюция знаковых систем. Законы существования текстов в обществе Постановка проблемы
- •Парадигматика, или правила обращения с текстами
- •Материализация знака. Фактура речи
- •Переход от одной фактуры речи к другой
- •Глава 5. Парадигмы построения эффективных знаковых произведений Общие положения
- •Риторика и ее гуманитарная катастрофа
- •Определение риторики как науки об эффективной деятельности
- •Риторика как прагматика
- •Риторика и логика. Риторика и истина. Образ автора
- •Риторика. Классические парадигмы
- •Понятие риторического изобретения
- •Девиации синтактики и семантики знаков как риторическая парадигма
- •Риторика как технология эффективной деятельности. Теория документа
- •Глава 6. Знаки, люди и законы. Парадигмы их взаимодействия на примере рекламных текстов Американская реклама как сфера общения
- •Коммуникативная структура американской рекламы
- •Авторство и правила обращения с рекламными текстами
- •Роль рекламных текстов в американском обществе
- •Законодательное регулирование рекламной деятельности
- •Законы знакообразования
- •Законодательное регулирование связи знак–денотат в рекламе
- •Прагматика рекламного текста
- •Регулирование собственно рекламной деятельности как производства текстов
- •Рекламоведческие правила
- •Правила сбора информации
- •Синтактика рекламного текста
- •Интеграция с другими типами знаков
- •Прагматический эффект рекламы
- •Реклама – важная часть американской цивилизации
- •Универсальность и прогностический потенциал рекламной парадигмы
- •Нечеткие множества. Основные понятия и определения, подходы к их обработке, операции над нечёткими множествами.
Задачи лексического анализа
Лексический анализ (ЛА) - это первый этап процесса компиляции. На этом этапе символы, составляющие исходную программу, группируются в отдельные лексические элементы, называемые лексемами.
Лексический анализ важен для процесса компиляции по нескольким причинам:
a) замена в программе идентификаторов, констант, ограничителей и служебных слов лексемами делает представление программы более удобным для дальнейшей обработки;
b) лексический анализ уменьшает длину программы, устраняя из ее исходного представления несущественные пробелы и комментарии;
c) если будет изменена кодировка в исходном представлении программы, то это отразится только на лексическом анализаторе.
Выбор конструкций, которые будут выделяться как отдельные лексемы, зависит от языка и от точки зрения разработчиков компилятора. Обычно принято выделять следующие типы лексем: идентификаторы, служебные слова, константы и ограничители. Каждой лексеме сопоставляется пара (тип_лексемы, указатель_на_информацию_о_ней).
Соглашение: эту пару тоже будем называть лексемой, если это не будет вызывать недоразумений.
Таким образом, лексический анализатор - это транслятор, входом которого служит цепочка символов, представляющих исходную программу, а выходом - последовательность лексем.
Очевидно, что лексемы перечисленных выше типов можно описать с помощью регулярных грамматик.
Например, идентификатор (I):
I a | b| ...| z | Ia | Ib |...| Iz | I0 | I1 |...| I9
целое без знака (N):
N 0 | 1 |...| 9 | N0 | N1 |...| N9
и т.д.
Для грамматик этого класса, как мы уже видели, существует простой и эффективный алгоритм анализа того, принадлежит ли заданная цепочка языку, порождаемому этой грамматикой. Однако перед лексическим анализатором стоит более сложная задача: он должен сам выделить в исходном тексте цепочку символов, представляющую лексему, а также преобразовать ее в пару (тип_лексемы, указатель_на_информацию_о_ней). Для того, чтобы решить эту задачу, опираясь на способ анализа с помощью диаграммы состояний, введем на дугах дополнительный вид пометок - пометки-действия. Теперь каждая дуга в ДС может выглядеть так:
Смысл ti прежний - если в состоянии A очередной анализируемый символ совпадает с ti для какого-либо i = 1, 2 ,... n, то осуществляется переход в состояние B; при этом необходимо выполнить действия D1, D2, ... ,Dm.
Лексический анализатор для м-языка
Вход лексического анализатора - символы исходной программы на М-языке; результат работы - исходная программа в виде последовательности лексем (их внутреннего представления).
Лексический анализатор для модельного языка будем писать в два этапа: сначала построим диаграмму состояний с действиями для распознавания и формирования внутреннего представления лексем, а затем по ней напишем программу анализатора.
Первый этап: разработка ДС.
Представление лексем: все лексемы М-языка разделим на несколько классов; классы перенумеруем:
-
служебные слова - 1,
-
ограничители - 2,
-
константы (целые числа) - 3,
-
идентификаторы - 4.
Внутреннее представление лексем - это пара (номер_класса, номер_в_классе). Номер_в_классе - это номер строки в таблице лексем соответствующего класса.
Соглашение об используемых переменных, типах и функциях:
1) пусть есть переменные:
buf - буфер для накопления символов лексемы;
c - очередной входной символ;
d - переменная для формирования числового значения константы;
TW - таблица служебных слов М-языка;
TD - таблица ограничителей М-языка;
TID - таблица идентификаторов анализируемой программы;
TNUM - таблица чисел-констант, используемых в программе.
Таблицы TW и TD заполнены заранее, т.к. их содержимое не зависит от исходной программы; TID и TNUM будут формироваться в процессе анализа; для простоты будем считать, что все таблицы одного типа; пусть tabl - имя типа этих таблиц, ptabl - указатель на tabl.
-
пусть есть функции:
void clear (void); - очистка буфера buf;
void add (void); - добавление символа с в конец буфера buf;
int look (ptabl Т); - поиск в таблице Т лексемы из буфера buf; результат: номер строки таблицы с информацией о лексеме либо 0, если такой лексемы в таблице Т нет;
int putl (ptabl Т); - запись в таблицу Т лексемы из буфера buf, если ее там не было; результат: номер строки таблицы с информацией о лексеме;
int putnum (); - запись в TNUM константы из d, если ее там не было; результат: номер строки таблицы TNUM с информацией о константе-лексеме;
void makelex (int k, int i); - формирование и вывод внутреннего представления лексемы; k - номер класса, i - номер в классе;
void gc (void) - функция, читающая из входного потока очередной символ исходной программы и заносящая его в переменную с;
void id_or_word (void); - функция, определяющая является слово в буфере buf идентификатором или служебным словом и формирующая лексему соответствующего класса;
void is_dlm (void); - если символ в буфере buf является разделителем, то формирует соответствующую лексему, иначе производится переход в состояние ER.
Диаграмма состояний для лексического анализатора приведена на следующей странице.
Замечания:
1) Символом Nx в диаграмме (и в тексте программы) обозначен номер лексемы x в ее классе.
2) По нашей диаграмме знак "!=" представлен двумя лексемами, хотя нужно сделать одну лексему, по аналогии с ":=". Соответствующие изменения надо сделать и в синтаксическом анализаторе.