| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > грамматика условия |
| Автор: fuckingniger 29.3.2011, 11:02 | ||
| помогите написать грамматику для условного оператора(например паскалевского оператора) я навоял тут кое-что - но как-то не совсем правильно работает(не при всех у словиях) /
spc - любое количество(может быть и ноль) пробелов и табов в произвольном порядке l_s и r_s - скобки word - любое незарезервированное слово вроде остальное должно быть понятно Добавлено через 49 секунд P.S. это бизон |
| Автор: xvr 29.3.2011, 17:16 | ||
| Это не бизон - это жуть в полоску В бизоне есть понятие приоритетов операций, не надо все расписывать поэлементно. И откуда у вас там пробелы взялись (spc) - они еще на этапе выделения лексем должны были быть удалены. Вот, кусок реального файла:
|
| Автор: fuckingniger 29.3.2011, 21:57 | ||||||||||||
| нееееее....у меня бизон в паре с флексом работает. флекс делает лексический анализ исходного текста(распознать заданные некоторой грамматикой усовия), а бизон должен сделать синтаксический анализ. Добавлено @ 22:00 могу весь код привести чтоб понятнее было. вот флексовская грамматика:
а вот бизоновская(то, что я сделал):
Добавлено через 10 минут и 42 секунды просто у меня не получается задать грамматику для условного оператора. вот например такая строка работает:
а такая нет - не понимаю, по каким -таким разным правилам это может выполняться:
Добавлено через 12 минут и 47 секунд разница в этих строках в этом месте:
там 2 таба.Если поставить пробел, то это ничего не поменяет |
| Автор: xvr 30.3.2011, 11:09 |
| У вас пробелы (и табы) являются значимыми элементами грамматики. Если сможете внятно объяснить зачем - то возможно сможете и разницу в строках объяснить. (Во 2й строке между r_s и men у вас вставлено spc - по этому и не работает) Да хоть с флюсом Именно, а не заниматься попутно вычесыванием мусора из потока лексем от флекса |
| Автор: fuckingniger 31.3.2011, 13:19 |
| всё таки пробелы нужны. Для того чтобы использовать символьные пременные, строки. |
| Автор: fuckingniger 31.3.2011, 15:29 | ||||
объясните пожалуйста, в чем у меня ошибка и почему он не воспринимает
как
|
| Автор: xvr 31.3.2011, 16:02 | ||||||
Дайте bison'у ключик -v, при компиляции того, что получилось укажите дефайн YYDEBUG (в 1) и в где нибудь тексте
|
| Автор: fuckingniger 31.3.2011, 16:53 |
я не знаю, как это сделать Добавлено через 45 секунд или define это и сделает? |
| Автор: fuckingniger 31.3.2011, 18:41 | ||
|
| Автор: xvr 31.3.2011, 19:32 | ||||||||
Найдите, где у вас запускается bison и в командную строку добавьте -v
|
| Автор: fuckingniger 1.4.2011, 02:51 | ||
| я делал с параметрами -d -o в результате создавалось 2 файлика .cpp и .cpp.h и содержание .cpp.h очень-очень напоминает (даже полностью -v.h), клторый сделан был по вашему совету. написал
и ошибки пропали. только не понимаю как это мне поможет . Добавлено через 7 минут и 3 секунды Добавлено через 7 минут и 27 секунд ??? |
| Автор: xvr 1.4.2011, 12:07 |
Присвойте 1 в yydebug где нибудь перед вызовом парсера. PS. Программа должна быть консольная, трасса парсинга выводится обычными printf'ами |
| Автор: fuckingniger 1.4.2011, 12:31 | ||||||||
я с проектами напутал. на самом деле
в main.cpp написал
Добавлено через 4 минуты и 58 секунд не помогло
|
| Автор: mes 1.4.2011, 12:38 | ||
без инициализации вы объявляете, а не определяете переменную |
| Автор: fuckingniger 1.4.2011, 12:46 | ||||
а вот это уже помогло. только распознование входного текста закончилось на первом пробеле/табе на вход :
в консоли написалось :
|
| Автор: xvr 1.4.2011, 13:37 | ||
Ее и надо объявить, определяться она должна в парсере, который сгенерил bison
|
| Автор: mes 1.4.2011, 14:00 | ||||||
|
| Автор: fuckingniger 1.4.2011, 14:23 |
| bison.cpp не помещается сюда в сообщение вот ссылка на весь проект http://rghost.ru/5027432 bison.cpp находится в курсовик_бизон - копия\Bison |
| Автор: xvr 1.4.2011, 16:40 | ||||||||||
В bison.bat добавить -v
Кстати - у вас в грамматике куча конфликтов, это не есть гуд
Во вторых в проперти проекта, в раздел Defines добавить YYDEBUG=1 (или прямо в файл грамматики):
Далее в main заменить
Должно печатать трассу разбора |