ошибка сегментации сгибания / бизона перед main () - PullRequest
0 голосов
/ 06 ноября 2010

Я написал простой ассемблер, используя flex и bison. Это работало отлично, пока я не сделал небольшое изменение. Было безобидным дополнительным правилом в спецификациях lex и yacc. После этого он выдает ошибку сегментации каждый раз, когда я запускаю его. Я попытался отследить источник этой ошибки сегмента, но оказалось, что это происходит до того, как будет выполнено основное в файле lex. Затем я удалил добавленное мной дополнение и перекомпилировал его. Он по-прежнему показывает ту же ошибку.

Что не так ???

Я сделал что-то вроде этого

  • Таблица поиска, таблица символов, код Генератор в отдельных файлах
  • Анализатор в файле ".y", импортирующий вышеупомянутые файлы
  • Лексический сканер в файле ".l", импортирующий файл "* .tab.h"
  • связал lex.yy.c и parser.tab.c для создания исполняемого файла

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 06 ноября 2010
$ cc -g whatever...
$ gdb a.out
(gdb) run
<boom>
(gdb)bt

И если в данный момент ответ не очевиден, выберите всю приведенную выше последовательность и обновите свой вопрос выше.

Кстати, я полагаю, что вы изменили способ его построения,Возможно, вам просто нужно перевести свою программу обратно в hello, world, а затем начать добавлять другие компоненты один за другим.

1 голос
/ 06 ноября 2010

Пожалуйста, предоставьте больше информации, такой как обратная трассировка GDB и код соответствующих правил flex и bison.

Один совет отладки, который я имею, должен поместить операторы printf() в ваши правила flex.Например, предположим, что вы хотите, чтобы ваше новое правило совпадало с чем-то вроде THISLOOP: LWU R2, 0(R3).Затем в flex вы помещаете printf () в любые правила, соответствующие чему-либо из этого правила бизонов.Но опять же, без какого-либо кода невозможно отладить.

...