Генериране на анализатор на Fortran 77 от граматика на yacc с помощта на Happy (Haskell)

Попаднах на следната F77 граматика на yacc: http://yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y?revision=1.3&view=markup.

Как мога да направя анализатор на Fortran 77 от този файл с помощта на Happy?

Защо има малко C?/C++? код в този .y файл?

АКТУАЛИЗАЦИЯ: Благодарим ви за отговорите!

От известно време си играя с два нови подхода:

  1. извличане и модифициране на анализатора от пакета с изходния код, включен в документ, озаглавен Параметричен Fortran ,
  2. писане на граматика от нулата с помощта на BNFC.

Вече имам и двете, за да анализирам прости кодови извадки. Ще държа хората в течение, ако нещо използваемо се появи през този век ^__^" хехе.

P/S: Искам да видя дали бих могъл сам да набера достатъчно инерция, за да инициирам проект за машина за автоматично диференциране, която да замени една двоична, от която зависим за момента. За забавление в началните етапи: гледам Love Shuffle! Това е много приятна J-драма! Силно препоръчително...


person Cetin Sert    schedule 23.06.2009    source източник


Отговори (4)


C е семантичното действие за намаляване на стека, когато се чете синтаксисът. Тези действия са в C, тъй като дефиницията е предназначена за Bison/Yacc, който създава файл с източник на C.

Ако искате да използвате Happy, пренесете BNF към синтаксиса на дефиницията на Happy и напишете своята семантика на Haskell.

Само върхът на айсберга за получаване на нещо полезно обаче.

Ако все още нямате копие, инвестирайте в Книгата на дракона (Компилатори: Принципи, техники и инструменти от Aho, Lam, Sethi, Ullman - Pearson)

person Aiden Bell    schedule 23.06.2009

Защо другите отговори са верни в общия смисъл, тъй като ще трябва да напишете свои собствени действия, за да направите нещо смислено. Дефиницията на Yacc, към която сте се свързали, всъщност няма никакви действия, свързани с граматически правила. Това, което прави, е, че дефинира функцията yyerror и някакъв код за извличане на стойности от yylval въз основа на типа токен.

Ако нямате представа какво представляват yyerror/yylval, трябва да прочетете урок за bison/flex. Книгата „Дракон“ също е добър източник, ако сте по-сериозни в това отношение. Има и някои отлични брошури от курс на Станфорд за компилатори, плаващи из мрежата, които са базирани на книгата.

person oggy    schedule 24.06.2009
comment
Благодаря, вече си взех екземпляр от книгата! Колкото до документите от Станфорд, мисля да ги проверя по-късно, след като имам време ^o^!! - person Cetin Sert; 25.06.2009

Ще ви трябва AST за изграждане, което може да бъде конструирано по еквивалентен начин на C фрагментите във файла Yacc.

person Don Stewart    schedule 23.06.2009
comment
Мисля, че семантиката на езика, на който са написани действията за изграждане на AST, ще повлияе силно на начина, по който са написани. Не бих предложил да копирате дословно в Haskell от C. Това ще доведе до неефективност и объркване. Най-добрият подход би бил да се проучат тънкостите на AST/парсерите/компилаторите и след това да се приложи директно в Haskell, без да се разглежда твърде много съществуващите производствени действия в C. - person Aiden Bell; 25.06.2009
comment
благодаря, както казах в актуализацията, сега следвам вашите (dons & aiden) предложения. - person Cetin Sert; 25.06.2009

Използвайте BNFC и напишете своя собствена граматика от нулата! BNFC върши чудеса и можете да правите синтактичния анализ точно както желаете.

person Cetin Sert    schedule 26.06.2009
comment
Някакъв публичен източник за вашата работа? Искам да създам точно същото нещо, за да мога да използвам някакъв fortran код за работа. - person leon; 09.03.2010