Создание собственного языка

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

Канонический вопрос для этого: stackoverflow.com/questions/1669/learning-to-write-a-compile‌ r

dmckee --- ex-moderator kitten 04.02.2010 17:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
1
3 239
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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).

Другие вопросы по теме