Изменение кода GCC. Как проверить добавление новых функций?

Я изучаю компиляторы и хочу внести собственные изменения в парсер и лексер GCC. Есть ли какой-либо инструмент для тестирования или какой-либо другой доступный способ, который позволяет мне изменить код gcc и соответственно протестировать его.

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

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


person anuj pradhan    schedule 20.11.2014    source источник
comment
@KarolyHorvath Здесь Permanent означает, что я хочу использовать мои изменения, внесенные в Lexical Analyzer of GCC.   -  person anuj pradhan    schedule 20.11.2014
comment
Да, но что вы подразумеваете под постоянным? Лексический анализатор вернулся обратно?   -  person Sneftel    schedule 20.11.2014
comment
@KarolyHorvath Я отредактировал. Я думаю, это лучше объяснит. Предыдущее было неоднозначным. Моя ошибка!!   -  person anuj pradhan    schedule 20.11.2014
comment
Вероятно, вам лучше изучить компиляторы, взломав более простой компилятор, чем gcc, например Small C или Tiny C. См. Также stackoverflow.com/questions/2349468/.   -  person lhf    schedule 20.11.2014


Ответы (2)


Я даже пробовал сконфигурировать и сделать, но делать это с каждым изменением совсем не эффективно.

Это именно то, что вам следует делать. (Что ж, вам не нужно повторно настраивать после каждого изменения, просто запустите make снова.) Однако по умолчанию GCC настраивается в режиме начальной загрузки, что означает, что не только ваш компилятор хоста компилирует GCC, который скомпилировал GCC, а затем компилирует GCC. опять и опять). Это избыточно для ваших целей, и вы можете предотвратить это, добавив --disable-bootstrap в параметры конфигурации.

Другой вариант, который может помочь значительно сократить время сборки, - это включение только тех языков, которые вам интересны. Поскольку вы экспериментируете, вы, вероятно, будете очень счастливы, если создадите что-то, что работает для C или для C ++, даже если для каких-то непонятных причина поломки Java. Тестирование других языков становится актуальным, когда вы делаете свои изменения доступными для более широкой аудитории, но это еще не так. Опция конфигурации, которая охватывает это, - --enable-languages=c,c++.

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

person Community    schedule 20.11.2014
comment
Спасибо :) Выглядит хорошо. Я уже использовал --enable-language = c, c ++. Не могли бы вы указать ссылку, где можно найти аналогичную помощь. Не обязательно для make, но в отношении наличия различных функций в GCC. Например, лексический анализатор присутствует в lex.c или парсер присутствует в каком-то файле, например parser.c. - person anuj pradhan; 20.11.2014
comment
@anujpradhan Конечно, добавил две ссылки. - person ; 20.11.2014
comment
Я просто потратил 10 минут, говоря то же самое (бутстрап), но с большим количеством слов и меньшим количеством информации ;-). - person Peter - Reinstate Monica; 20.11.2014

Вы вносите изменения (которые становятся «постоянными», сохраняя файлы, которые вы изменяете), компилируете код и запускаете набор тестов.

Обычно вы пишете дополнительные тесты или удаляете те, которые аннулируются вашими изменениями, и все.

Если ваши изменения не вносят ничего «положительного» в компилятор, апстрим, вероятно, никогда их не примет, и единственное «постоянство», которое вы можете получить, - это модификации в вашей локальной копии.

person rubenvb    schedule 20.11.2014
comment
Я попытался собрать его снова, используя configure и make. Это кажется неэффективным при каждом изменении. - person anuj pradhan; 20.11.2014
comment
Что ж, GCC - это огромная кодовая база. Перестроения будут долгими. Обратите внимание, что шаг configure не должен быть строго обязательным, но система сборки GCC представляет собой довольно беспорядок (ага, сложный), и я не могу сказать вам, что потребует перенастройки, а что нет. - person rubenvb; 20.11.2014