Промяна на кода на GCC. Как да тествам добавянето на новодобавени функции?

Уча компилатори и искам да правя собствени промени в анализатора и лексера на GCC. Има ли някакъв инструмент за тестване или някакъв друг наличен начин, който ми позволява да променя gcc кода и да го тествам съответно.

Опитах се да променя файла за лексикален анализ, но сега съм блокиран, защото не знам как да компилирам тези файлове. Опитах компилацията с друг GCC компилатор, но показвам грешки. Дори опитах конфигуриране и създаване, но правенето на това при всяка промяна не изглежда ефективно.

Целта на тези промени е просто обучение и трябва да взема предвид само GCC, тъй като това е единственият компилатор, разрешен от моя инструктор.


person anuj pradhan    schedule 20.11.2014    source източник
comment
@KarolyHorvath Тук Постоянно означава, че искам да използвам направените от мен промени в Лексикалния анализатор на 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++. Бихте ли споменали някаква връзка, където може да се намери подобна помощ. Не непременно за марка, но по отношение на наличността на различни функции в GCC. Например, лексикален анализатор присъства в lex.c или парсер присъства в някакъв файл, например parser.c. - person anuj pradhan; 20.11.2014
comment
@anujpradhan Разбира се, добави две връзки. - person ; 20.11.2014
comment
Току-що прекарах 10 минути, казвайки едно и също нещо (bootstrap) с повече думи и по-малко информация ;-). - 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