Разбор исходного кода - PullRequest
3 голосов
/ 28 мая 2011

Мне нужно разобрать исходный код разных файлов, каждый из которых написан на другом языке, и я хотел бы сделать это с помощью C.

Для этого я подумал об использовании yacc /lex, но я нахожу их очень трудными для понимания, возможно, из-за полного отсутствия приличной документации (или это, или они действительно загадочные).

Итак, мои вопросы: где я могу найти что-то хорошеедокументация для yacc / lex, желательно введение в стиле учебника?Или есть ли лучший способ сделать это в C?Может быть, я мог бы использовать что-то еще вместо yacc / lex, возможно, даже на другом языке?

Ответы [ 3 ]

5 голосов
/ 28 мая 2011

yacc и lex - очень мощные инструменты, построенные вокруг теорий построения компиляторов.Чтобы полностью понять их, вам, вероятно, понадобятся некоторые основы формальных языков, теории автоматов и построения компилятора.

книга драконов - классика по этому вопросу.

1 голос
/ 29 мая 2011

Вторая половина Kernighan и Pike's Среда программирования Unix - это расширенное введение в программирование интерпретатора с использованием lex и yacc.Покрытие lex немного слабовато, так как в основном они используют собственный сканер.

0 голосов
/ 16 августа 2012

Если вам нравится математика (самый важный пункт в этом ответе), то напишите свой собственный компилятор-компилятор, а затем напишите свой компилятор с этим. Я сделал это однажды, потому что мне надоело писать все функции для всех производств компилятора, который я начал как компилятор с рекурсивным спуском, потому что доступные варианты в 2004 году меня не устраивали, и потому что у меня было свободное время во время поиска работы. Я использовал компилятор только в одном проекте, и он не обязательно тщательно протестирован, поэтому он не на github. Я был очень доволен синтаксисом файла грамматики, который я разработал.

Если бы у меня была такая потребность сегодня, я мог бы принять другое решение. Новые современные CC, похоже, сильно изменились за последние 8 лет.

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