Форум программистов, компьютерный форум CyberForum.ru

Конструирование транслятора для модельного языка. Литература по LEX/YACC - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ функцыя структур http://www.cyberforum.ru/cpp-beginners/thread515615.html
В програмі використати функції користувача У масиві що складаеться з 20 цілих елементів обчислити 1 номер мінімального елементу массиву 2 суму елементів масиву розташованого між першім і другим відемними елементами 3 перетворити масив так щоб спочатку розташовувалися всі елементи модуль яких не перевищую 5 а потім всі інші Официальным языком форума является русский язык.
C++ Чтение нескольких строк Подскажите пожалуйста как сделать следующее: дан файл в котором 2 строки. Первую из этих строк записать в str1, вторую в str2. Строки разделены enter-ом, то есть одна под другой. http://www.cyberforum.ru/cpp-beginners/thread515603.html
C++ Можно ли представить структуру как элемент массива, т е массив состоящий из однотипных структур
Можно ли представить структуру как элемент массива, т е массив состоящий из однотипных структур
C++ Ugadai chislo programma
Computer zagadivaet chislo, i vi doljni dogadat chislo. Esli dogadali +50 ballov else -10 ballov. Pervonachalnoe ball 100. i eshe kogda igrok ne hochet igrat nado zakonchit programmu, kak eto zdelat pomogite. #include "stdio.h" #include "conio.h" #include "stdlib.h" #include "time.h" #define N 3 #define DEBUG //
C++ Дана матрица размера M × N 2 задача http://www.cyberforum.ru/cpp-beginners/thread515580.html
Дана матрица размера M × N. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.
C++ Дана матрица размера M × N Дана матрица размера M × N. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести 0. подробнее

Показать сообщение отдельно
aw_rabbit
 Аватар для aw_rabbit
146 / 103 / 6
Регистрация: 08.02.2012
Сообщений: 202
11.03.2012, 00:07     Конструирование транслятора для модельного языка. Литература по LEX/YACC
Как разумней начать делать?
1. Посмотреть на грамматику. Все генераторы реализованы либо как LL (нисходящий разбор) либо как LR (восходящий разбор) анализаторы. Т.е. на грамматику будут накладываться определенные требования. Нельзя просто дать генератору любую грамматику и больше ни о чем не беспокоится - она должна соответствовать типу анализатора. Если не соответствует, то ее немного редактируют. В документации этот раздел называется "разрешение конфликтов".

2. Выбрать генератор. Правила, которыми описаны литералы (константа, переменная, число, строка) генерируют лексер. Все остальные -парсер. Обычно язык генератора сильно приближен к БНФ, так что прям в таком виде можно ему скармливать.

3. Пишется грамматика языка на который транслируют. Можно просто для себя набросать. Дальше нужно разобраться с атрибутами, т.е. грамматика из задания добавляется атрибутами. В доках к генераторам это называется "семантические действия". В книгах - синтаксически управляемая трансляция. Т.е. если у нас правило S->A := B на паскале и нам нужно перевести его например в С как S->A=B, то с атрибутами будет так S<str>->A<s1> := B<s2> { str=s1+"="+s2+"\n";}. str это просто строка с текстом нового кода. Тут мы ничего не вычисляем, поэтому все просто. С атрибутами нужно разобраться в любом случае- что в ручном что в автоматизированном варианте. Все генераторы генерируют лексер и парсер, а транслятор получается дописыванием семантических действий в грамматику.

Добавлено через 3 минуты
И ещё нужно добавить конструкцию языка высокого уровня
<Описание вычислений> ::= Begin {<Опреатор>} End
<Оператор>::=<Список присваиваний> | <Цикл>
Это с одним действием, т.е. дальше без вложенности begin/end

Добавлено через 3 минуты
PS: еще одна гадость -проверка на семантические ошибки. Т.е. проверить что переменная объявлена, что объявлена 1 раз, что типы соответствуют в выражениях и т.д. Делается тоже через атрибуты и семантические правила.
 
Текущее время: 07:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru