Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК по СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.79 Mб
Скачать

8.6.4.Входной синтаксис yacc'а

В данном разделе в форме yacc-спецификации описывается входной синтаксис yacc'а. Не рассматриваются контекстные зависимости и аналогичные вопросы. Ирония заключается в том, что, хотя yacc воспринимает LALR(1)-грамматики, сам входной язык спецификаций yacc'а наиболее естественным образом задается LR(2)-грамматикой: трудным оказывается случай, когда идентификатор идет сразу за действием. Если после идентификатора стоит двоеточие, то это начало следующего правила, в противном случае, это продолжение текущего правила, которое идет за внутренним действием. Реализация такова: лексический анализатор, обнаружив идентификатор, просматривает входной текст вперед и определяет, является ли следующая лексема двоеточием. Если является, лексический анализатор возвращает C_IDENTIFIER. Если нет, возвращается IDENTIFI-ER. Литералы (в апострофах) также распознаются как IDENTIFIER, но не как C_IDENTIFIER.

/* грамматика yacc-спецификаций */

/* основные компоненты */

%token IDENTIFIER /* идентификаторы и литералы */

%token C_IDENTIFIER /* идентификатор (но не литерал), */

/* за которым следует двоеточие */

/* зарезервированные слова: %type=>TYPE %left=>LEFT и т.д.*/

%token LEFT RIGHT NONASSOC TOKEN PREC TYPE START UNION

%token MARK /* знак %% */

%token LCURL /* знак %{ */

%token RCURL /* знак %} */

/* ASCII-символы указываются непосредственно */

%%

spec : defs MARK rules tail

;

tail : MARK

{

В этом действии обрабатывается

оставшаяся часть файла

}

/* пусто: второй MARK необязателен */

;

defs : /* пусто */

defs def

;

def : START IDENTIFIER

UNION

{

Копирование определения объединения

в выходной файл

}

LCURL

{

Копирование C-кода в выходной файл

}

RCURL

rword tag nlist

;

rword : TOKEN

LEFT

RIGHT

NONASSOC

TYPE

;

tag : /* пусто: тег необязателен */

'<' IDENTIFIER '>'

;

nlist : nmno

nlist nmno

nlist ',' nmno

;

nmno : IDENTIFIER

/* Замечание: литерал нельзя использовать с %type */

IDENTIFIER NUMBER

/* Замечание: нельзя использовать с %type */

;

/* секция правил */

rules : C_IDENTIFIER rbody prec

rules rule

;

rule : C_IDENTIFIER rbody prec

'|' rbody prec

;

rbody : /* пусто */

| rbody IDENTIFIER

| rbody act

;

act : '{'

{

Копирование действия, обработка $$ и т.п.

}

'}'

;

prec : /* пусто */

| PREC IDENTIFIER

| PREC IDENTIFIER act

| prec ';'

;

8.7.Контроль

Контроль успеваемости на данном этапе обучения выполняется по результатам защиты лабораторных работ.

9.Модуль Заключение

В заключение хочется очертить перспективы развития теории формальных грамматик, технологий построения синтаксических и лексических анализаторов и роли их в системе современных знаний.

Если проследить эволюционный путь, который прошли формальные языки, то наблюдается тенденция к повышению читабельности и выразительности языковых средств. Однако, эта тенденция на современном этапе ослабевает, поскольку формальные языки, как инструмент общения человека с компьютером перестают играть доминирующую роль. Их место постепенно занимают более выразительные способы общения посредством визуальных сред проектирования, CASE системы. Например, принятый в качестве международного стандарта универсальный язык моделирования объектно-ориентированных систем UML уже представляет собой совокупность разноплановых диаграмм, а не языковые описания.

Следующий аспект заключается в появлении готовых специализированных распознавателей, умеющих «читать» универсальные языки, такие как XML-основанные языки разметки. Сужается спектр необходимых лексем до возможного минимума, алгоритмы распознавания, соответственно оттачиваются до максимально возможной производительности. Именно высокоскоростные универсальные распознаватели-трансляторы в прямом и обратном направлении на лету – будущее сетевых сервисов.

Возможно, в будущем будут построены и высокоскоростные распознаватель контекстно-зависимых языков, что позволить усовершенствовать системы машинного перевода и даст новый виток эволюции систем искусственного интеллекта.

Важно, что роль теории формальных языков в сфере информационных технологий постоянно растет. С ее использованием оказывается возможным получать действительно качественные решения целого ряда задач по обработке информации.