Создание синтаксического анализатора Fortran 77 из грамматики yacc с использованием Happy (Haskell) - PullRequest
3 голосов
/ 23 июня 2009

Я наткнулся на следующую грамматику Y77 YACC: http://yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y?revision=1.3&view=markup.

Как сделать из этого файла парсер Fortran 77, используя Happy ?

Почему существует какой-то C? / C ++? код в этом файле .y?

ОБНОВЛЕНИЕ: Спасибо за ваши ответы!

Я уже некоторое время играю с двумя новыми подходами:

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

У меня есть и то, и другое для анализа простых фрагментов кода. Я буду держать людей в курсе, если что-то пригодное для использования появится в этом столетии ^ __ ^ "хе-хе.

P / S: Хотите посмотреть, смогу ли я собрать достаточно импульса самостоятельно, чтобы инициировать проект для механизма автоматического дифференцирования для замены только двоичного, от которого мы зависим в настоящее время. Для развлечения на начальных этапах: я смотрю Love Shuffle ! Это очень приятная J-Drama! Настоятельно рекомендуется ...

Ответы [ 4 ]

2 голосов
/ 24 июня 2009

Почему другие ответы верны в общем смысле, в том, что вам нужно написать свои собственные действия, чтобы выполнить что-либо значимое в определении Yacc, с которым вы связаны, на самом деле не связано никаких действий с правилами грамматики. Что он делает, так это то, что он определяет функцию yyerror и некоторый код для извлечения значений из yylval на основе типа токена.

Если вы не знаете, что такое yyerror / yylval, вам следует прочитать учебник bison / flex. Книга Дракона также является хорошим ресурсом, если вы более серьезно относитесь к этому. Есть также несколько отличных раздаточных материалов из Стэнфордского курса о компиляторах, плавающих по сети, которые основаны на книге.

2 голосов
/ 23 июня 2009

C - это семантическое действие для уменьшения стека при чтении синтаксиса. Эти действия выполняются на C, поскольку определение предназначено для Bison / Yacc, который создает исходный файл на языке C.

Если вы хотите использовать Happy, перенесите BNF в синтаксис определения Happy и напишите свою семантику на Haskell.

Только верхушка айсберга для получения чего-либо полезного.

Если у вас еще нет копии, инвестируйте в Книгу Дракона (Компиляторы: принципы, методы и инструменты Ахо, Лама, Сетхи, Уллмана - Пирсона)

1 голос
/ 27 июня 2009

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

1 голос
/ 23 июня 2009

Вам понадобится AST для сборки, которая может быть построена аналогично фрагментам C в файле Yacc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...