Если бы я хотел создать свой собственный язык, есть ли какие-нибудь инструменты, которые мне помогли бы? Я слышал о yacc, но мне интересно, как бы я реализовал в языке те функции, которые мне нужны.





ANTLR - очень хороший генератор парсеров, написанный на Java. Также доступен потрясающая книга.
Первый инструмент, который я бы порекомендовал, - это Книга Дракона. Это справочник по сборке компиляторов. Разработка языка - непростая задача, еще сложнее ее реализовать. Книга драконов помогает в этом. В книге даже есть ссылки на стандартные инструменты unix lex и yacc. Инструменты, эквивалентные GNU, называются flex и bison. Оба они генерируют лексер и синтаксический анализатор. Существуют также более современные инструменты для генерации лексера и парсера, например для java есть ANTLR (тоже помню javacc и CUP, но сам использовал только ANTLR). Тот факт, что ANTLR сочетает в себе синтаксический анализатор и лексер, и этот плагин eclipse доступен, делает его очень удобным в использовании. Но чтобы сравнить их, какой тип парсера вам нужен, и узнать, для чего они вам нужны, вы должны прочитать книгу Дракона. Есть и другие вещи, которые вы должны учитывать, например, среду выполнения, парадигму программирования, ....
Если у вас уже есть определенные дизайнерские идеи и вам нужна помощь на определенном этапе или деталях, ответы могут быть более полезными.
Близко связанные вопросы (все были взяты путем поиска на [compiler] в stackoverflow):
И похожие темы (из того же поиска):
Обновлено: я знаю, что поиск вопросов, связанных с stackoverflow, - это не то, что мы хотели бы, но действительно ли нам нужна была n-я итерация этой темы? Мех!
Мне нравится Flex (Fast Lex) [Лексический сканер]
и Bison (Волосатый Yacc) [еще один компилятор компилятора]
Оба бесплатны и доступны во всех установках * NIX. Для Windows просто установите cygwin.
Но я старая школа.
С помощью этих инструментов вы также можете найти в Интернете правила lex и грамматики yacc для многих популярных языков. Таким образом, вы получите быстрый способ начать работу, а затем сможете настраивать грамммеры по ходу работы.
Пример: обработка арифметических выражений [порядок старшинства и т. д. - это уже смертельная проблема], вы можете быстро получить грамматор для этого из Интернета.
Альтернатива, о которой стоит подумать, - написать внешнее расширение для GCC.
.
Нетривиально, но если вам нужен скомпилированный язык, он экономит много работы в разделе генерации кода (вам все равно нужно знать и понимать flex / bison).
Канонический вопрос для этого: stackoverflow.com/questions/1669/learning-to-write-a-compile r